将 CA 证书添加到 Java Buildpack 以进行 PCF 部署

Adding CA Certificate to Java Buildpack for PCF Deployment

我想使用可以在此处找到的相同 Java Buildpack:https://github.com/cloudfoundry/java-buildpack/ 但我希望能够向此包添加一个 public 证书,因为我的应用程序将如果没有安装此证书,则无法正常 运行。我将如何添加此证书并将更新的构建包部署到 PCF?

我强烈建议您不要尝试将证书添加到构建包本身。这需要分叉 buildpack,这会给您带来维护负担(您基本上需要永远维护该分叉)。

相反,我建议您将证书与您的应用捆绑在一起或使用 Bosh trusted certs to deploy the cert to all application containers by default

如果您只需要几个应用程序的证书,将它与应用程序捆绑在一起会更容易。如果您在整个站点范围内需要它,例如 company/internal 证书颁发机构,那么您应该将其部署为 Bosh 可信证书。

要与应用程序捆绑,有几个选项:

  • 您可以设置 JAVA_OPTS 以包含 -Djavax.net.ssl.Truststore 并将其指向您与应用捆绑的信任库。请记住,这会完全覆盖默认的信任库,因此您需要拥有所有常用的默认值以及您自定义的受信任证书。从默认信任库开始并添加到它是最简单的。

    例如:

    cf set-env <app> JAVA_OPTS '-Djavax.net.ssl.TrustStore=classpath:resources/config/truststore'
    
  • 您可以添加一个 .profile 脚本,该脚本 运行 并将您的自定义可信证书导入默认密钥库。 .profile 脚本的内容如下所示。

    #!/bin/bash  
    $HOME/.java-buildpack/open_jdk_jre/bin/keytool -keystore $HOME/.java-buildpack/open_jdk_jre/lib/security/cacerts -storepass changeit -importcert -noprompt -alias MyCert -file $HOME/WEB-INF/ssl/MyCert.crt
    

    很难将 .profile 脚本放在正确的位置。它需要在您生成的 WAR 或 JAR 文件的根目录中结束。如果您 运行 jar tf <jar-or-war-file>,您应该会看到列出的 .profile 没有任何前导路径。如果文件前面有路径,那就是放错地方了。

希望对您有所帮助!