首页 > 解决方案 > 使用和解析 URL 为 -Djavax.net.ssl.trustStore=在 JAVA_OPTS PCF 中

问题描述

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

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

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

会欣赏这里的任何帮助。

标签: javasslcloud-foundryjava-opts

解决方案


将它们保存在构建包中并从那里挑选它们。

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

但是有一些证书是 cacert 的一部分,需要从 PCF 上的 JAVA_OPTS 中选择作为环境变量,例如 -Djavax.net.ssl.trustStore=

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

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

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

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

撇开这一点不谈,如果你真的想调整在 Cloud Foundry 上运行你的应用程序的 JVM 的默认信任库,你只需要修改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 支持远程路径/URL。

JDK -> 1.7xx

你真的需要升级:)


推荐阅读