如何在Azure App Services中获取Java应用程序以使用SSL连接到Azure PostgreSQL数据库?

时间:2019-05-14 13:25:47

标签: java postgresql azure ssl azure-web-app-service

如何使用SSL将Azure Java WebApp连接到Azure PostgreSQL数据库?看来Azure PostgreSQL数据库需要特定的根证书。

我有一个部署为Azure“ App Services” Web应用程序中以.war形式运行的Java应用程序。它在Java 8的Tomcat 8.5容器中运行。

这正在连接到在Azure中运行的PostgreSQL 10数据库,称为“ PostgreSQL的Azure数据库”。当前已配置数据库,使其仅接受SSL连接。

我可以使用本地开发计算机上的SSL正确连接到数据库。

我可以在本地运行Java Web应用程序,它可以使用SSL(JDBC驱动程序字符串包括'?ssl = true'”)愉快地连接到PostgreSQL数据库。

但是,当我使用SSL在Azure Web App中运行相同的应用程序时,它无法连接(我可以在禁用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]
    ...

Microsoft在Azure App Services(我认为是Azul)中提供的JRE似乎没有安装此根证书(因此postgres驱动程序会寻找 root.crt ) , 而我的本地JDK(AdoptOpenJDK jdk-8.0.212.03-hotspot)确实已安装了此

Microsoft文档指出,您可能需要在连接的 client 端上安装其 BaltimoreCyber​​TrustRoot.crt 作为root.crt证书。 https://docs.microsoft.com/en-us/azure/postgresql/concepts-ssl-connection-security

任何人都可以建议获得应用服务以允许访问此根证书的最佳方法, 鉴于我无法在App Service中安装额外的根证书, 而且我无权简单地将文件上传到D:\ local \ AppData \ postgresql。 Microsoft提供了一种机制,允许证书可供Web Apps使用,但是这些证书不会放置在JDBC驱动程序将其拾取的位置。 https://docs.microsoft.com/en-us/azure/app-service/app-service-web-ssl-cert-load

注意事项: 最新版本的PostgreSQL JDBC驱动程序对此SSL验证进行了增强: 版本42.2.5现在具有一个附加功能: “ ssl = true表示sslmode = verify-full,即它需要有效的服务器证书” https://jdbc.postgresql.org/

我可以通过两种方法解决SSL验证问题,但都不令人满意:

a)我可以显式降级到PostgreSQL JDBC驱动程序的旧版本。它仍然使用SSL,但容易受到MITM攻击。

b)我可以明确关闭使用SSL和/或关闭证书验证的要求。

我不想做任何一个。有人有更好的建议吗?

请注意,这些是几个相关的Stackoverflow线程,但是这些并没有真正解决此Java用例:

Installing certificates to the trusted root certificate store on azure web apps

How can I trust an Active Directory Root CA Certificate in an Azure Web Application?

0 个答案:

没有答案