在 SSL 中,信任库中的证书如何 matched/found?

In SSL how a certificate is matched/found in truststore?

在 SSL 中,它如何检查信任库中是否存在匹配的证书?是比对指纹还是序列号?

我一直以为是通过匹配指纹,但是当我运行一个java SSL debug下面是我得到的,我在那里看不到任何指纹。

*** Certificate chain
chain [0] = [
[
  Version: V3
  Subject: CN=XXXX
  Signature Algorithm: SHA256withRSA, OID = 1.2.840.113549.1.1.11

  Key:  Sun RSA public key, 1024 bits
  modulus: XXXX
  public exponent: XXXX
  Validity: [From: Mon Mar 16 22:48:10 UTC 2015,
               To: Sun Jun 14 22:48:10 UTC 2015]
  Issuer: CN=XXXX
  SerialNumber: [    XXXXXXX]

Certificate Extensions: 1
[1]: ObjectId: 2.5.29.14 Criticality=false
SubjectKeyIdentifier [
KeyIdentifier [
 ...
]
]

]
  Algorithm: [SHA256withRSA]
  Signature:
 ...

]
***

我希望这不是一个重复的问题(我在发帖前检查了建议的问题)。

它不检查是否有匹配的证书。它检查是否有一个证书,其主题等于该证书的颁发者,并且其 public 密钥验证该证书的签名。

很多时候,Certificate Authority Key Identifier 在证书中出现时被标记为非关键以进行验证,它甚至并不总是存在。你不能真的依赖它作为指纹参考来使用。

验证是通过构建证书路径完成的,方法是将证书的颁发者 DN(专有名称)链接到您信任的 CA 证书的主题 DN 进行验证。

这在 Java PKI Programmer's GuideCertPathBuilder/CertPathValidator 部分中进行了描述。 (更一般地说,这遵循 RFC 3820,因为还有其他属性需要检查。)

或者,您也可以直接在信任库中拥有准确的最终实体证书(不是 CA 证书)。在这种情况下,可以使用与证书完全匹配。