Я настроил новый компьютер с 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 в качестве минимальной версии TLS установлена версия TLSv1.2, и эта ошибка возникает, если ваш сервер MySQL ее не поддерживает (отсюда:https://askubuntu.com/questions/1193629/why-mysql-workbench-8-x-errors-out-with-an-ssl-connection-error-choose-client-v). Я попробовал Workbench с отключенным SSL, и, конечно же, соединение удалось установить.
Очевидная проблема в том, что это Amazon RDS... TLS 1.2 — единственная версия, котораяне мочьбыть отключена, поскольку это версия, используемая внутри, как указано здесь:https://docs.aws.amazon.com/AmazonRDS/latest/UserGuide/SQLServer.Ciphers.html
Так что на самом деле, проблем быть не должно. Я начал сомневаться, что проблема действительно в версии TLS. Но поскольку у меня не было других зацепок, я последовал кулинарной книге в ответе здесь, чтобы перенастроить мой локальный openssl, чтобы разрешить минимальную версию TLS 1 и понизить уровень безопасности:https://askubuntu.com/questions/1233186/ubuntu-20-04-how-to-set-lower-ssl-security-level
И разве вы не знаете, Workbench теперь подключен с SSL, установленным на required. Spring-Boot все еще не подключен, я думаю, мне нужно настроить это где-то еще, чтобы он получил memo. Но вместо того, чтобы тратить время на это, я бы лучше решилнастоящийпроблема в том, что я не могу подключиться через TLSv1.2, хотя, насколько я могу судить, я действительно должен это сделать. Это было бы намного предпочтительнее, чем понижение уровня безопасности. Я попытался обновить сертификат базы данных на случай, если проблема в нем, но консоль управления не нашла ничего неправильного в сертификате и, по-видимому, не позволяет мне заменить его, если мне это не нужно. Так что у меня немного нет идей, что попробовать дальше.
решение1
Оказывается, поддержка TLS зависит от конкретной версии движка базы данных, которую вы используете в RDS. Aurora mySQL 5.6 поддерживает только TLSv1.0 до версии 1.23.1, после чего становятся доступны TLSv1.1 и 1.2. Наша версия была 1.22.что-то там, поэтому мне пришлось обновить движок.
Даже тогдаНо это не сработает, потому что Ubuntu 20 также устанавливает минимальную длину ключа dhe в 2048 бит, которую Aurora mysql 5.6 просто не обеспечивает, и, насколько я могу судить, это нельзя изменить. Вы найдете документацию по параметрам базы данных, которые можно использовать для изменения длины ключа Диффи-Хеллмана, но оказывается, что они предназначены только для SqlServer, а не для MySQL. Поэтому вам все равно придется пойти и применить изменения к openssl.cnf, как описано в принятом ответе здесь:https://askubuntu.com/questions/1233186/ubuntu-20-04-how-to-set-lower-ssl-security-level Это изменит ваш SECLEVEL на 1, поэтому openssl будет принимать более короткие ключи DHE.
Даже тогдамои приложения spring-boot не подключались, хотя workbench теперь подключался. Это потому, что JDBC не сообщает серверу, что он может использовать TLSv1.2хотя это вполне возможно(странное решение), поэтому сервер никогда не попытается отправить рукопожатие 1.2, даже если бы мог.
Чтобы указать JDBC на необходимость использования TLSv1.2, необходимо добавить его в строку подключения:
jdbc:myslq://<host>/<db>?enabledTLSProtocols=TLSv1.2
Теперь все взаимосвязано.
Я бы с удовольствием заставил aurora выдавать более длинный ключ, а не снижать безопасность Ubuntu, но, похоже, нет возможности. Если кто-то знает такой, пожалуйста, дайте мне знать.