mariadb - SSL Zertifikatproblem

Alle weiteren Dienste, die nicht in die drei oberen Foren gehören.
Antworten
joe2017
Beiträge: 208
Registriert: 07.08.2017 14:29:51

mariadb - SSL Zertifikatproblem

Beitrag von joe2017 » 17.07.2018 16:24:07

Ich habe hier ein ganz merkwürdiges Problem.

Ich habe eine Debian 9.4.0 Installation mit einem mariadb Server.

Code: Alles auswählen

sudo apt install software-properties-common dirmngr
sudo apt-key adv --recv-keys --keyserver keyserver.ubuntu.com 0xF1656F24C74CD1D8
sudo add-apt-repository 'deb [arch=amd64] http://ftp.hosteurope.de/mirror/mariadb.org/repo/10.3/debian stretch main'
sudo apt update
sudo apt install mariadb-server-10.3 libmariadbclient18
Folgende Configuration hab ich vorgenommen.
nano /etc/mysql/my.cnf

Code: Alles auswählen

bind-address            = SERVER-IP
sudo nano /etc/mysql/mariadb.conf.d/50-server.cnf

Code: Alles auswählen

[mysqld]

### MySQL Server ###
## Securing the Database with ssl option and certificates ##
## There is no control over the protocol level used. ##
##  mariadb will use TLSv1.0 or better.  ##
ssl

ssl-ca=/etc/mysql/ca_ecdsa.crt.pem
ssl-cert=/etc/mysql/server_ecdsa.crt.pem
ssl-key=/etc/mysql/server_ecdsa.key.pem
ssl=on
ssl-cipher=TLSv1.2
sudo nano /etc/mysql/mariadb.conf.d/50-mysql-clients.cnf

Code: Alles auswählen

[mysql]

## MySQL Client Configuration ##
ssl-ca=/etc/mysql/ca_ecdsa.crt.pem
ssl-cert=/etc/mysql/client_ecdsa.crt.pem
ssl-key=/etc/mysql/client_ecdsa.key.pem

### This option is disabled by default ###
### ssl-verify-server-cert ##
#ssl-verify-server-cert=on
Wenn ich mich Verbinde (mysql -u root -p) und mir den Status und die SSL Informationen anzeigen lasse, sieht das so aus.

Code: Alles auswählen

SHOW VARIABLES LIKE '%ssl%';
+---------------------+------------------------------------------+
| Variable_name       | Value                                    |
+---------------------+------------------------------------------+
| have_openssl        | YES                                      |
| have_ssl            | DISABLED                                 |
| ssl_ca              | /etc/mysql/ca_ecdsa.crt.pem          |
| ssl_capath          |                                          |
| ssl_cert            | /etc/mysql/server_ecdsa.crt.pem |
| ssl_cipher          |                                          |
| ssl_crl             |                                          |
| ssl_crlpath         |                                          |
| ssl_key             | /etc/mysql/server_ecdsa.key.pem |
| version_ssl_library | OpenSSL 1.1.0f  25 May 2017              |
+---------------------+------------------------------------------+



status;
--------------
mysql  Ver 15.1 Distrib 10.3.8-MariaDB, for debian-linux-gnu (x86_64) using readline 5.2

Connection id:          11
Current database:
Current user:           root@localhost
SSL:                    Not in use
Current pager:          stdout
Using outfile:          ''
Using delimiter:        ;
Server:                 MariaDB
Server version:         10.3.8-MariaDB-1:10.3.8+maria~stretch-log mariadb.org binary distribution
Protocol version:       10
Connection:             Localhost via UNIX socket
Server characterset:    latin1
Db     characterset:    latin1
Client characterset:    utf8
Conn.  characterset:    utf8
UNIX socket:            /var/run/mysqld/mysqld.sock
Uptime:                 1 min 15 sec

Threads: 8  Questions: 7  Slow queries: 0  Opens: 17  Flush tables: 1  Open tables: 11  Queries per second avg: 0.093
--------------
Wenn ich meine Server und Client Zertifikate auskommentiere sieht das so aus.

Code: Alles auswählen

