我已经使用Spark Java框架编写了一个应用程序,并启用了TLS。
请参阅:
Service https = ignite()
.port(8443)
.secure(keystorePath, keystorePass, truststorePath, truststorePass);
这是通过iptables规则在端口443上提供的,该规则将传入的443重定向到8443。
我遇到的问题是,在使用Qualys ssl labs测试(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 app,或者我认为是嵌入式Jetty)没有提供链验证的中间证书。
浏览器认为该网站是安全的,但我相信这是因为浏览器正在自行下载必要的中间证书。
这是一个问题的原因是我正在尝试使用Stripe支付webhooks,并且他们对TLS证书链的有效性有严格的规定。
我不知道从哪里开始弄清楚为什么我的应用程序没有提供这些中间证书。有人可以提供一些建议吗?
答案 0 :(得分:1)
我或多或少都有同样的问题。我按照Java Spark网站上的说明进行操作(它们是稀疏的)并且只为我的努力获得服务器错误。
我在密钥库文件中导入了第三方证书。我在CSR keytool外部生成了CSR。
我在服务器上移动了keystone文件" mydomain.com"存在。
我有相同的基本代码来进行测试" secureHello" (根据他们的文档),将路径作为第一个参数传递给keystore.jks文件,将密码作为第二个参数传递。
结果:服务器错误。
不确定我接下来可以尝试什么。显然,我错过了一些东西。
到目前为止(今天)在桌子上敲了4个小时......