我在测试网站的SSL时收到了来自https://www.ssllabs.com/ssltest/analyze.html?d=api.quotecrunchers.com的错误“链结问题:订单不正确,附加证书” 。
我已使用以下命令将https机制内置到Spring Boot应用程序中:
用于与Let's Encrypt CA通信的acme4j库。
用于将Let's Encrypt证书写入Java密钥库的Java代码。
Java代码使嵌入式Tomcat服务器通过HTTP的“让我们加密”申请证书,然后在获得证书后使用HTTPS重新启动。
整理好代码后,我正计划将此代码开源。
不过,目前,我只能通过ssllabs.com达到B级
请参见https://www.ssllabs.com/ssltest/analyze.html?d=api.quotecrunchers.com
我的https有几个问题,但我担心的问题是它在“链问题:不正确的订单,额外的证书” 所在的位置。
我为什么要得到这个,我应该怎么做呢?
非常感谢您的帮助!
答案 0 :(得分:2)
当一个人连接到您的站点时,这就是它发送的内容,如openssl s_client
所示:
Certificate chain
0 s:/CN=api.quotecrunchers.com
i:/C=US/O=Let's Encrypt/CN=Let's Encrypt Authority X3
1 s:/CN=api.quotecrunchers.com
i:/C=US/O=Let's Encrypt/CN=Let's Encrypt Authority X3
2 s:/C=US/O=Let's Encrypt/CN=Let's Encrypt Authority X3
i:/O=Digital Signature Trust Co./CN=DST Root CA X3
如您所见,第一个证书是重复的,这正是评级和错误消息的原因。
配置TLS服务器时,通常通常在一端指定一个证书(即一个证书),该证书将出现在上述跟踪中的0
位置,然后(可选地,但经常)提供一个潜在的链式证书列表,称为“中间”,将您的最终证书链接到某个根(CA)证书,CA证书本身可能是链中的最后一个证书,或者被完全跳过。
那应该在位置1
中,并且在上面的跟踪信息的后面。
但是您可以看到,在1
位置,因此作为中间证书,我们会再次找到您的最终证书。
按照TLS标准,这是不正确的,因此您需要更改配置或包含中间证书的文件才能从该位置删除最终证书,以便最终设法获得:
Certificate chain
0 s:/CN=api.quotecrunchers.com
i:/C=US/O=Let's Encrypt/CN=Let's Encrypt Authority X3
1 s:/C=US/O=Let's Encrypt/CN=Let's Encrypt Authority X3
i:/O=Digital Signature Trust Co./CN=DST Root CA X3