SHOW VARIABLES LIKE '%ssl%';
+---------------------+-----------------------------+
| Variable_name       | Value                       |
+---------------------+-----------------------------+
| have_openssl        | YES                         |
| have_ssl            | YES                         |
| ssl_ca              |                             |
| ssl_capath          |                             |
| ssl_cert            |                             |
| ssl_cipher          |                             |
| ssl_crl             |                             |
| ssl_crlpath         |                             |
| ssl_key             |                             |
| version_ssl_library | OpenSSL 1.1.0f  25 May 2017 |
+---------------------+-----------------------------+
10 rows in set (0.003 sec)



 status;
--------------
mysql  Ver 15.1 Distrib 10.3.8-MariaDB, for debian-linux-gnu (x86_64) using readline 5.2

Connection id:          9
Current database:
Current user:           root@localhost
SSL:                    Not in use
Current pager:          stdout
Using outfile:          ''
Using delimiter:        ;
Server:                 MariaDB
Server version:         10.3.8-MariaDB-1:10.3.8+maria~stretch-log mariadb.org binary distribution
Protocol version:       10
Connection:             Localhost via UNIX socket
Server characterset:    latin1
Db     characterset:    latin1
Client characterset:    utf8
Conn.  characterset:    utf8
UNIX socket:            /var/run/mysqld/mysqld.sock
Uptime:                 10 sec

Threads: 8  Questions: 5  Slow queries: 0  Opens: 17  Flush tables: 1  Open tables: 11  Queries per second avg: 0.500
--------------
Weshalb steht mein have_ssl hier auf einmal auf YES obwohl ich keine Zertifikate hinterlegt habe? Was könnte der Grund sein weshalb meine Zertifikate nicht erkannt werden?
Hierbei handelt es sich um ECC 384 Zertifikate (TLSv1.2, Cipher is ECDHE-ECDSA-AES256-GCM-SHA384).

Benutzeravatar
niemand
Beiträge: 11590
Registriert: 18.07.2004 16:43:29

Re: mariadb - SSL Zertifikatproblem

Beitrag von niemand » 17.07.2018 16:31:04

joe2017 hat geschrieben: ↑ zum Beitrag ↑
17.07.2018 16:24:07
Weshalb steht mein have_ssl hier auf einmal auf YES obwohl ich keine Zertifikate hinterlegt habe?
Möglicherweise, weil’s sich auf die grundsätzliche Verfügbarkeit bezieht?
joe2017 hat geschrieben: ↑ zum Beitrag ↑
17.07.2018 16:24:07
Was könnte der Grund sein weshalb meine Zertifikate nicht erkannt werden?
Vielleicht, weil du sie auskommentiert hast, wie du weiter oben schreibst?

Ansonsten ist zu lesen, dass die Verbindung über einen lokalen Socket läuft. Wenn du die Verbindung über’s Netz testen willst, solltest du zu localhost:3306 (oder was auch immer du als Port konfiguriert hast) verbinden.
Hardware: dunkelgrauer Laptop mit buntem Display (zum Aufklappen!) und eingebauter Tastatur; beiger Klotz mit allerhand Kabeln und auch mit Farbdisplay und Tastatur (je zum auf’n Tisch Stellen)
Am 7. Tag aber sprach der HERR: „QWNoIFNjaGVpw58sIGtlaW5lbiBCb2NrIG1laHIgYXVmIGRlbiBNaXN0ISBJY2ggbGFzcyBkYXMgamV0enQgZWluZmFjaCBzbyDigKYK“

joe2017
Beiträge: 208
Registriert: 07.08.2017 14:29:51

Re: mariadb - SSL Zertifikatproblem

Beitrag von joe2017 » 17.07.2018 16:47:23

joe2017 hat geschrieben: ↑ zum Beitrag ↑
17.07.2018 16:24:07
Was könnte der Grund sein weshalb meine Zertifikate nicht erkannt werden?
Entschuldige, dass war natürlich missverständlich. Ich meinte natürlich weshalb die Zertifikate nicht erkannt werden bevor ich diese auskommentiert habe.
Ich erhalte ja die Meldung have_ssl DISABLE
niemand hat geschrieben: ↑ zum Beitrag ↑
17.07.2018 16:31:04
Ansonsten ist zu lesen, dass die Verbindung über einen lokalen Socket läuft. Wenn du die Verbindung über’s Netz testen willst, solltest du zu localhost:3306 (oder was auch immer du als Port konfiguriert hast) verbinden.
Aktuell möchte ich die Zertifikate nur von meinem lokalen Server testen.

