Ubuntu 12.04 wird mit OpenSSL 1.0.1 ausgeliefert, das etwas andere Standardeinstellungen als die ältere Version von OpenSSL 0.9.8 hat.
Unter anderem, wenn Sie openssl req -newkey rsa:2048
einen RSA-Schlüssel generieren, erhalten Sie einen Schlüssel im Format PKCS # 8 . Diese Schlüssel werden im PEM-Format dargestellt und haben den allgemeineren -----BEGIN PRIVATE KEY-----
Header, der nicht angibt, um welche Art von Schlüssel es sich handelt (RSA, DSA, EC).
Zuvor hatten Schlüssel mit OpenSSL 0.9.8 immer das Format PKCS # 1 , das als PEM dargestellt wurde, und hatten den Header -----BEGIN RSA PRIVATE KEY-----
.
Aus diesem Grund können Sie die Kopf- und Fußzeile nicht einfach wie folgt ändern:
-----BEGIN PRIVATE KEY-----
zu
-----BEGIN RSA PRIVATE KEY-----`
Es ist nicht dasselbe und es wird nicht funktionieren. Stattdessen müssen Sie den Schlüssel mit in das alte Format konvertieren openssl rsa
. So was:
openssl rsa -in key_in_pkcs1_or_pkcs8.pem -out key_in_pkcs1.pem
MySQL (v5.5.35) unter Ubuntu 12.04 verwendet eine SSL-Implementierung namens yaSSL (v2.2.2). Es wird erwartet, dass die Schlüssel im PKCS # 1-Format vorliegen und das von OpenSSL 1.0 und höher verwendete PKCS # 8-Format nicht unterstützt. Wenn Sie einfach die Kopf- und Fußzeile ändern, wie in anderen Beiträgen in diesem Thread vorgeschlagen, wird sich MySQL / yaSSL nicht beschweren, aber Sie können keine Verbindung herstellen und erhalten stattdessen den folgenden Fehler:
ERROR 2026 (HY000): SSL connection error: protocol version mismatch
Ubuntu 14.04 wird mit OpenSSL 1.0.1f und neuen Einstellungen geliefert. Unter anderem werden Zertifikate mit SHA256-Digests anstelle von SHA1 generiert, das in früheren Versionen verwendet wurde. Übrigens unterstützt die mit MySQL gebündelte yaSSL-Version dies auch nicht.
Wenn Sie Zertifikate zur Verwendung mit MySQL generieren, müssen Sie sicherstellen, dass die RSA-Schlüssel in das traditionelle PKCS # 1-PEM-Format konvertiert werden und dass Zertifikate SHA1-Digests verwenden.
Im Folgenden finden Sie ein Beispiel für die Erstellung einer eigenen Zertifizierungsstelle, eines Serverzertifikats und eines Clientzertifikats.
# Generate a CA key and certificate with SHA1 digest
openssl genrsa 2048 > ca-key.pem
openssl req -sha1 -new -x509 -nodes -days 3650 -key ca-key.pem > ca-cert.pem
# Create server key and certficate with SHA1 digest, sign it and convert
# the RSA key from PKCS #8 (OpenSSL 1.0 and newer) to the old PKCS #1 format
openssl req -sha1 -newkey rsa:2048 -days 730 -nodes -keyout server-key.pem > server-req.pem
openssl x509 -sha1 -req -in server-req.pem -days 730 -CA ca-cert.pem -CAkey ca-key.pem -set_serial 01 > server-cert.pem
openssl rsa -in server-key.pem -out server-key.pem
# Create client key and certificate with SHA digest, sign it and convert
# the RSA key from PKCS #8 (OpenSSL 1.0 and newer) to the old PKCS #1 format
openssl req -sha1 -newkey rsa:2048 -days 730 -nodes -keyout client-key.pem > client-req.pem
openssl x509 -sha1 -req -in client-req.pem -days 730 -CA ca-cert.pem -CAkey ca-key.pem -set_serial 01 > client-cert.pem
openssl rsa -in client-key.pem -out client-key.pem