Ubuntu 20을 사용하여 새 시스템을 설정했는데 더 이상 RDS 데이터베이스에 연결할 수 없다는 것을 알았습니다.
개발 환경에 연결해야 하는 spring-boot 애플리케이션에서 다음 예외가 발생합니다.
javax.net.ssl.SSLHandshakeException: No appropriate protocol (protocol is disabled or cipher suites are inappropriate)
그래서 mySql Workbench를 찾아서 시도해 보았습니다. 이로 인해 다음 오류가 발생했습니다.
ssl_choose_client_version:unsupported protocol
이를 찾아보니 Ubuntu 20에는 TLSv1.2가 최소 TLS 버전으로 설정되어 있고 MySQL 서버가 이를 지원하지 않으면 이 오류가 발생한다는 사실을 알게 되었습니다(여기에서:https://askubuntu.com/questions/1193629/why-mysql-workbench-8-x-errors-out-with-an-ssl-connection-error-choose-client-v). SSL을 끈 상태에서 워크벤치를 시도했는데 확실히 연결이 설정될 수 있었습니다.
이것의 명백한 문제는 Amazon RDS입니다. TLS 1.2는 TLS 1.2가캔트여기서 지적한 대로 내부적으로 사용되는 버전이므로 비활성화하세요.https://docs.aws.amazon.com/AmazonRDS/latest/UserGuide/SQLServer.Ciphers.html
그러니 실제로는 문제가 없어야 합니다. TLS 버전이 정말 문제인지 의심이 들기 시작했습니다. 그러나 다른 리드가 없었기 때문에 여기에 있는 답변의 요리책에 따라 최소 TLS 버전 1을 허용하고 보안 수준을 다운그레이드하도록 로컬 openssl을 재구성했습니다.https://askubuntu.com/questions/1233186/ubuntu-20-04-how-to-set-lower-ssl-security-level
그리고 이제 Workbench가 필수로 설정된 SSL로 연결되어 있다는 사실을 모르시겠습니까? Spring-Boot는 여전히 그렇지 않습니다. 메모를 얻으려면 다른 곳에서 구성해야 할 것 같습니다. 하지만 그 문제에 시간을 낭비하는 대신 문제를 해결하고 싶습니다.진짜문제는 TLSv1.2를 통해 연결할 수 없다는 것입니다. 그러나 실제로는 가능해야 한다고 말할 수 있습니다. 그것은 내 보안을 다운그레이드하는 것보다 훨씬 더 바람직할 것입니다. 문제가 될 수 있는 경우를 대비해 데이터베이스 인증서를 갱신하려고 했지만 관리 콘솔에서 인증서에 아무런 문제가 발견되지 않았으며 필요하지 않은 경우 인증서를 교체할 수 없는 것 같습니다. 그래서 다음에 무엇을 시도할지에 대한 아이디어가 약간 부족합니다.
답변1
TLS 지원은 RDS에서 사용 중인 정확한 데이터베이스 엔진 버전에 따라 다릅니다. Aurora mySQL 5.6은 TLSv1.1 및 1.2를 사용할 수 있게 되는 버전 1.23.1까지 TLSv1.0만 지원합니다. 우리 버전이 1.22였기 때문에 엔진을 업그레이드해야 했습니다.
그렇다하더라도하지만 Ubuntu 20은 최소 키 길이인 2048비트를 적용하기 때문에 작동하지 않습니다. Aurora mysql 5.6은 이를 제공하지 않으며, 이는 변경할 수 없습니다. Diffie-Hellman 키 길이를 변경하는 데 사용할 수 있는 데이터베이스 매개변수에 대한 문서를 찾을 수 있지만 이는 MySQL이 아닌 SqlServer에만 해당되는 것으로 나타났습니다. 따라서 여기에서 허용되는 답변에 설명된 대로 openssl.cnf에 변경 사항을 적용해야 합니다.https://askubuntu.com/questions/1233186/ubuntu-20-04-how-to-set-lower-ssl-security-level 그러면 SECLEVEL이 1로 변경되므로 openssl은 더 짧은 DHE 키를 허용합니다.
그렇다하더라도내 스프링 부트 애플리케이션은 연결되지 않지만 Workbench에서는 연결됩니다. 이는 JDBC가 TLSv1.2를 수행할 수 있음을 서버에 알리지 않기 때문입니다.비록 완전히 그럴 수 있지만(이상한 결정입니다.) 따라서 서버는 가능하더라도 1.2 핸드셰이크를 보내려고 시도하지 않습니다.
실제로 TLSv1.2를 사용하도록 JDBC에 지시하려면 이를 연결 문자열에 추가해야 합니다.
jdbc:myslq://<host>/<db>?enabledTLSProtocols=TLSv1.2
이제 모든 것이 연결됩니다.
Ubuntu의 보안을 낮추는 것보다 Aurora가 더 긴 키를 제공하도록 만들고 싶었지만 방법이 없는 것 같습니다. 혹시 아는 사람이 있으면 알려주시기 바랍니다.