Как подключить веб-приложение Java Azure к базе данных Azure PostgreSQL с использованием SSL?Похоже, что базе данных Azure PostgreSQL требуется определенный корневой сертификат.
У меня есть приложение Java, работающее как .war, развернутое в веб-приложении Azure «Службы приложений».Это выполняется в контейнере Tomcat 8.5, в Java 8.
Это подключение к базе данных PostgreSQL 10, работающей в Azure, в качестве «базы данных Azure для PostgreSQL».База данных в настоящее время настроена так, что она принимает только SSL-соединения.
Я могу правильно подключиться к базе данных, используя SSL с моего локального компьютера разработки.
Я могу запустить веб-приложение Java локально ион успешно подключается к базе данных PostgreSQL с помощью SSL (строка драйвера JDBC включает '? ssl = true' ).
Однако, когда я запускаю то же приложение в Azure Web App, используя SSL,не удается подключиться (I может подключиться с отключенным SSL): "Не удалось открыть файл корневого сертификата SSL D: \ local \ AppData \ postgresql \ root.crt"
2019-05-13 15:16:58 ERROR HikariPool:574 - HikariPool-1 - Exception during pool initialization.
org.postgresql.util.PSQLException: Could not open SSL root certificate file D:\local\AppData\postgresql\root.crt.
at org.postgresql.ssl.LibPQFactory.<init>(LibPQFactory.java:120) ~[postgresql-42.2.5.jar:42.2.5]
...
Похоже, что JRE, которую Microsoft делает доступной в Службах приложений Azure (я думаю, Azul), не имеет установленного корневого сертификата (и поэтому драйвер postgres ищет root.crt ), в то время как мой локальный JDK (AdoptOpenJDK jdk-8.0.212.03-hotspot) действительно установил
В документации Microsoft указано, что вам может потребоваться установить их BaltimoreCyberTrustRoot.crt в качестве сертификата root.crt на клиенте конце соединения.https://docs.microsoft.com/en-us/azure/postgresql/concepts-ssl-connection-security
Может кто-нибудь предложить лучший способ получить службу приложений, чтобы разрешить доступ к этому корневому сертификату, учитывая, что я не могу установить дополнительные корневые сертификаты в службу приложений, и у меня нет доступа для простой загрузкифайлы в D: \ local \ AppData \ postgresql.Microsoft предоставляет механизм, позволяющий делать сертификаты доступными для веб-приложений, но они не помещаются в место, где драйвер JDBC их заберет.https://docs.microsoft.com/en-us/azure/app-service/app-service-web-ssl-cert-load
Обратите внимание: эта проверка SSL была улучшена в самой последней версии драйвера JDBC PostgreSQL: в версии 42.2.5 появилась дополнительная функция: "ssl = true подразумевает sslmode = verify-полно, то есть требуется действительный сертификат сервера " https://jdbc.postgresql.org/
Я могу обойти проблему проверки SSL двумя способами, но ни один из них не является удовлетворительным:
a) Iможет явно понизиться до более старой версии драйвера PostgreSQL JDBC.Он по-прежнему использует SSL, но уязвим для атак MITM.
b) Я могу явно отключить требование использовать SSL и / или отключить проверку сертификата.
Я не хочу делатьлюбой из них.У кого-нибудь есть предложения получше?
Обратите внимание, что это пара связанных потоков Stackoverflow, но они на самом деле не относятся к этому сценарию использования Java:
Установка сертификатов вхранилище доверенных корневых сертификатов в веб-приложениях Azure
Как доверять сертификату корневого центра сертификации Active Directory в веб-приложении Azure?