MySQL configurado para SSL, mas o SSL ainda está DESATIVADO ..!

9

Eu configurei o SSL para MySQL usando o seguinte script.

#!/bin/bash
#
mkdir -p /root/abc/ssl_certs
cd /root/abc/ssl_certs
#
echo "--> 1. Create CA cert, private key"
openssl genrsa 2048 > ca-key.pem

echo "--> 2. Create CA cert, certificate"
openssl req -new -x509 -nodes -days 1000 -key ca-key.pem > ca-cert.pem

echo "--> 3. Create Server certificate, key"
openssl req -newkey rsa:2048 -days 1000 -nodes -keyout server-key.pem > server-req.pem

echo "--> 4. Create Server certificate, cert"
openssl x509 -req -in server-req.pem -days 1000 -CA ca-cert.pem -CAkey ca-key.pem -set_serial 01 > server-cert.pem
echo ""
echo 
echo ""

echo "--> 5. Create client certificate, key. Use DIFFERENT common name then server!!!!"
echo ""
openssl req -newkey rsa:2048 -days 1000 -nodes -keyout client-key.pem > client-req.pem
echo "6. Create client certificate, cert"
openssl x509 -req -in client-req.pem -days 1000 -CA ca-cert.pem -CAkey ca-key.pem -set_serial 01 > client-cert.pem
exit 0

Os seguintes arquivos foram criados:

ca-key.pem             ca-cert.pem
server-req.pem         server-key.pem       server-cert.pem
client-req.pem         client-key.pem       client-cert.pem

Em seguida, combinei server-cert.pem e client-cert.pem em ca.pem (li em uma postagem para fazer isso ..)

Eu criei um usuário ssl no MySQL:

GRANT ALL ON  *.* to sslsuer@hostname IDENTIFIED BY 'pwd' REQUIRE SSL;

Em seguida, adicionei o seguinte em my.cnf

[mysqld]
ssl-ca          = /root/abc/ssl_certs/ca.pem
ssl-cert        = /root/abc/ssl_certs/server-cert.pem
ssl-key         = /root/abc/ssl_certs/server-key.pem

