Ubuntu 12.04 jest wyposażony w OpenSSL 1.0.1, który ma nieco inne ustawienia domyślne niż starsza wersja OpenSSL 0.9.8.
Między innymi, jeśli używasz openssl req -newkey rsa:2048
do generowania klucza RSA, otrzymasz klucz w formacie o nazwie PKCS # 8 . Klucze te, reprezentowane w formacie PEM, mają bardziej ogólny -----BEGIN PRIVATE KEY-----
nagłówek, który nie mówi, jaki to rodzaj klucza (RSA, DSA, EC).
Poprzednio w OpenSSL 0.9.8 klucze były zawsze w formacie o nazwie PKCS # 1 , który reprezentowany był jako PEM, miał nagłówek -----BEGIN RSA PRIVATE KEY-----
.
Z tego powodu nie można po prostu zmienić nagłówka i stopki z:
-----BEGIN PRIVATE KEY-----
do
-----BEGIN RSA PRIVATE KEY-----`
To nie to samo i nie zadziała. Zamiast tego musisz przekonwertować klucz na stary format za pomocą openssl rsa
. Lubię to:
openssl rsa -in key_in_pkcs1_or_pkcs8.pem -out key_in_pkcs1.pem
MySQL (wersja 5.5.35) w systemie Ubuntu 12.04 korzysta z implementacji protokołu SSL o nazwie yaSSL (wersja 2.2.2). Oczekuje, że klucze będą w formacie PKCS # 1 i nie obsługują formatu PKCS # 8 używanego przez OpenSSL 1.0 i nowsze. Jeśli po prostu zmienisz nagłówek i stopkę, jak sugerują inne posty w tym wątku, MySQL / yaSSL nie będzie narzekać, ale nie będziesz mógł się połączyć i zamiast tego skończy się taki błąd:
ERROR 2026 (HY000): SSL connection error: protocol version mismatch
Ubuntu 14.04 zawiera OpenSSL 1.0.1f i nowe ustawienia. Między innymi wygeneruje certyfikaty z skrótami SHA256 zamiast SHA1, który był używany we wcześniejszych wersjach. Nawiasem mówiąc, wersja yaSSL dołączona do MySQL również tego nie obsługuje.
Jeśli generujesz certyfikaty do użytku z MySQL, pamiętaj, aby upewnić się, że klucze RSA są konwertowane na tradycyjny format PEM PKCS # 1 i że certyfikaty używają skrótów SHA1.
Oto przykład, jak wygenerować własny urząd certyfikacji, certyfikat serwera i certyfikat klienta.
# 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