O Ubuntu 12.04 vem com um OpenSSL 1.0.1, que tem padrões um pouco diferentes da versão mais antiga do OpenSSL 0.9.8.
Entre outras coisas, se você estiver usando openssl req -newkey rsa:2048
para gerar uma chave RSA, você terminará com uma chave em um formato chamado PKCS # 8 . Representadas no formato PEM, essas chaves têm o cabeçalho mais genérico -----BEGIN PRIVATE KEY-----
, que não informa a chave (RSA, DSA, EC) do tipo.
Anteriormente, com o OpenSSL 0.9.8, as chaves estavam sempre em um formato chamado PKCS # 1 , que representava como PEM , tinha o cabeçalho -----BEGIN RSA PRIVATE KEY-----
.
Por causa disso, você não pode simplesmente alterar o cabeçalho e o rodapé de:
-----BEGIN PRIVATE KEY-----
para
-----BEGIN RSA PRIVATE KEY-----'
Não é a mesma coisa e não vai funcionar. Em vez disso, você precisa converter a chave no formato antigo usando openssl rsa
. Assim:
openssl rsa -in key_in_pkcs1_or_pkcs8.pem -out key_in_pkcs1.pem
O MySQL (v5.5.35) no Ubuntu 12.04 está usando uma implementação SSL chamada yaSSL (v2.2.2). Espera-se que as chaves estejam no formato PKCS # 1 e não suportem o formato PKCS # 8 usado pelo OpenSSL 1.0 e mais recente. Se você simplesmente alterar o cabeçalho e o rodapé, como sugerido por outras postagens neste tópico, o MySQL / yaSSL não irá reclamar, mas você não conseguirá se conectar e acabar com um erro como este:
ERROR 2026 (HY000): SSL connection error: protocol version mismatch
O Ubuntu 14.04 vem com o OpenSSL 1.0.1f e novas configurações. Entre outras coisas, ele irá gerar certificados com compilações SHA256 em vez de SHA1, que foi usado em versões anteriores. Incidentalmente, a versão do yaSSL junto com o MySQL também não suporta isso.
Se você está gerando certificados para uso com o MySQL, lembre-se de certificar-se de que as chaves RSA são convertidas para o formato PEM PKCS # 1 tradicional e que os certificados estão usando resumos SHA1.
Veja um exemplo de como gerar sua própria autoridade de certificação, um certificado de servidor e um 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