Após criar um certificado SSL autoassinado, configurei meu servidor MySQL remoto para usá-los (e o SSL está ativado)
Eu ssh no meu servidor remoto e tente conectar-se ao seu próprio mysqld usando SSL (o servidor MySQL é 5.5.25).
mysql -u <user> -p --ssl=1 --ssl-cert=client.cert --ssl-key=client.key --ssl-ca=ca.cert
Enter password:
ERROR 2026 (HY000): SSL connection error: error:00000001:lib(0):func(0):reason(1)
Ok, lembro de ter lido algum problema com a conexão ao mesmo servidor via SSL. Então, baixo as chaves do cliente para a minha caixa local e testei a partir daí ...
mysql -h <server> -u <user> -p --ssl=1 --ssl-cert=client.cert --ssl-key=client.key --ssl-ca=ca.cert
Enter password:
ERROR 2026 (HY000): SSL connection error
Não está claro a que esse erro de "erro de conexão SSL" se refere, mas se eu omitir o -ssl-ca
, posso conectar-me usando SSL.
mysql -h <server> -u <user> -p --ssl=1 --ssl-cert=client.cert --ssl-key=client.key
Enter password:
Welcome to the MySQL monitor. Commands end with ; or \g.
Your MySQL connection id is 37
Server version: 5.5.25 MySQL Community Server (GPL)
No entanto, acredito que isso apenas criptografa a conexão e não verifica a validade do certificado (o que significa que eu estaria potencialmente vulnerável a ataques intermediários)
Os certificados SSL são válidos (embora autoassinados) e não possuem uma senha. Então, minha pergunta é: o que estou fazendo de errado? Como conectar-me via SSL, usando um certificado autoassinado?
A versão do MySQL Server é 5.5.25 e o servidor e os clientes são o CentOS 5.
Obrigado por qualquer conselho
Editar : observe que, em todos os casos, o comando está sendo emitido do mesmo diretório em que as chaves ssl residem (portanto, nenhum caminho absoluto)
Editar (em resposta ao mgorven):
ca.cert
é o certificado da Autoridade de Certificação, que deve informar ao mysql que minha autoridade de certificação é confiável.
A configuração de my.cnf
é
[mysqld]
ssl-ca=/etc/ssl/mysql/ca.cert
ssl-cert=/etc/ssl/mysql/server.cert
ssl-key=/etc/ssl/mysql/server.key
Também tentei adicionar, ssl-cipher=DHE-RSA-AES256-SHA
mas o removi, pois não ajudou.
ca.cert
? É o certificado autoassinado do servidor? Você está usando certificados de cliente para autenticação? Forneça a configuração relacionada ao SSL no servidor.Respostas:
Sim, você está certo de que, se você não especificar
--ssl-ca
, o cliente não verificará o certificado do servidor. Como funciona sem essa opção, o motivo mais provável da falha é que o cliente não confia no certificado do servidor.Se você estiver usando certificados de cliente e servidor autoassinados, o
ca.cert
arquivo deverá incluir esses dois arquivos. Dessa forma, o cliente confiará no certificado do servidor e o servidor confiará no certificado do cliente.Por exemplo:
Gere a chave e o certificado do servidor:
Gere a chave e o certificado do cliente:
Combine os certificados de cliente e servidor no arquivo de certificados da CA:
fonte
Para usar o SSL unidirecional, você deve tentar com:
O cliente
--ssl-cert
e--ssl-key
no mysql são usados para SSL bidirecional. Isso significa autenticação baseada em certificado. O assunto do certificado do cliente deve ser o nome de usuário.fonte
--ssl-verify-server-cert
o CN do certificado do servidor, deve ser o mesmo que o host especificado para a opção de linha de comando -h.Por acaso, você não digitou o mesmo nome comum para certificados de servidor e cliente? Se sim, substitua um deles para que Nomes comuns sejam diferentes.
fonte