Ubuntu 12.04 viene con OpenSSL 1.0.1, que tiene valores predeterminados algo diferentes que la versión anterior de OpenSSL 0.9.8.
Entre otras cosas, si está utilizando openssl req -newkey rsa:2048
para generar una clave RSA, terminará con una clave en un formato llamado PKCS # 8 . Representadas en el formato PEM, estas claves tienen el -----BEGIN PRIVATE KEY-----
encabezado más genérico , que no le dice qué tipo de clave (RSA, DSA, EC) es.
Anteriormente, con OpenSSL 0.9.8, las claves siempre estaban en un formato llamado PKCS # 1 , que representaba como PEM, tenía el encabezado -----BEGIN RSA PRIVATE KEY-----
.
Debido a esto, no puede simplemente cambiar el encabezado y pie de página de:
-----BEGIN PRIVATE KEY-----
a
-----BEGIN RSA PRIVATE KEY-----`
No es lo mismo y no funcionará. En su lugar, debe convertir la clave al formato anterior usando openssl rsa
. Me gusta esto:
openssl rsa -in key_in_pkcs1_or_pkcs8.pem -out key_in_pkcs1.pem
MySQL (v5.5.35) en Ubuntu 12.04 está utilizando una implementación SSL llamada yaSSL (v2.2.2). Espera que las claves estén en el formato PKCS # 1 y no es compatible con el formato PKCS # 8 utilizado por OpenSSL 1.0 y posteriores. Si simplemente cambia el encabezado y el pie de página, como lo sugieren otras publicaciones en este hilo, MySQL / yaSSL no se quejará, pero no podrá conectarse y, en su lugar, terminará con un error como este:
ERROR 2026 (HY000): SSL connection error: protocol version mismatch
Ubuntu 14.04 viene con OpenSSL 1.0.1f y nuevas configuraciones. Entre otras cosas, generará certificados con resúmenes SHA256 en lugar de SHA1, que se utilizó en versiones anteriores. Incidentalmente, la versión yaSSL incluida con MySQL tampoco es compatible con esto.
Si está generando certificados para usar con MySQL, recuerde asegurarse de que las claves RSA estén convertidas al formato tradicional PKCS # 1 PEM y que los certificados estén utilizando resúmenes SHA1.
Aquí hay un ejemplo de cómo generar su propia CA, un certificado de servidor y un certificado de cliente.
# 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