首页 > 解决方案 > 使用默认 java 信任库 (cacerts) 打包自由应用程序的最佳方式

问题描述

我正在打包一个可与 Db2 一起使用的自由应用程序。当我们在本地运行时,我们配置证书以保护从应用程序到数据库的连接。

现在我正在尝试打包相同的应用程序以与 Db2 on Cloud 服务一起使用,但我在 SSL 配置方面遇到了问题。

我想我可以创建一个信任库并将 digicert 根 CA 添加到其中并将其与应用程序打包,但我倾向于仅使用 JDK 的内置 cacerts(因为我们也有限制性的防火墙规则,以防止与其他主机的出站连接)。

我在https://github.com/OpenLiberty/open-liberty/issues/4377找到了非常相关的讨论,但我似乎找不到以可移植方式指定 JDK cacert 存储路径的好方法。

我尝试将其设置如下: <keyStore id="defaultKeyStore" location="${env.JAVA_HOME}/jre/lib/security/cacerts"/>

但由于某种原因,它不能解析环境变量。为什么?

此外,这仅在 JAVA_HOME 设置为 JDK 时才有效(如在开发中)。在我们的容器中,我们没有那个,所以我们不希望jre路径中的部分。

告诉 Liberty 仅使用 JDK 的默认信任库(以可移植方式)的最简单/最简单的方法是什么?

标签: websphere-libertyopen-liberty

解决方案


更新:2020 年 2 月 9 日:

从 Liberty 的 19.0.0.12 版本开始,您可以使用以下 xml 获得相同的效果:

<ssl id="defaultSSLConfig" trustDefaultCerts="true" />

这是在默认服务器模板中设置的,因此默认情况下新服务器将具有此设置。以前的答案仍然有效。


上一个答案:

我昨天才这样做,我的建议是这样的配置:

<ssl id="defaultSSLConfig" trustStoreRef="myTrustStore"/>

<keyStore id="myTrustStore" location="${java.home}/lib/security/cacerts" password="changeit" />

在我的情况下,我使用生成的自签名证书(我正在做开发测试)使用 https 入站到我的 Liberty 服务器,如果我设置 defaultKeyStore 指向 cacerts 入站 ssl 被破坏,因为它不包含我可以使用的服务器证书。相反,我只是更新了默认的 ssl 配置以使用 cacerts 作为信任库,并保持原样保留密钥库。

我使用${java.home}它是因为它会一直存在(除非 Java 摆脱了这个系统变量,但我怀疑情况并非总是如此)。Liberty 的服务器脚本有多种计算 Java 位置的方法,因此它不需要 JAVA_HOME 作为环境变量。我猜在您的情况下 JAVA_HOME 未设置为环境变量,但系统属性将始终存在。


推荐阅读