У меня есть ранее работавший проект Spring MVC, использующий Spring Boot, Spring JPA, Spring Data. Мой администратор баз данных обновил систему безопасности на сервере MySQL, чтобы принимать только TLSv1.1 и TLSv1.2, и теперь мой веб-сайт Spring MVC не подключается к нему. Веб-сайт буквально умер в тот момент, когда на него установили TLS 1.2, так что это моя проблема с их безопасностью.
Обратите внимание, что мой блок разработчика полностью изолирован. Я не могу скопировать и вставить много строк кода, и мне приходится набирать его вручную.
Сначала попробовал добавить SSL через строку JDBC:
jdbc:mysql://host:3306/bdd_name?useUnicode=true&characterEncoding=utf8&useSSL=true&requireSSL=true
Во-вторых, попытался добавить дополнительную информацию (в этом примере):
jdbc:mysql://example.com:3306/MYDB?verifyServerCertificate=true&useSSL=true&requireSSL=true&clientCertificateKeyStoreUrl=file:cert/keystore.jks&clientCertificateKeyStorePassword=123456&trustCertificateKeyStoreUrl=file:cert/truststore.jks&trustCertificateKeyStorePassword=123456
В-третьих, попытался добавить безопасность Java:
-Djavax.net.ssl.keyStore=/path/to/keystore/keystore.jks
-Djavax.net.ssl.keyStorePassword=password
-Djavax.net.ssl.trustStore=/path/to/keystore/truststore.jks
-Djavax.net.ssl.trustStorePassword=password
В-четвертых, пытался добавить через Spring свойства:
server.ssl.enabled=true
server.ssl.enabled-protocols=TLSv1.2
После многих попыток решить эту проблему, у меня есть установка с 2 и 4 на месте. Свойство соединения jdbc разрешает и находит мои ключевые файлы и разблокирует их, поэтому изменения URL (2) работают.
Итак, после всего этого я все равно получаю:
Caused by: com.mysql.jdbc.exceptions.jdbc4.CommunicationsException: Communications link failure
Caused by: Received fatal alert: handshake_failure
at sun.security.ssl.Alerts.getSSLException(Alerts.java:192)
at sun.security.ssl.Alerts.getSSLException(Alerts.java:154)