【发布时间】:2017-07-04 17:43:55
【问题描述】:
我有一个使用 Spark Java 框架编写的应用程序,启用了 TLS。
见:
Service https = ignite()
.port(8443)
.secure(keystorePath, keystorePass, truststorePath, truststorePass);
这是通过 iptables 规则在端口 443 上提供的,该规则将传入的 443 重定向到 8443。
我遇到的问题是,当使用 Qualys ssl 实验室测试 (https://www.ssllabs.com/ssltest/) 时,服务器未提供已在我的信任库中配置的中间证书。
当我使用 openssl s_client 时会出现类似的结果:
Verify return code: 21 (unable to verify the first certificate)
随着
depth=0 /OU=Domain Control Validated/OU=PositiveSSL/CN=my.app.com
verify error:num=20:unable to get local issuer certificate
verify return:1
depth=0 /OU=Domain Control Validated/OU=PositiveSSL/CN=my.app.com
verify error:num=27:certificate not trusted
verify return:1
depth=0 /OU=Domain Control Validated/OU=PositiveSSL/CN=my.app.com
verify error:num=21:unable to verify the first certificate
verify return:1
据我所知,服务器(我想是 spark java 应用程序或嵌入式 Jetty)似乎没有提供用于链验证的中间证书。
浏览器认为该站点是安全的,但我认为这是因为浏览器会自行下载必要的中间证书。
这是一个问题的原因是我正在尝试使用 Stripe 支付 webhook,并且它们在 TLS 证书链的有效性方面有严格的规定。
我不知道从哪里开始弄清楚为什么我的应用没有提供这些中间证书。有人可以提供一些建议吗?
【问题讨论】:
标签: java ssl spark-java