如何比较两个 SSL 证书?

如何比较两个 SSL 证书?

比较两个 SSL 证书的最佳方法是什么?有没有权威工具?我想这样做的原因是我有 2 个证书,看似具有相同的属性,但一个有效,另一个无效。为了清楚起见,我想比较属性,我知道签名不会匹配,因为它们是在不同的时间颁发的。

答案1

使用每个在线的数据包捕获客户端。使用可以对对话进行一些分析的工具,例如 Wireshark。或者使用 ExtraHop、Dynatrace 或 LANGuardian 等在线数据分析产品。这样做的好处是,您可以看到实际使用的 TLS 实现。其中一个实现不太可能出现问题,但确实有可能。

对于查看证书,OpenSSL 并不是唯一的选择,任何可能使用证书的操作系统都会有查询证书的实用程序。PowerShell pki 模块很棒,因为您可以过滤或查看任何或所有属性。

答案2

如果一个证书有效而另一个无效,那么我首先怀疑的是这两个证书不是来自同一个私钥。

首先检查两个证书是否相同

$ openssl x509 -noout -modulus -in server.nr1.crt | openssl md5
$ openssl x509 -noout -modulus -in server.nr2.crt | openssl md5

如果这两者来自同一个 csr,那么 md5 将匹配。

按照以下步骤根据私钥检查证书,以确保证书和私钥匹配:

$ openssl x509 -noout -modulus -in server.crt | openssl md5
$ openssl rsa -noout -modulus -in server.key | openssl md5

输出的 md5 哈希值应该匹配。

您还可以检查您的 csr 以确保它与您的私钥和证书匹配。

$ openssl req -noout -modulus -in server.csr | openssl md5

答案3

Openssl 提供了一个工具来解码它们:

openssl x509 -text -in bla.pem

您随后可以使用vimdiff它们或任何其他差异工具来进行比较。

一个猜测是,如果您包含了正确的域名,那么您是否也将它们作为“主题备用名称”包含在内?

答案4

我看到过很多对这个问题的糟糕回答。x509 证书不是按任意顺序排列的,它们也不是按任意顺序显示的,因此用 openssl 解码来目测它们不是一个好习惯。在类似的帖子中,有人建议使用 diff,但这也行不通。你应该跳过-text选项,并添加-noout

以下是您可以添加到输出中以供比较的选项列表: -serial -subject_hash -issuer_hash -hash -subject -issuer -email -startdate -enddate -purpose -dates -modulus -pubkey -fingerprint -alias -noout -nocert -ocspid -ocsp_uri -trustout -clrtrust -clrext -addtrust -addreject -setalias -days -checkend

因此,如果您想比较两个证书的指纹及其模量,您可以这样做: diff <(openssl x509 -in cert1.pem -modulus -fingerprint) <(openssl x509 -in cert2.pem -modulus -fingerprint)

相关内容