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.


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:



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.

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 .



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.


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


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
Ao utilizar nosso site, você reconhece que leu e compreendeu nossa Política de Cookies e nossa Política de Privacidade.
Licensed under cc by-sa 3.0 with attribution required.