我正在部署通过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%;
在这里钦佩任何帮助。
答案 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中选择文件并在启动时将其放入我的战争中解决了这个问题,因此它解决了我的所有问题。谢谢!