O Ubuntu 12.04 vem com um OpenSSL 1.0.1, que possui padrões um pouco diferentes dos 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, terá uma chave em um formato chamado PKCS # 8 . Representadas no formato PEM, essas chaves têm o -----BEGIN PRIVATE KEY-----
cabeçalho mais genérico , que não informa qual é o tipo de chave (RSA, DSA, EC).
Anteriormente, com o OpenSSL 0.9.8, as chaves estavam sempre em um formato chamado PKCS # 1 , representado como PEM, tinha o cabeçalho -----BEGIN RSA PRIVATE KEY-----
.
Por isso, você não pode simplesmente mudar o cabeçalho e 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 para o formato antigo usando openssl rsa
. Como isso:
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). Ele espera que as chaves estejam no formato PKCS # 1 e não suporte o formato PKCS # 8 usado pelo OpenSSL 1.0 e mais recente. Se você simplesmente alterar o cabeçalho e o rodapé, conforme sugerido por outras postagens neste segmento, o MySQL / yaSSL não reclamará, mas você não poderá se conectar e, em vez disso, terá 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 resumos SHA256 em vez de SHA1, que foi usado em versões anteriores. Incidencialmente, a versão yaSSL incluída no MySQL também não suporta isso.
Se você estiver gerando certificados para uso com o MySQL, lembre-se de garantir que as chaves RSA sejam convertidas no formato PKCS # 1 PEM tradicional e que os certificados estejam usando resumos SHA1.
Aqui está um exemplo de como gerar sua própria CA, 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