| | |
|
|
|
|
OpenSSL RSA-Schlüssel zur SSL-Nutzung mit MySQL konvertieren |
|
|
|
Wie man MySQL mit SSL verwendet, soll nicht Bestandteil dieses Artikels sein. Dafür gibt es bereits genug andere Seite im Internet
In diesem Beitrag geht es vielmehr um eine Art "Inkompatibilität" zwischen den aktuellen OpenSSL und MySQL Versionen. So wird es zu mindestens gerne in diversen Foren im Internet bezeichnet. In meinem Testszenario verwende ich Debian Wheezy mit OpenSSL 1.0.1e und MySQL 5.5.31 sowie Easy-RSA (ehemals im openvpn Paket inkludiert) zur Zertifikatserstellung mit eigener CA. Wobei letzteres egal ist, das Problem lässt sich auch nur mit OpenSSL nachvollziehen.
Seit Debian Wheezy und Ubuntu 12.04 gibt es dabei nämlich ein Problem: MySQL kann die erzeugten privaten Schlüssel für die Zertifikate nicht mehr einlesen. Der Hauptgrund ist schnell gefunden, da der Header und Footer nicht mehr identisch sind. Vor OpenSSL 1.0 sah ein RSA-Schlüssels so aus:
Code: -----BEGIN RSA PRIVATE KEY-----
[...]
-----END RSA PRIVATE KEY----- |
In neueren Versionen ab OpenSSL 1.0 allerdings so:
Code: -----BEGIN PRIVATE KEY-----
[...]
-----END PRIVATE KEY----- |
Dass der interne Parser in MySQL (bzw. der jeweiligen SSL-Lib) das vorerst einmal nicht mehr lesen kann, sollte klar sein. Das merkt man auch relativ schnell im Fehlerprotokoll von MySQL. Das war sogar Bestandteil eines völlig fehl platzierten MySQL-Bugs: Got error ERROR 2026 (HY000): SSL connection error: protocol version mismatch
Jemand kam dann bereits vor längerer Zeit auf die grandiose Idee, einfach Header und Footer auszutauschen. Ob das damals noch funktioniert hat, kann ich nur erraten. Auf jeden Fall wurde diese tolle "Lösung" mehrfach in Foren weiterverbreitet: Re: MySQL 5.5.8 SSL error: Unable to get private key from 'server-key.pem'
Leider bedachte dabei niemand, dass der geänderte Aufbau noch einen anderen Grund haben muss. In der PHP-Dokumentation ist diese Tatsache von einem Kommentator relativ gut dargelegt:
Chris hat Folgendes geschrieben: | Please take note that older versions of OpenSSL exports the RSA private key with '-----BEGIN RSA PRIVATE KEY-----' PEM tag, which includes just the privateKey field, thus omitting the version and privateKeyAlgorithm fields.
[...]
The newer OpenSSL versions exports the RSA private key with '-----BEGIN PRIVATE KEY-----' PEM tag, which includes the version and privateKeyAlgorithm fields. |
Die weit verbreitete ursprüngliche Idee im Netz: Dann verwende eine alte OpenSSL Version (z.B. aus Debian Squeeze oder Ubuntu 11.10) und schon funktioniert es! Das ist prinzipiell nicht falsch, da es so tatsächlich sofort funktioniert. Allerdings sollte man für kryptographische Berechnungen keine veralteten Systeme oder Versionen einsetzen, die bald keine Updates mehr bekommen. Außerdem ist diese Möglichkeit einfach nur unnötiger Overhead, es muss auch mit der neuen Version funktionieren...
Und das tut es auch! Anstatt irgendwelche alten Systeme zu verwenden oder selbst in der Schlüsseldatei herumzupfuschen, reicht ein einfacher OpenSSL Befehl zum Konvertieren in das alte Format:
Code: openssl rsa -in "original-key.pem" -out "mysql-key.pem" |
Und schon akzeptiert MySQL den RSA-Schlüssel
|
|
Kommentare: 1 |
Kommentare sind deaktiviert |
|
Autor |
Nachricht |
killerbees19
Administrator & Rennleitung
Geschlecht: Männlich
Anmeldedatum: 09.05.2006
Wohnort: Wien (Mariahilf)
Beiträge: 19699 Danke: 1308
|
Verfasst am: 28.01.2024, 08:46 Titel: |
|
|
Bei OpenSSL 3 braucht man übrigens -traditional:
Code: openssl rsa -in "original-key.pem" -out "mysql-key.pem" -traditional | |
|
|
|
Nach oben |
|
Verwendete Zeitzone: CET (Europe/Berlin ) Aktuelles Datum & Uhrzeit: 11.12.2024, 00:09 |
Nach oben |
|
|
|
|
|
|
| | |