在 JAVA_OPTS PCF 中使用并解析 URL 为 -Djavax.net.ssl.trustStore=<url>

Use and resolve URL as -Djavax.net.ssl.trustStore=<url> in JAVA_OPTS PCF

我正在部署一个通过 SSL 连接与第三方应用程序连接的应用程序。为此,我之前使用了这些证书并将它们保存在构建包中并从那里挑选它们。现在由于生产版本数量有限,我需要外部化 SSL 证书。到目前为止,我已经外部化了从 jre/lib/security/wasadm. via a SSLConnectionFactory. 中挑选的证书 但是有一些证书是 cacert 的一部分,需要从 PCF 上的 JAVA_OPTS 中选择为环境变量,例如 -Djavax.net.ssl.trustStore=<URL to a Path on Server>

如何使用 -D or JAVA_OPTS 从那里检索 trustStore。

Jdk -> 1.7xx
Target Environment -> PCF
environment OS -> Linux

在此感谢任何帮助。

keeping them in the build pack and pick them from there.

如果可能的话,不要这样做。它要求您分叉构建包,这很糟糕。它会给您带来维护负担,并会降低您在 Cloud Foundry 上向应用程序 运行 部署更新和安全补丁的能力。

But there are some certs which are part of cacert and needs to be picked from the JAVA_OPTS on PCF as environment variable like -Djavax.net.ssl.trustStore=

我不确定为什么你会被迫走这条路。 -Djavax.net.ssl.trustStore 选项只是为 JVM 设置默认信任库。它有时很方便,但也有缺点。

当您需要信任不是由知名 CA 签名的证书时,我建议您创建自己的特定于应用程序的信任库,而不是将更多证书添加到 JVM 的默认信任库。

如果您的应用程序不依赖于系统特定的自定义设置(例如修改默认信任库),那么它的可移植性会更高。更改默认信任库也有问题,因为 JVM 中的所有内容 运行 都使用它。如果您只是添加到默认信任库,这通常是可以的,但如果您试图从中删除,您可能最终会破坏其他代码。另外,如果您使用自己的信任库,则可以仅包含您的应用程序甚至应用程序中的特定服务所需的最少数量的证书(因为您可以通过这种方式使用多个信任库)。

我不知道您使用的是什么 HTTP 客户端,但是有一个使用 HTTPClient here 执行此操作的好例子。请参阅 Custom SSL context 示例。

撇开这一点,如果你真的想调整 JVM 的默认信任存储 运行 你的应用程序在 Cloud Foundry 上,你只需要修改你的应用程序的 JAVA_OPTS 环境变量 &重演。

例如:

cf set-env my-cool-app JAVA_OPTS '-Djavax.net.ssl.trustStore=path/to/my/new/default-truststore.jks'

我相信您可以使用指向您的信任库的相对路径,就像您将它与您的应用程序捆绑在一起一样。如果不是,/home/vcap/app 是 JAR/WAR 文件根目录的路径,因此如果您需要完整路径,可以插入它。它需要是容器上的本地路径,我不相信 JVM 支持远程 paths/URLs.

Jdk -> 1.7xx

你真的需要升级:)

我已经通过从 URL 中选择文件并在启动时将其放入我的 war 中解决了这个问题,因此它解决了我所有的问题。谢谢!