Configurei uma nova máquina com Ubuntu 20 e descobri que não conseguia mais me conectar aos meus bancos de dados RDS.
O aplicativo spring-boot que deveria se conectar ao ambiente de desenvolvimento gera a seguinte exceção:
javax.net.ssl.SSLHandshakeException: No appropriate protocol (protocol is disabled or cipher suites are inappropriate)
Então eu desenterrei o ambiente de trabalho mySql e tentei com isso. Isso resultou neste erro:
ssl_choose_client_version:unsupported protocol
Procurando isso me ensinou que o Ubuntu 20 tinha o TLSv1.2 definido como a versão mínima do TLS, e que esse erro acontece se o seu servidor MySQL não o suportar (daqui:https://askubuntu.com/questions/1193629/why-mysql-workbench-8-x-errors-out-with-an-ssl-connection-error-choose-client-v). Tentei o ambiente de trabalho com SSL desativado e com certeza ele conseguiu estabelecer a conexão.
O problema óbvio é que este é o Amazon RDS... TLS 1.2 é a única versão quenão podeestar desabilitado, pois é a versão utilizada internamente, conforme apontado aqui:https://docs.aws.amazon.com/AmazonRDS/latest/UserGuide/SQLServer.Ciphers.html
Então, realmente, não deveria haver problema. Eu estava começando a duvidar se a versão TLS era realmente o problema. Mas como eu não tinha outras pistas, segui o livro de receitas na resposta aqui para reconfigurar meu openssl local para permitir a versão mínima 1 do TLS e fazer downgrade do nível de segurança:https://askubuntu.com/questions/1233186/ubuntu-20-04-how-to-set-lower-ssl-security-level
E você não sabe, o Workbench agora conectado com SSL definido como obrigatório. O Spring-Boot ainda não funciona, acho que tenho que configurá-lo em outro lugar para receber o memorando. Mas em vez de perder tempo com isso, prefiro resolver orealproblema, que é que não consigo me conectar por meio do TLSv1.2, embora, pelo que posso dizer, realmente deveria conseguir. Isso seria muito preferível a rebaixar minha segurança. Tentei renovar o certificado do banco de dados caso esse possa ser o problema, mas o console de gerenciamento não encontrou nada de errado com o certificado e aparentemente não me permite substituí-lo se não for necessário. Então, estou um pouco sem ideias sobre o que tentar a seguir.
Responder1
Acontece que o suporte TLS depende da versão exata do mecanismo de banco de dados que você está usando no RDS. O Aurora mySQL 5.6 tem suporte apenas para TLSv1.0 até a versão 1.23.1, momento em que TLSv1.1 e 1.2 ficam disponíveis. Nossa versão era 1.22.alguma coisa, então tive que atualizar o mecanismo.
Mesmo assimporém, não funcionará, porque o Ubuntu 20 também impõe um comprimento mínimo de chave dhe de 2.048 bits, que o Aurora mysql 5.6 simplesmente não oferece, e pelo que posso dizer, isso não pode ser alterado. Você encontrará documentação para parâmetros de banco de dados que podem ser usados para alterar o comprimento da chave Diffie-Hellman, mas acontece que eles são apenas para SqlServer, não para MySQL. Portanto, você ainda precisa aplicar as alterações em seu openssl.cnf conforme descrito na resposta aceita aqui:https://askubuntu.com/questions/1233186/ubuntu-20-04-how-to-set-lower-ssl-security-level Isso altera seu SECLEVEL para 1, então o openssl aceitará as chaves DHE mais curtas.
Mesmo assimmeus aplicativos de inicialização por mola não se conectavam, embora o workbench agora o fizesse. Isso ocorre porque o JDBC não informa ao servidor que ele pode executar o TLSv1.2embora possa totalmente(decisão estranha, essa), então o servidor nunca tentará enviar um handshake 1.2, mesmo que pudesse.
Para dizer ao JDBC para realmente usar o TLSv1.2, você deve anexá-lo à string de conexão:
jdbc:myslq://<host>/<db>?enabledTLSProtocols=TLSv1.2
Agora tudo se conecta.
Eu adoraria fazer o aurora entregar uma chave mais longa em vez de diminuir a segurança do Ubuntu, mas parece não haver jeito. Se alguém souber de algum, por favor me avise.