Configurei uma nova máquina com o 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 lança a seguinte exceção:
javax.net.ssl.SSLHandshakeException: No appropriate protocol (protocol is disabled or cipher suites are inappropriate)
Então eu desenterrei mySql workbench e tentei com isso. Isso resultou neste erro:
ssl_choose_client_version:unsupported protocol
Procurar por isso me ensinou que o Ubuntu 20 tinha o TLSv1.2 definido como a versão mínima do TLS e que esse erro ocorre se o seu servidor MySQL não o suporta (a partir daqui: https://askubuntu.com/questions/1193629/why -mysql-workbench-8-x-errors-out-with-an-ssl-connection-error-choose-client-v ). Eu tentei o workbench com o SSL desativado e, com certeza, ele poderia estabelecer a conexão.
O problema óbvio disso é que este é o Amazon RDS ... TLS 1.2 é a única versão que não pode ser desabilitada, pois é a versão usada internamente, conforme apontado aqui: https://docs.aws.amazon.com /AmazonRDS/latest/UserGuide/SQLServer.Ciphers.html
Então, realmente, não deve haver um 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 do TLS 1 e fazer o 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, Workbench agora conectado com SSL definido como obrigatório. Spring-Boot ainda não, acho que tenho que configurar isso em outro lugar para obter o memorando. Mas em vez de perder tempo com isso, prefiro resolver o problema real , que é que não consigo me conectar por meio do TLSv1.2, enquanto pelo que posso dizer, realmente deveria ser capaz. 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.
Acontece que o suporte a 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, quando o TLSv1.1 e 1.2 ficam disponíveis. Nossa versão era 1.22.alguma coisa, então tive que atualizar o motor.
Mesmo assim , não funcionará, porque o Ubuntu 20 também impõe um comprimento mínimo de chave dhe de 2048 bits, que o Aurora mysql 5.6 simplesmente não entrega 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 tamanho da chave Diffie-Hellman, mas acontece que eles são apenas para SqlServer, não MySQL. Portanto, você ainda precisa aplicar as alterações ao 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 openssl aceitará as chaves DHE mais curtas.
Mesmo assim, meus aplicativos de inicialização por mola não se conectavam, embora o workbench agora o fizesse. Isso ocorre porque o JDBC não diz ao servidor que ele pode fazer TLSv1.2 embora 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ê precisa anexá-lo à string de conexão:
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 maneira. Se alguém souber de um, por favor me avise.