Estou executando o Ubuntu Server 12.04 e quero habilitar conexões SSL com o MySQL.
Eu gerei os seguintes arquivos de chaves / certs com o OpenSSL:
- ca-cert.pem
- server-cert.pem
- server-key.pem
Guardei-as em /etc/mysql
e adicionei as seguintes linhas a /etc/mysql/my.cnf
:
ssl-ca=/etc/mysql/ca-cert.pem
ssl-cert=/etc/mysql/server-cert.pem
ssl-key=/etc/mysql/server-key.pem
Em seguida, reiniciei o servidor com sudo service restart mysql
.
No entanto, isso não parece ativar o SSL. Dentro de uma sessão mysql:
mysql> show variables like '%ssl%';
+---------------+----------------------------+
| Variable_name | Value |
+---------------+----------------------------+
| have_openssl | DISABLED |
| have_ssl | DISABLED |
| ssl_ca | /etc/mysql/ca-cert.pem |
| ssl_capath | |
| ssl_cert | /etc/mysql/server-cert.pem |
| ssl_cipher | |
| ssl_key | /etc/mysql/server-key.pem |
+---------------+----------------------------+
Alguma idéia do que estou perdendo? obrigado
Respostas:
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:
para
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: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:
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.
fonte
ERROR 2026 (HY000): SSL connection error: protocol version mismatch
erros (usando o OpenSSL 1.0.1f). Eu mudei para o OpenSSL 1.0.1e e funcionou com as instruções acima.Isso me ajudou:
O cabeçalho e o rodapé do arquivo server-key.pem eram assim:
Mas isso requer algo assim:
Observe a BEGIN RSA PRIVATE KEY
Para ver o log:
Espero que isto ajude.
fonte
openssl rsa
Eu tive os mesmos problemas no dia 12.04, mas foi de fato o que causou os problemas.
Encontrei uma solução nos Fóruns do Ubuntu , movendo os
.pem
arquivos para/etc/mysql
resolvê-lo.Você também pode alterar a configuração do apparmor em
/etc/apparmor.d/usr.sbin.mysqld
.fonte
Certifique-se de que o usuário que está executando o processo mysqld tenha acesso de leitura às chaves e arquivos de certificado. Se você iniciar o MySQL usando a conta "mysql", você:
Caso contrário, você poderá obter o seguinte em seu log de erros:
fonte
No Ubuntu 16.04, eu corri
mysql_ssl_rsa_setup
, podia ver os arquivos no show variáveis como na pergunta, mashave_ssl
ehave_openssl
continuou a serDISABLED
.A solução foi
chown mysql.mysql /var/lib/mysql/*.pem
. Como alternativa, suponho que se você executar o mysql_ssl_rsa_setup como usuário do mysql, ele criará os arquivos com as permissões corretas.fonte
O arquivo de chave privada deve se parecer (formato PKCS # 1):
Se sua chave privada começar com:
(Formato PKCS # 8), você deve convertê-lo assim:
Não adicione manualmente a
RSA
tag "ausente" " " manualmente, porque o formato é diferente.fonte
As opções de inicialização do SSL devem estar próximas à parte superior do arquivo my.cnf ou podem ser ignoradas. Eu tive problemas ao executar o mysql 5.6 no RHEL 6.4, onde as variáveis SSL estavam sendo ignoradas, eu as tive no final do arquivo my.cnf. Mudei-os para o topo do arquivo (logo abaixo de [mysqld]), reiniciei o servidor e estava tudo bem.
fonte