4

我面对SSLHandshakeExceptionHeroku。

此应用程序不是 SSL 应用程序。但是这个应用程序从应用程序内部调用了一个基于 ssl 的 web api。通常,使用 keytool 对 JVM 采用 SSL 证书可以解决此类问题。

但是我如何在 Heroku 上做到这一点?

在这里记录:

    2012-06-12T11:08:08+00:00 app[web.1]: Caused by: sun.security.validator.ValidatorException:  PKIX path building failed: sun.security.provider.certpath.SunCertPathBuilderException:  unable to find valid certification path to requested target
    2012-06-12T11:08:08+00:00 app[web.1]:   at sun.security.validator.PKIXValidator.doBuild(PKIXValidator.java:324) ~[na:1.6.0_20]
    2012-06-12T11:08:08+00:00 app[web.1]:   at sun.security.validator.Validator.validate(Validator.java:235) ~[na:1.6.0_20]
    2012-06-12T11:08:08+00:00 app[web.1]:   at sun.security.ssl.X509TrustManagerImpl.validate(X509TrustManagerImpl.java:147) ~[na:1.6.0_20]
    2012-06-12T11:08:08+00:00 app[web.1]:   at sun.security.ssl.X509TrustManagerImpl.checkServerTrusted(X509TrustManagerImpl.java:230) ~[na:1.6.0_20]
    2012-06-12T11:08:08+00:00 app[web.1]: Caused by: sun.security.provider.certpath.SunCertPathBuilderException: unable to find valid certification path to requested target
    2012-06-12T11:08:08+00:00 app[web.1]:   at sun.security.ssl.X509TrustManagerImpl.checkServerTrusted(X509TrustManagerImpl.java:270) ~[na:1.6.0_20]
    2012-06-12T11:08:08+00:00 app[web.1]:   at sun.security.provider.certpath.SunCertPathBuilder.engineBuild(SunCertPathBuilder.java:197) ~[na:1.6.0_20]
    2012-06-12T11:08:08+00:00 app[web.1]:   at java.security.cert.CertPathBuilder.build(CertPathBuilder.java:255) ~[na:1.6.0_20]
    2012-06-12T11:08:08+00:00 app[web.1]:   at sun.security.validator.PKIXValidator.doBuild(PKIXValidator.java:319) ~[na:1.6.0_20]
    2012-06-12T11:08:08+00:00 app[web.1]:   at sun.security.validator.Validator.validate(Validator.java:235) ~[na:1.6.0_20]
    2012-06-12T11:08:08+00:00 app[web.1]:   at sun.security.ssl.X509TrustManagerImpl.validate(X509TrustManagerImpl.java:147) ~[na:1.6.0_20]
    2012-06-12T11:08:08+00:00 app[web.1]:   at sun.security.validator.PKIXValidator.engineValidate(PKIXValidator.java:224) ~[na:1.6.0_20]
4

4 回答 4

1

实际上,我不确定 heroku 是否支持更新密钥库,但您始终可以像这样在配置或 procfile 中提供自己的密钥库作为 java 环境参数

web: java -jar -Djavax.net.ssl.trustStore=path/to/keystore -Djavax.net.ssl.trustStorePassword=changeit --port $PORT target/*.war
于 2012-10-15T13:35:05.950 回答
0

当您SSL connection to a server, you should be having the Server's certificate在客户端信任库中创建时。

您应该使用andimport the server certificate into a keystore指定密钥库。javax.net.ssl.trustStorejavax.net.ssl.trustStorePassword

检查您是否指定了这些属性。如果已经指定,请检查它们是否正确指向密钥库。

于 2012-06-12T12:00:10.030 回答
0

为了解决 SSL 证书验证问题(通常发生在自签名证书中),您需要将证书添加到 java 密钥库以告诉 JVM 始终信任它。

要在本地添加它:

  • 找到您的密钥库文件(通常位于jre/lib/security/cacerts中)
  • 下载证书 .cer 文件(这里有几种方法,我认为用 Firefox 下载是最简单的一种)
  • 将证书导入您的密钥库:keytool -import -keystore cacerts -file custom.cer

通过将cacerts文件添加为自定义 JVM 文件,将您的密钥库上传到 Heroku 。

于 2016-11-19T15:34:21.603 回答
0

我已经更新了博客中的流程,我可以使用它成功自定义 Heroku 中的 cacerts。

https://deepaksinghviblog.blogspot.com/2021/04/heroku-custom-trust-store-for-ssl.html

于 2021-04-10T18:47:00.410 回答