eggy
Beiträge: 1462
Registriert: 10.05.2008 11:23:50

Re: mariadb - SSL Zertifikatproblem

Beitrag von eggy » 17.07.2018 17:33:39

Mal geschaut was die Logs sagen?
Dienst Stoppen, und mit den entsprechenden cmdline-Schaltern auf der shell starten, dann solltest Du genug Infos bekommen was schiefläuft, ggfs verbose hochdrehen
Beispiel da: https://mariadb.com/kb/en/library/maria ... on-issues/
und demnach dürfen Client und Server Zertifikate keinesfalls mit gleichen Daten gefüttert worden sein (daran liegt's wahrscheinlich auch nicht, es sei nur der Vollständigkeit halber mit erwähnt),
Grundlegendes da: https://mariadb.com/kb/en/library/secur ... -overview/
Laut https://forum.ubuntuusers.de/topic/mari ... rtifikate/ sind die Debianpakete (ka, ob damit die von Debian stammen oder allgemein die auf Debian laufen gemeint sind) mit yaSSL (was lt dem Thread kein ECC384 kann - aber ka, ob das stimmt) gebaut, die anderen gegen OpenSSL, finde mal raus was Deine Version verwendet und ob die Lib Deine Certs überhaupt versteht.
Infos dazu: https://mariadb.com/kb/en/library/ssltl ... variables/
Im unteren Teil des folgenden Artikels sieht man nen Bild, auf dem abgebildet ist, wie ein verwendeter Cypher im status aussehn sollte
https://www.cyberciti.biz/faq/how-to-se ... m-clients/

Und der oben verlinkte kb Artikel nennt das da, vielleicht kommt da ja was hilfreiches bei raus

Code: Alles auswählen

openssl verify -CAfile /etc/mysql/newcerts/ca-cert.pem /etc/mysql/newcerts/server-cert.pem /etc/mysql/newcerts/client-cert.pem



Leicht OffTopic:
joe2017 hat geschrieben: ↑ zum Beitrag ↑
17.07.2018 16:47:23
Aktuell möchte ich die Zertifikate nur von meinem lokalen Server testen.
Willst Du auf den Server nur per lokaler Verbindung (unixsocket, tcp localhost) oder auch von woanders zugreifen? Im ersten Fall solltest Du dann Deine bind-address Einstellung ändern, im zweiten mal über zusätzliche Sicherungsmaßnahmen nachdenken, root umbenennen wäre nen Anfang.

joe2017
Beiträge: 208
Registriert: 07.08.2017 14:29:51

Re: mariadb - SSL Zertifikatproblem

Beitrag von joe2017 » 18.07.2018 10:22:26

eggy hat geschrieben: ↑ zum Beitrag ↑
17.07.2018 17:33:39
und demnach dürfen Client und Server Zertifikate keinesfalls mit gleichen Daten gefüttert worden sein (daran liegt's wahrscheinlich auch nicht, es sei nur der Vollständigkeit halber mit erwähnt),
Grundlegendes da: https://mariadb.com/kb/en/library/secur ... -overview/
Meine Inhalte der Organisation, Ort sind natürlich gleich. Lediglich der OU und CN sind bei den beiden Zertifikaten unterschiedlich.
eggy hat geschrieben: ↑ zum Beitrag ↑
17.07.2018 17:33:39
Laut https://forum.ubuntuusers.de/topic/mari ... rtifikate/ sind die Debianpakete (ka, ob damit die von Debian stammen oder allgemein die auf Debian laufen gemeint sind) mit yaSSL (was lt dem Thread kein ECC384 kann - aber ka, ob das stimmt) gebaut, die anderen gegen OpenSSL, finde mal raus was Deine Version verwendet und ob die Lib Deine Certs überhaupt versteht.
Wie man oben sehen kann, verwende ich OpenSSL und nicht yaSSL. OpenSSL sollte die Zertifikate eigentlich unterstützen.
Kann mann die unterstützten Zertifikate auch irgendwie abfragen?
eggy hat geschrieben: ↑ zum Beitrag ↑
17.07.2018 17:33:39
Und der oben verlinkte kb Artikel nennt das da, vielleicht kommt da ja was hilfreiches bei raus

Code: Alles auswählen

openssl verify -CAfile /etc/mysql/newcerts/ca-cert.pem /etc/mysql/newcerts/server-cert.pem /etc/mysql/newcerts/client-cert.pem
Meine Zertifikate werden beide mit OK angezeigt. Hatte ich auch bereits getestet.
eggy hat geschrieben: ↑ zum Beitrag ↑
17.07.2018 17:33:39
Willst Du auf den Server nur per lokaler Verbindung (unixsocket, tcp localhost) oder auch von woanders zugreifen? Im ersten Fall solltest Du dann Deine bind-address Einstellung ändern, im zweiten mal über zusätzliche Sicherungsmaßnahmen nachdenken, root umbenennen wäre nen Anfang.
Das ist aktuell nur der erste Schritt. Die Bind-Adresse hab ich auch bereits angepasst. Hatte ich doch oben auch bereits geschrieben. Selbstverständlich werde ich mein root anschließend umbenennen und weitere Sicherheitsmaßnahmen treffen. Es gelingt jedoch aktuell nicht einmal der erste lokale Test mit SSL. Der rest kommt anschließend. ;-)

joe2017
Beiträge: 208
Registriert: 07.08.2017 14:29:51

Re: mariadb - SSL Zertifikatproblem

Beitrag von joe2017 » 18.07.2018 10:25:07

eggy hat geschrieben: ↑ zum Beitrag ↑
17.07.2018 17:33:39
Mal geschaut was die Logs sagen?
Dienst Stoppen, und mit den entsprechenden cmdline-Schaltern auf der shell starten, dann solltest Du genug Infos bekommen was schiefläuft, ggfs verbose hochdrehen
Beispiel da: https://mariadb.com/kb/en/library/maria ... on-issues/
Hiermit komme ich aktuell nicht klar. Bin mir nicht sicher was du meinst. Was mir auch aufgefallen ist... Mit der Standard Debian installation wird ein ERROR Log erzeugt (/var/log/mysql/error.log).
In meiner Installation angeleitet von mariadb.org wird dieses Log nicht mehr erzeugt. Muss ich das manuell anlegen bzw. konfigurieren?

joe2017
Beiträge: 208
Registriert: 07.08.2017 14:29:51

Re: mariadb - SSL Zertifikatproblem

Beitrag von joe2017 » 18.07.2018 10:48:12

Hier nochmal ein Auszug aus dem syslog. Ich hab natürlich intere Daten ausgetauscht.

Code: Alles auswählen

Jul 18 10:40:09 SERVER systemd[1]: Starting MariaDB 10.3.8 database server...
Jul 18 10:40:10 SERVER mysqld[8844]: 2018-07-18 10:40:10 0 [Note] /usr/sbin/mysqld (mysqld 10.3.8-MariaDB-1:10.3.8+maria~stretch-log) starting as process 8844 ...
Jul 18 10:40:10 SERVER mysqld[8844]: 2018-07-18 10:40:10 0 [Note] InnoDB: Using Linux native AIO
Jul 18 10:40:10 SERVER mysqld[8844]: 2018-07-18 10:40:10 0 [Note] InnoDB: Mutexes and rw_locks use GCC atomic builtins
Jul 18 10:40:10 SERVER mysqld[8844]: 2018-07-18 10:40:10 0 [Note] InnoDB: Uses event mutexes
Jul 18 10:40:10 SERVER mysqld[8844]: 2018-07-18 10:40:10 0 [Note] InnoDB: Compressed tables use zlib 1.2.8
Jul 18 10:40:10 SERVER mysqld[8844]: 2018-07-18 10:40:10 0 [Note] InnoDB: Number of pools: 1
Jul 18 10:40:10 SERVER mysqld[8844]: 2018-07-18 10:40:10 0 [Note] InnoDB: Using generic crc32 instructions
Jul 18 10:40:10 SERVER mysqld[8844]: 2018-07-18 10:40:10 0 [Note] InnoDB: Initializing buffer pool, total size = 256M, instances = 1, chunk size = 128M
Jul 18 10:40:10 SERVER mysqld[8844]: 2018-07-18 10:40:10 0 [Note] InnoDB: Completed initialization of buffer pool
Jul 18 10:40:10 SERVER mysqld[8844]: 2018-07-18 10:40:10 0 [Note] InnoDB: If the mysqld execution user is authorized, page cleaner thread priority can be changed. See the man page of setpriority().
Jul 18 10:40:10 SERVER mysqld[8844]: 2018-07-18 10:40:10 0 [Note] InnoDB: 128 out of 128 rollback segments are active.
Jul 18 10:40:10 SERVER mysqld[8844]: 2018-07-18 10:40:10 0 [Note] InnoDB: Creating shared tablespace for temporary tables
Jul 18 10:40:10 SERVER mysqld[8844]: 2018-07-18 10:40:10 0 [Note] InnoDB: Setting file './ibtmp1' size to 12 MB. Physically writing the file full; Please wait ...
Jul 18 10:40:10 SERVER mysqld[8844]: 2018-07-18 10:40:10 0 [Note] InnoDB: File './ibtmp1' size is now 12 MB.
Jul 18 10:40:10 SERVER mysqld[8844]: 2018-07-18 10:40:10 0 [Note] InnoDB: Waiting for purge to start
Jul 18 10:40:10 SERVER mysqld[8844]: 2018-07-18 10:40:10 0 [Note] InnoDB: 10.3.8 started; log sequence number 1631184; transaction id 21
Jul 18 10:40:10 SERVER mysqld[8844]: 2018-07-18 10:40:10 0 [Note] InnoDB: Loading buffer pool(s) from /var/lib/mysql/ib_buffer_pool
Jul 18 10:40:10 SERVER mysqld[8844]: 2018-07-18 10:40:10 0 [Note] Plugin 'FEEDBACK' is disabled.
Jul 18 10:40:10 SERVER mysqld[8844]: 2018-07-18 10:40:10 0 [Note] InnoDB: Buffer pool(s) load completed at 180718 10:40:10
Jul 18 10:40:10 SERVER mysqld[8844]: Enter PEM pass phrase:
Jul 18 10:40:10 SERVER mysqld[8844]: SSL error: Unable to get private key from '/etc/mysql/SERVER_ecdsa.key.pem'
Jul 18 10:40:10 SERVER mysqld[8844]: 2018-07-18 10:40:10 0 [Warning] Failed to setup SSL
Jul 18 10:40:10 SERVER mysqld[8844]: 2018-07-18 10:40:10 0 [Warning] SSL error: Unable to get private key
Jul 18 10:40:10 SERVER mysqld[8844]: 2018-07-18 10:40:10 0 [Warning] SSL error: error:2807106B:UI routines:UI_process:processing error
Jul 18 10:40:10 SERVER mysqld[8844]: 2018-07-18 10:40:10 0 [Warning] SSL error: error:0906406D:PEM routines:PEM_def_callback:problems getting password
Jul 18 10:40:10 SERVER mysqld[8844]: 2018-07-18 10:40:10 0 [Warning] SSL error: error:0907B068:PEM routines:PEM_read_bio_PrivateKey:bad password read
Jul 18 10:40:10 SERVER mysqld[8844]: 2018-07-18 10:40:10 0 [Warning] SSL error: error:140B0009:SSL routines:SSL_CTX_use_PrivateKey_file:PEM lib
Jul 18 10:40:10 SERVER mysqld[8844]: 2018-07-18 10:40:10 0 [Note] Server socket created on IP: 'x.x.x.x'.
Jul 18 10:40:10 SERVER mysqld[8844]: 2018-07-18 10:40:10 0 [Note] Reading of all Master_info entries succeded
Jul 18 10:40:10 SERVER mysqld[8844]: 2018-07-18 10:40:10 0 [Note] Added new Master_info '' to hash table
Jul 18 10:40:10 SERVER mysqld[8844]: 2018-07-18 10:40:10 0 [Note] /usr/sbin/mysqld: ready for connections.
Jul 18 10:40:10 SERVER mysqld[8844]: Version: '10.3.8-MariaDB-1:10.3.8+maria~stretch-log'  socket: '/var/run/mysqld/mysqld.sock'  port: 3306  mariadb.org binary distribution
Jul 18 10:40:11 SERVER systemd[1]: Started MariaDB 10.3.8 database server.
nachdem ich folgende Zeile gelesen habe, dachte ich mir, dass ich vielleicht das Passwort aus der .key.pem entfernen muss.

Code: Alles auswählen

SSL error: Unable to get private key from '/etc/mysql/SERVER_ecdsa.key.pem'
Wenn ich die removepasswort.key.pem angebe, erhalte ich folgende Fehlermeldung.

Code: Alles auswählen

ERROR 2026 (HY000): SSL connection error: tlsv1 alert unknown ca

joe2017
Beiträge: 208
Registriert: 07.08.2017 14:29:51

Re: mariadb - SSL Zertifikatproblem

Beitrag von joe2017 » 18.07.2018 12:06:13

Ich denke es liegt an meinem Client Zertifikat.

Wenn ich meine Client Zertifikate in dem File (/etc/mysql/mariadb.conf.d/50-mysql-clients.cnf) auskommentiere, bekomme ich folgendes angezeigt.

mysql -u root -p

Code: Alles auswählen

SHOW VARIABLES LIKE '%ssl%';

have_openssl        | YES
have_ssl            | YES
Teste ich meine Verbindung mit dem client Zertifikat erhalte ich wieder folgende Meldung.
mysql --ssl-ca=/etc/mysql/ssl/ca_ecdsa.crt.pem --ssl-cert=/etc/mysql/ssl/client_ecdsa.crt.pem --ssl-key=/etc/mysql/ssl/client_ecdsa_re.key.pem -u root -p

Code: Alles auswählen

ERROR 2026 (HY000): SSL connection error: tlsv1 alert unknown ca
Wo könnte hier der Fehler liegen??? Ich komme irgendwie nicht drauf?

eggy
Beiträge: 1462
Registriert: 10.05.2008 11:23:50

Re: mariadb - SSL Zertifikatproblem

Beitrag von eggy » 18.07.2018 14:58:55

Da wird wohl entweder die CA oder eins der Zertifikate in der Kette zur CA zu fehlen. Wenn Du die Fehlermeldung (und mariadb) in die Suchmaschine Deiner Wahl steckst, findest Du ne handvoll Lösungsansätze (Intermediate-Zertifkate im pem zusammenfassen, CA zu den systemweit bekannten CAs stecken, ...), unter anderem https://serverfault.com/questions/39948 ... ate/399581

Und was die bind-address angeht, hast Du mich, glaube ich, missverstanden, ich meinte wenn Du nur local verbinden willst, ist die externe ServerIP nicht das richtige, dann lieber 127.0.0.1 oder sowas nehmen.

joe2017
Beiträge: 208
Registriert: 07.08.2017 14:29:51

Re: mariadb - SSL Zertifikatproblem

Beitrag von joe2017 » 18.07.2018 16:00:02

Zur Info. Ich habe meine root und intermediate ca Zertifikate bereits als vertrauenswürdig eingestuft.

Code: Alles auswählen

sudo cp /tmp/ca.* /usr/share/ca-certificates/
sudo dpkg-reconfigure ca-certificates
Mir war nicht bewusst, dass irgendwo ein CHAIN Zertifikat eingesetzt werden muss. Hierzu wird in den Config Files doch alles angegeben. Mach ich hier ein Denkfehler?

sudo nano /etc/mysql/mariadb.conf.d/50-server.cnf

Code: Alles auswählen

[mysqld]

### MySQL Server ###
## Securing the Database with ssl option and certificates ##
## There is no control over the protocol level used. ##
##  mariadb will use TLSv1.0 or better.  ##
ssl

ssl-ca=/etc/mysql/ca_ecdsa.crt.pem
ssl-cert=/etc/mysql/server_ecdsa.crt.pem
ssl-key=/etc/mysql/server_ecdsa.key.pem
ssl=on
ssl-cipher=TLSv1.2
sudo nano /etc/mysql/mariadb.conf.d/50-mysql-clients.cnf

Code: Alles auswählen

[mysql]

## MySQL Client Configuration ##
ssl-ca=/etc/mysql/ca_ecdsa.crt.pem
ssl-cert=/etc/mysql/client_ecdsa.crt.pem
ssl-key=/etc/mysql/client_ecdsa.key.pem

### This option is disabled by default ###
### ssl-verify-server-cert ##
#ssl-verify-server-cert=on

Antworten