Ubuntu 12.04 viene fornito con OpenSSL 1.0.1, che presenta impostazioni predefinite leggermente diverse rispetto alla precedente versione OpenSSL 0.9.8.
Tra le altre cose, se stai usando openssl req -newkey rsa:2048
per generare una chiave RSA, finirai con una chiave in un formato chiamato PKCS # 8 . Rappresentate nel formato PEM, queste chiavi hanno l' -----BEGIN PRIVATE KEY-----
intestazione più generica , che non ti dice che tipo di chiave (RSA, DSA, EC) è.
In precedenza, con OpenSSL 0.9.8, le chiavi erano sempre in un formato chiamato PKCS # 1 , che rappresentava PEM, aveva l'intestazione -----BEGIN RSA PRIVATE KEY-----
.
Per questo motivo non puoi semplicemente modificare l'intestazione e il piè di pagina da:
-----BEGIN PRIVATE KEY-----
a
-----BEGIN RSA PRIVATE KEY-----`
Non è la stessa cosa e non funzionerà. Invece è necessario convertire la chiave nel vecchio formato utilizzando openssl rsa
. Come questo:
openssl rsa -in key_in_pkcs1_or_pkcs8.pem -out key_in_pkcs1.pem
MySQL (v5.5.35) su Ubuntu 12.04 utilizza un'implementazione SSL denominata yaSSL (v2.2.2). Prevede che le chiavi siano nel formato PKCS # 1 e non supportano il formato PKCS # 8 utilizzato da OpenSSL 1.0 e versioni successive. Se cambi semplicemente intestazione e piè di pagina, come suggerito da altri post in questo thread, MySQL / yaSSL non si lamenterà, ma non sarai in grado di connetterti e finirai con un errore come questo:
ERROR 2026 (HY000): SSL connection error: protocol version mismatch
Ubuntu 14.04 viene fornito con OpenSSL 1.0.1f e nuove impostazioni. Tra le altre cose, genererà certificati con digest SHA256 anziché SHA1, utilizzato nelle versioni precedenti. Per inciso, la versione yaSSL in bundle con MySQL non supporta neanche questo.
Se stai generando certificati da utilizzare con MySQL, ricorda di assicurarti che le chiavi RSA siano convertite nel tradizionale formato PEM PKCS # 1 e che i certificati utilizzino digest SHA1.
Ecco un esempio di come generare la propria CA, un certificato server e un certificato client.
# 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