如何检查 SSL bundle和域证书是否由现有私钥创建



如果我有pkey,csr(从pkey生成),捆绑证书和域证书文件。如何验证两个证书是否都是为 pkey 制作的?这也是验证SSL证书的正确方法。有什么建议吗?我想避免使用openssl cli工具,并使用php openssl库或任何第三方php库。

@HannoBinder很接近,但有点棘手。显然,在 PHP openssl 中,必须从证书(也在包含 nginx 域证书的证书捆绑包文件上测试)和私钥文件中获取资源变量。

您可以使用 openssl_pkey_get_public 获取证书资源。但是对于私钥,您必须通过openssl_pkey_get_private获取它。它没有清楚地写在文档中,因为这些功能可能是非常通用的。

我起初也不明白如何从这些资源中获取公钥。显然openssl_pkey_get_details可以做到这一点。

所以最后我以这种方式解决了它。

$certPubKeyResource = openssl_pkey_get_public(file_get_contents($cert));
$publicKey1 = trim(openssl_pkey_get_details($certPubKeyResource)['key']);
$private_key = openssl_pkey_get_private(file_get_contents($pkey));
$publicKey2 = trim(openssl_pkey_get_details($private_key)['key']);
echo (!strcmp($publicKey1, $publicKey2) ? 'OK' : 'FAIL') . PHP_EOL;

我希望有人会为此使用,因为我找不到这种特殊情况。

此外,如果有人会给出更深入的答案,也许会参考一些有关 PHP 中 SSL 的有用材料,我可以将其标记为正确答案而不是我的答案,因为我对全面了解这个主题非常感兴趣。

最新更新