如何检查 SSL 捆绑包和域证书是否由现有私钥生成

How to check if SSL bundle and domain certificates are made from existing private key

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

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

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

我一开始也无法理解如何从这些资源中获取 public 密钥。显然 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 的有用材料的参考,我可以将其标记为正确答案而不是我的,因为我很想了解这个的全貌主题。