我将假设您的当前目录中有 ssl.crt 和 ssl.key。
如果您想查看证书中的内容
# openssl x509 -in ssl.crt -text -noout
这里的两件事将是 RSA 公钥的模数和指数(以十六进制表示)。
如果您想查看私钥中的内容
# openssl rsa -in ssl.key -text -noout
请注意,公钥通常在那里(至少需要模数才能使私钥工作,并且公共指数通常是 65537 或 3)。因此,您可以简单地检查模数和公共指数是否匹配。当然,如果您想检查私钥是否确实有效(即 d 和 e 是模数 m 的有效 RSA 指数),您需要运行
# openssl rsa -check -in ssl.key -noout
编辑(2018 年): 请注意,如果您正在检查来自不受信任来源的私钥是否与证书对应,则必须检查私钥是否有效。有关不检查“泄露”私钥的有效性导致 CA 不正确地撤销证书的示例,请参见此处。如果您知道您有效地生成了密钥对,则可以跳过此步骤。
现在您可以简单地从证书和私钥生成公钥,然后diff
用来检查它们是否不同:
# openssl x509 -in ssl.crt -pubkey -noout > from_crt.pub
# openssl rsa -in ssl.key -pubout > from_key.pub
# diff from_crt.pub from_key.pub
或者作为一个不创建文件的衬里(使用进程替换):
# diff <(openssl x509 -in ssl.crt -pubkey -noout) <(openssl rsa -in ssl.key -pubout)
如果键匹配,则 diff 不应返回任何内容。(您可能会看到从第二个命令到 stderr 的“写入 RSA 密钥”输出)。
请注意,如果证书和私钥不匹配,您的网络服务器可能会大声抱怨。例如,对于 nginx 使用的证书,nginx 使用了错误的密钥(相同的大小,相同的公共指数,但去年的密钥):
# sudo /etc/init.d/nginx restart
* Restarting nginx nginx
nginx: [emerg] SSL_CTX_use_PrivateKey_file("/etc/nginx/ssl/private/wrong_key.key") failed
(SSL: error:0B080074:x509 certificate routines:X509_check_private_key:key values mismatch)
nginx: configuration file /etc/nginx/nginx.conf test failed