Ativando o SSL no MySQL

23

Estou executando o Ubuntu Server 12.04 e quero ativar conexões SSL com o MySQL.

Gerei os seguintes arquivos de chaves / certs com o OpenSSL:

  • ca-cert.pem
  • server-cert.pem
  • server-key.pem

Eu armazenei estes em /etc/mysql , depois adicionei as seguintes linhas em /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 do 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

    
por visitor93746 28.09.2012 / 16:38

7 respostas

33

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
    
por user262116 26.03.2014 / 04:26
4

Isso me ajudou:

O cabeçalho e rodapé do arquivo server-key.pem ficou assim:

-----BEGIN PRIVATE KEY-----
...
...
-----END PRIVATE KEY-----

Mas isso exige algo assim:

-----BEGIN RSA PRIVATE KEY-----
...
...
-----END RSA PRIVATE KEY-----

Anote a chave privada BEGIN RSA

Para ver o log:

sudo vim /var/log/mysql/error.log

Espero que isso ajude.

    
por user194410 20.09.2013 / 00:22
2

Eu tive os mesmos problemas em 12.04 mas foi de fato o aparente que causou os problemas.

Eu encontrei uma solução nos fóruns do Ubuntu , movendo .pem arquivos em /etc/mysql resolvidos.

Você também pode alterar a configuração do apparmor em /etc/apparmor.d/usr.sbin.mysqld .

    
por user273610 24.04.2014 / 14:49
1

Certifique-se de que o usuário executando o processo mysqld tenha acesso de leitura às chaves e arquivos de certificado. Se você iniciar o MySQL usando a conta "mysql", você deve:

/etc/mysql$ chown mysql:mysql *.pem
/etc/mysql$ ls -l *.pem
-rwxrwx--- 1 mysql mysql 1631 2013-09-16 14:27 ca-cert.pem
-rwxrwx--- 1 mysql mysql 1281 2013-09-16 14:27 server-cert.pem
-rwxrwx--- 1 mysql mysql 1679 2013-09-16 14:27 server-key.pem

Caso contrário, você pode obter o seguinte no seu log de erros:

SSL error: Unable to get certificate from '/etc/mysql/server-cert.pem'
130916 13:32:25 [Warning] Failed to setup SSL
130916 13:32:25 [Warning] SSL error: Unable to get certificate
    
por Isabi 17.09.2013 / 21:56
0

O arquivo da chave privada deve ser semelhante ao formato (PKCS # 1):

-----BEGIN RSA PRIVATE KEY-----
. . .
-----END RSA PRIVATE KEY-----

Se a sua chave privada começar com:

-----BEGIN PRIVATE KEY-----

(formato PKCS # 8), então você deve convertê-lo assim:

openssl rsa -in server-key.pem -out server-key.pem

Não adicione manualmente a tag " RSA " "ausente" manualmente porque o formato é diferente.

    
por rustyx 07.08.2016 / 10:12
0

No Ubuntu 16.04, executei mysql_ssl_rsa_setup , pude ver os arquivos nas variáveis de exibição como na pergunta, mas have_ssl e have_openssl continuaram a ser DISABLED .

A solução foi para chown mysql.mysql /var/lib/mysql/*.pem . Como alternativa, suponho que se você executar mysql_ssl_rsa_setup como o usuário mysql, ele criará os arquivos com as permissões corretas.

    
por Craig Wright 13.12.2016 / 01:04
-1

As opções de inicialização do SSL devem estar perto do topo do seu arquivo my.cnf ou podem ser ignoradas. Eu tive problemas executando o mysql 5.6 no RHEL 6.4 onde as variáveis SSL estavam sendo ignoradas, eu as tinha no final do arquivo my.cnf. Eu os movi no topo do arquivo (logo abaixo do [mysqld]), então eu reiniciei o servidor e tudo estava bem.

    
por Christine 24.09.2014 / 20:04