Как получить приложение Java в службах приложений Azure для подключения к базе данных Azure PostgreSQL с использованием SSL? - PullRequest
0 голосов
/ 14 мая 2019

Как подключить веб-приложение 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?

...