No se puede conectar a Amazon RDS con TLSv1.2

No se puede conectar a Amazon RDS con TLSv1.2

Configuré una nueva máquina con Ubuntu 20 y descubrí que ya no podía conectarme a mis bases de datos RDS.

La aplicación Spring-boot que se suponía debía conectarse al entorno de desarrollo genera la siguiente excepción:
javax.net.ssl.SSLHandshakeException: No appropriate protocol (protocol is disabled or cipher suites are inappropriate)

Así que saqué el banco de trabajo mySql y probé con eso. Eso resultó en este error:
ssl_choose_client_version:unsupported protocol

Buscar eso me enseñó que Ubuntu 20 tenía TLSv1.2 configurado como la versión mínima de TLS, y que este error ocurre si su servidor MySQL no lo admite (desde aquí:https://askubuntu.com/questions/1193629/why-mysql-workbench-8-x-errors-out-with-an-ssl-connection-error-choose-client-v). Probé Workbench con SSL desactivado y, efectivamente, pude establecer la conexión.

El problema obvio con esto es que es Amazon RDS... TLS 1.2 es la única versión queno poderestar deshabilitado, ya que es la versión que se usa internamente, como se señala aquí:https://docs.aws.amazon.com/AmazonRDS/latest/UserGuide/SQLServer.Ciphers.html

Así que realmente no debería haber ningún problema. Estaba empezando a dudar si la versión TLS era realmente el problema. Pero como no tenía otras pistas, seguí el libro de recetas de la respuesta aquí para reconfigurar mi openssl local para permitir la versión 1 mínima de TLS y reducir el nivel de seguridad:https://askubuntu.com/questions/1233186/ubuntu-20-04-how-to-set-lower-ssl-security-level

Y si no lo sabías, Workbench ahora está conectado con SSL configurado como requerido. Spring-Boot todavía no lo hace, supongo que tengo que configurarlo en otro lugar para que reciba la nota. Pero en lugar de perder el tiempo en eso, prefiero resolver elrealEl problema, que es que no puedo conectarme a través de TLSv1.2, aunque por lo que puedo decir, realmente debería poder hacerlo. Eso sería mucho preferible a degradar mi seguridad. Intenté renovar el certificado de la base de datos en caso de que ese fuera el problema, pero la consola de administración no encontró nada malo con el certificado y aparentemente no me permite reemplazarlo si no es necesario. Así que ya no tengo ideas sobre qué probar a continuación.

Respuesta1

Resulta que la compatibilidad con TLS depende de la versión exacta del motor de base de datos que esté utilizando en RDS. Aurora mySQL 5.6 solo es compatible con TLSv1.0 hasta la versión 1.23.1, momento en el que TLSv1.1 y 1.2 estarán disponibles. Nuestra versión era 1.22 y algo así, así que tuve que actualizar el motor.

Incluso entoncesSin embargo, no funcionará, porque Ubuntu 20 también exige una longitud mínima de clave de 2048 bits, que Aurora mysql 5.6 simplemente no ofrece y, por lo que puedo decir, esto no se puede cambiar. Encontrará documentación sobre los parámetros de la base de datos que se pueden usar para cambiar la longitud de la clave Diffie-Hellman, pero resulta que son solo para SqlServer, no para MySQL. Por lo tanto, aún debe aplicar cambios en su openssl.cnf como se describe en la respuesta aceptada aquí:https://askubuntu.com/questions/1233186/ubuntu-20-04-how-to-set-lower-ssl-security-level Esto cambia su SECLEVEL a 1, por lo que openssl aceptará las claves DHE más cortas.

Incluso entoncesMis aplicaciones Spring-boot no se conectaban, aunque ahora Workbench sí lo hacía. Esto se debe a que JDBC no le dice al servidor que puede ejecutar TLSv1.2.aunque totalmente puede(Es una decisión extraña), por lo que el servidor nunca intentará enviar un protocolo de enlace 1.2, incluso si pudiera.

Para indicarle a JDBC que use TLSv1.2, debe agregarlo a la cadena de conexión:

jdbc:myslq://<host>/<db>?enabledTLSProtocols=TLSv1.2

Ahora todo se conecta.

Me hubiera encantado hacer que Aurora entregara una clave más larga en lugar de reducir la seguridad de Ubuntu, pero parece que no hay manera. Si alguien sabe de alguno, por favor hágamelo saber.

información relacionada