Após reiniciar o servidor, conectei-me ao mysql, mas o SSL ainda não estava em uso :(

mysql -u ssluser -p

SSL:                    Not in use

Até o parâmetro have_ssl ainda estava mostrando desativado .. :(

mysql> show variables like '%ssl%';
+---------------+---------------------------------------------+
| Variable_name | Value                                       |
+---------------+---------------------------------------------+
| have_openssl  | DISABLED                                    |
| have_ssl      | DISABLED                                    |
| ssl_ca        | /root/abc/ssl_certs/ca.pem          |
| ssl_capath    |                                             |
| ssl_cert      | /root/abc/ssl_certs/server-cert.pem |
| ssl_cipher    |                                             |
| ssl_key       | /root/abc/ssl_certs/server-key.pem  |
+---------------+---------------------------------------------+

Perdi algum passo, ou o que está errado ..

As respostas com etapas perdidas em detalhes serão muito apreciadas.

Raios solares
fonte
Qual versão do OpenSSL você está usando? E habilite o log de erro + aviso no MySQL. Se você vir a mensagem de erro "não é possível ler a chave privada", provavelmente é atingido por esse bug de alguma forma. A criação de novas chaves + certs em um sistema mais antigo, usando-as em um MySQL recente, resolveu o problema para mim.
gertvdijk
@gertvdijk Eu usei o openssl-1.0.1c. Estou verificando os logs quanto ao erro mencionado.
23912 Sunrays
Em primeiro lugar. Verifique se o mysql suporta ssl. mysql --ssl --helpTambém não se esqueça de reiniciar mysql depois de fazer essas modificações para my.cnf
Valentin Bajrami
1
@ val0x00ff yes O MySQL suporta ssl se o valor have_ssl estiver desativado.
23412 Sunrays
tente mysql --ssl -u ssluser -pforçar o SSL no cliente. Depois que funciona, pode-se identificar por que o REQUIRE SSL não funciona.
Johannes

Respostas:

6

Veja a solução aqui: /ubuntu/194074/enabling-ssl-in-mysql

Você precisa converter certificados para o formato antigo:

openssl rsa -in client-key.pem -out client-key.pem
openssl rsa -in server-key.pem -out server-key.pem
Pavel Bernshtam
fonte
3

Tente verificar isso:

  • Habilite o log de saída de aviso do MySQL e leia essas entradas de log reais.
  • Verifique as permissões do sistema de arquivos para permitir ao usuário como o MySQL executa ( mysql?) Ler os arquivos. Em /rooteu não acho que tem por padrão.
  • O Apparmor ou o SELinux estão impedindo o MySQL de ler os certificados e as chaves?
  • Você pode ser atingido por um bug desagradável de uma recente incompatibilidade OpenSSL vs. MySQL. Não consegui gerar chaves no Ubuntu 12.04 que o MySQL pudesse ler, enquanto as que gero no Debian Squeeze funcionam bem.
gertvdijk
fonte
2

No Ubuntu, você pode verificar se apparmorbloqueia o acesso aos seus arquivos cert, consulte o manual .

Em seguida, verifique as permissões / propriedade do arquivo e adicione os direitos necessários /etc/apparmor.d/usr.sbin.mysqld. Veja este tópico .

Franc Drobnič
fonte
2

Eu tive esse problema e ajudou a alterar a propriedade dos arquivos .pem:

chown mysql.mysql /var/lib/mysql/*.pem  (or in your case /root/abc/ssl_certs/*.pem)

(De Craig Wright - /ubuntu/194074/enabling-ssl-in-mysql )

btb
fonte
Isso resolveu o problema para mim.
Anteatera
0

Adicione o "ssl" na [mysqld]seção no my.cnfarquivo como

ssl
ssl-ca          = /root/abc/ssl_certs/ca.pem
ssl-cert        = /root/abc/ssl_certs/server-cert.pem
ssl-key         = /root/abc/ssl_certs/server-key.pem

e então reinicie o mysql e verifique novamente. Vai funcionar.

Pratik
fonte
0

Acredito que esse problema se deve ao fato de você não ter especificado os caminhos de arquivo para o seu certificado CA, chave do servidor e certificado do servidor corretamente. Ele deve estar no seguinte formato ...

ssl-ca=path/to/repo/mysql-directory/path/to/pem/cacert.pem
ssl-cert=path/to/repo/mysql-directory/path/to/pem/server-cert.pem
ssl-key=path/to/repo/mysql-directory/path/to/pem/server-key.pem

ou seja, você precisa do CAMINHO DE ARQUIVO COMPLETO dos certificados e chaves na pasta de instalação do mysql, não um caminho '/ root /' relativo.

Aqui está um exemplo da minha instalação:

mysql> show variables like '%ssl%';
+---------------+----------------------------------------------------------+
| Variable_name | Value                                                    |
+---------------+----------------------------------------------------------+
| have_openssl  | YES                                                      |
| have_ssl      | YES                                                      |
| ssl_ca        | C:/wamp64/bin/mysql/mysql5.7.14/etc/certs/ca.pem         |
| ssl_capath    |                                                          |
| ssl_cert      | C:/wamp64/bin/mysql/mysql5.7.14/etc/certs/server-cert.pem|
| ssl_cipher    |                                                          |
| ssl_key       | C:/wamp64/bin/mysql/mysql5.7.14/etc/certs/server-key.pem |
+---------------+----------------------------------------------------------+

Consulte o link a seguir para obter informações adicionais. https://dev.mysql.com/doc/connector-net/en/connector-net-tutorials-ssl.html

Josh
fonte
Seus caminhos começam com a /, o que significa que são caminhos completos, não caminhos relativos. /root/é a pasta inicial do usuário root em um sistema unix.
bobpaul