Estou procurando uma possibilidade no cliente mysql para testar apenas se a --ssl-mode=REQUIRED
diretiva para um determinado --host
é 100% garantida, sem potencialmente estragar o nome de usuário, a senha e o nome do banco de dados em texto simples pela Internet. Executando esse modo com um argumento como: --ssl--check-handshake-only-then-disconnect-and-report
.
Isso é para um cenário em que, em relação ao host da web:
- não há documentação adequada/disponível/confiável sobre a disponibilidade de SSL no servidor,
- e/ou nenhum ou apenas acesso complicado ao servidor mysql e suas informações de configuração.
Depois de minha pesquisa até agora, acho que não há possibilidade de executar um teste de handshake SSL/TLS 100% sem risco, o que obviamente é sem risco, pois funciona sem fornecer nome de usuário, senha, nome do banco de dados .
A documentação para --ssl-mode=REQUIRED aborda isso de forma simples e resumida:
NECESSÁRIO: Estabeleça uma conexão criptografada se o servidor suportar conexões criptografadas. A tentativa de conexão falhará se uma conexão criptografada não puder ser estabelecida.
Basta confiar no cliente mysql (também conhecido como "shell") que ele realmente opera nessa ordem:
- certifique-se de que
--ssl-mode=REQUIRED
funciona na situação especificada, caso contrário, saia prematuramente com uma mensagem de erro explícita. - somente quando o handshake e a negociação de criptografia funcionarem bem, o cliente enviará o nome de usuário, a senha e o nome do banco de dados fornecidos.
- E que nenhum novo desenvolvedor jamais introduzirá um bug exatamente nessa verificação de condição ...
Isso pode ser suficiente para usuários versados/diários, que conhecem e confiam em seu cliente mysql e configuração.
Mas abaixo do ideal para novos usuários ou céticos que precisam ser céticos, que realmente precisam de uma possibilidade de uma verificação 100% sem risco.
Um verdadeiro "modo de teste de conexão/aperto de mão sem risco", que obviamente é sem risco porque também funciona sem apresentar nenhuma credencial concreta, seria muito reconfortante.
- Antes de me registrar em https://bugs.mysql.com e enviar uma solicitação de recurso lá
- Pergunto aqui se pode haver uma possibilidade que desconheço.
Se você deseja apenas testar se o cliente gera um erro quando o SSL não pode ser estabelecido, uma maneira rápida e suja é combinar estes dois:
--ssl-cipher SEED-SHA
Você sempre deve ver o erro de "falha de SSL" e não de "senha incorreta". Tente
--ssl-mode=REQUIRED
ligar e desligar para verificar se ele gera um erro ou retorna ao texto não criptografado.Se você quiser verificar se o servidor oferece suporte a SSL (e em que grau), algo como nmap será melhor. Certifique-se de ter uma versão atualizada do nmap e, em seguida, use algo como isto para verificar o status do SSL, por exemplo:
E, se nada mais, você sempre pode verificar se as conexões não enviam credenciais antes do SSL com uma captura de pacote / wireshark, embora tenha uma curva de aprendizado.
Como você mencionou, isso é simples se você puder trabalhar com quem controla o servidor, com opções como:
mas nem sempre é possível
Resultados de
nmap
- Parece a ferramenta adequada para o trabalho!Resultados de
mysql
combinado com--ssl-cipher
e--ssl-mode