我在不同主机上的服务之间设置双向SSL通信。让我们说我有自己的CA称为A.通过集中式jks,我的所有服务都信任A.现在让我们说我有B签署的证书B.当服务发送证书时,他们应该发送整个链B - A,还是只发B?我相信两者都适用于大多数实现。
我试图在网上找到关于此的规范信息,但我没有提出任何建议。
感谢您的帮助
答案 0 :(得分:3)
服务器应该发送要使用的确切链;服务器 明确允许省略根CA,但这都是。
参考(RFC 5246 - TLS v1.2, sec. 7.4.2. - Server Certificate):
certificate_list
这是证书的序列(链)。发件人 证书必须在列表中排在第一位。以下每个证书 必须直接证明它前面的那个。因为证书 验证要求根密钥独立分发, 自签名证书,指定根证书 在假设的情况下,可以从链中省略权限 远程端必须已拥有它才能验证它 无论如何。
答案 1 :(得分:2)
受信任的根CA背后的想法是它是受信任的。您是否希望浏览器信任服务器发送的任何内容,因为它包含根CA?没有!
因此,根CA必须已经在客户端,并且必须在那里受信任。它不应该被服务器包含在证书链中,但如果你这样做,浏览器就会忽略它。