如何检查 SSL 捆绑包和域证书是否由现有私钥生成
How to check if SSL bundle and domain certificates are made from existing private key
如果我有 pkey、csr(从 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 的有用材料的参考,我可以将其标记为正确答案而不是我的,因为我很想了解这个的全貌主题。
如果我有 pkey、csr(从 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 的有用材料的参考,我可以将其标记为正确答案而不是我的,因为我很想了解这个的全貌主题。