如何检查SSL捆绑包和域证书是否来自现有私钥

时间:2015-04-28 15:41:59

标签: php ssl ssl-certificate

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

1 个答案:

答案 0 :(得分:0)

@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的有用资料,我可以将其标记为正确的答案而不是我的答案,因为我非常有兴趣全面了解这个主题。