【问题标题】:certificate chain is not coming with server certificate服务器证书不附带证书链
【发布时间】:2016-04-22 00:03:37
【问题描述】:

密钥库包含CA证书私钥

bash:$ keytool -list -keystore my.keystore 
Enter keystore password:  

Keystore type: JKS
Keystore provider: SUN

Your keystore contains 6 entries

xyz-server-ca, Nov 12, 2015, trustedCertEntry, 
Certificate fingerprint (SHA1): F1:94:1E:B3:C1:E7:7E:54:DA:6B:12:35:26:AA:4C:DE:46:D6:45:3F
xyz-key, Nov 12, 2015, PrivateKeyEntry, 
Certificate fingerprint (SHA1): 81:45:05:29:15:26:0C:0E:71:EB:E0:1F:3E:1C:D8:FE:C6:8D:78:69
xyz-root-ca, Nov 12, 2015, trustedCertEntry, 
Certificate fingerprint (SHA1): 67:D6:A8:37:AD:16:15:31:6D:55:78:02:F2:FA:AB:7A:2A:75:F0:DF
server, Nov 12, 2015, trustedCertEntry, 
Certificate fingerprint (SHA1): 
xyz-root-ca1, Nov 12, 2015, trustedCertEntry, 
Certificate fingerprint (SHA1): 67:D6:A8:37:AD:36:15:31:6D:55:78:02:F2:FA:AB:7A:2A:75:F0:DF
server, Nov 12, 2015, trustedCertEntry, 
Certificate fingerprint (SHA1): 

当我使用 openssl 查看证书链时,它不会返回所有链,而只是返回服务器证书和一个 CA 文件

openssl s_client -host 127.0.0.1 -port 443 -prexit -showcerts

---
Certificate chain
 0 s:/C=EU/ST=I/L=Du/O=Inc./OU=Foot/CN=example.com
   i:/C= EU/O=I/OU=Du/CN=Servers CA

【问题讨论】:

标签: java openssl x509certificate keystore jks


【解决方案1】:

这是预期的行为。在进行 SSL 握手时,服务器会使用自己的 SSL 证书和链中的所有 CA 证书进行响应*除了根证书*。来自 [RFC 5246 §7.4.2][1] 的参考:

证书列表 这是证书的序列(链)。发件人的 证书必须排在列表的首位。以下每一个 证书必须直接证明它之前的证书。因为 证书验证要求分发根密钥 独立地,指定根的自签名证书 证书颁发机构可以从链中省略,在 假设远端必须已经拥有它才能 无论如何都要验证它。

换句话说,在 SSL 协商期间不发送根(以自签名形式提供)证书是一种很好的做法。 [1]:https://www.rfc-editor.org/rfc/rfc5246#section-7.4.2

【讨论】:

  • 我不相信它的预期行为(如果问题陈述/标题是准确的:“证书链没有附带服务器证书” )。一个配置良好的服务器发送它的证书,以及构建到根路径所需的所有中间体。另请参阅PKI "which directory" problem
  • 按照 OP:“它只是返回服务器证书和一个 CA 文件”,至少提供一个 CA 证书,这对于 2 层 PKI 来说是可以的。
  • 我怎样才能得到所有的证书链?
  • SSL 服务器不应以完整链响应,而应以不包括根证书的部分链响应。
猜你喜欢
  • 2016-11-05
  • 2018-04-27
  • 1970-01-01
  • 1970-01-01
  • 2021-12-27
  • 2014-09-05
  • 2018-03-24
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多