Приложение Spring Boot (с использованием mybatis) перестало подключаться к mysql после введения сертификатов, подписанных CA - PullRequest
1 голос
/ 17 июня 2020

Примерно через неделю go, приложение весенней загрузки в среде разработки (AWS экземпляр EC2), которое до этого момента успешно подключалось к MySql с использованием SSL, внезапно прекратило подключение. Вот выборка из бесполезной трассировки стека:

### Error querying database.  Cause: com.mysql.cj.jdbc.exceptions.CommunicationsException: Communications link failure

The last packet sent successfully to the server was 0 milliseconds ago. The driver has not received any packets from the server.
### The error may exist in com/domain/app/data/mybatis/mappers/SomeMapper.xml
### The error may involve com.domain.app.data.mybatis.mappers.SomeMapper.getUserByUsername
### The error occurred while executing a query
### Cause: com.mysql.cj.jdbc.exceptions.CommunicationsException: Communications link failure
The last packet sent successfully to the server was 0 milliseconds ago. The driver has not received any packets from the server.
    at org.apache.ibatis.exceptions.ExceptionFactory.wrapException(ExceptionFactory.java:30)
    at org.apache.ibatis.session.defaults.DefaultSqlSession.selectList(DefaultSqlSession.java:149)
    at org.apache.ibatis.session.defaults.DefaultSqlSession.selectList(DefaultSqlSession.java:140)
    at org.apache.ibatis.session.defaults.DefaultSqlSession.selectOne(DefaultSqlSession.java:76)
    at org.apache.ibatis.binding.MapperMethod.execute(MapperMethod.java:87)
    at org.apache.ibatis.binding.MapperProxy.invoke(MapperProxy.java:93)
    at com.sun.proxy.$Proxy91.getUserByUsername(Unknown Source)
    at com.domain.app.security.SomeService.loadUserByUsername(SomeService.java:32)
    at org.springframework.security.authentication.dao.DaoAuthenticationProvider.retrieveUser(DaoAuthenticationProvider.java:108)
    ... 96 more
Caused by: com.mysql.cj.jdbc.exceptions.CommunicationsException: Communications link failure

...
Caused by: java.net.ConnectException: Connection timed out (Connection timed out)

Некоторые факты:

  • Точно такая же сборка приложения работает при запуске с моего локального компьютера (с идентичной информацией о подключении к базе данных). Предположительно, неверно настроенный код приложения исключен.
  • mysql находится в отдельном экземпляре EC2, и я могу подключиться к mysql из интерфейса командной строки на «неисправном» экземпляре EC2. Проблемы безопасности / ACL предположительно исключены.
  • Строка подключения имеет следующий вид: jdb c: mysql: // xxxx: 3306 / db_name? UseSSL = true & verifyServerCertificate = true & requireSSL = true & autoReconnect = true, {db имя пользователя}, {пароль базы данных}. Опять же, эта строка работает при использовании с моей собственной машины.
  • Примерно через две недели go сертификаты ssl, подписанные CA, были добавлены в приложение весенней загрузки в хранилище ключей java. Те же сертификаты не были добавлены в mysql, который использует самогенерируемые и самозаверяющие сертификаты. Существует небольшой, хотя и маловероятный шанс, что приложение не тестировалось с тех пор в неисправной среде - хотя я почти уверен, что с тех пор я использовал эту среду.

Мое текущее мнение что, возможно, новые сертификаты в приложении dev каким-то образом конфликтуют с самогенерируемыми и самоподписанными сертификатами mysql, что может не происходить локально на моей машине. Но я не знаю, с чего начать проверку или тестирование этой теории.

Я устранял эту неполадку около 7 часов, в том числе черт побери в Google и читал множество ответов SO на связанные вопросы. Приносим извинения, если на этот вопрос был дан какой-то ответ, которого я не понимаю.

Может ли кто-нибудь из вас указать мне какие-то ответы или указания по устранению неполадок?

...