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

时间:2018-05-17 10:59:11

标签: java ssl pivotal-cloud-foundry java-opts

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

如何使用Jdk -> 1.7xx Target Environment -> PCF environment OS -> Linux 从那里检索trustStore。

width: 100%;

在这里钦佩任何帮助。

2 个答案:

答案 0 :(得分:2)

  

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

如果可能的话,不要这样做。它需要你分叉buildpack,这是不好的。它会给您带来维护负担,并会降低您在Cloud Foundry上运行的应用程序部署更新和安全补丁的能力。

  

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

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

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

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

我不知道您正在使用什么HTTP客户端,但是使用HTTPClient here这是一个很好的例子。请参阅Custom SSL context示例。

暂且不说,如果您真的想在Cloud Foundry上调整运行您的应用程序的JVM的默认信任库,您只需修改应用程序的JAVA_OPTS环境变量&amp;重演。

例如:

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 - &gt; 1.7xx

你真的需要升级:)

答案 1 :(得分:0)

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