我正在研究 PKI ( Public Key Infrastructure ) 中的数字证书。几乎所有与此相关的手册/页面都提供以下类似步骤。
- 获取主题身份 + 主题公钥(和/或加密消息散列与主题私钥)并构建证书。
- 使用 CA 的私钥签署证书
- 在目的地,使用 CA 的公钥验证证书
现在我可以在 php(使用 openssl 库)中找到方法来执行第一步和第二步,通过 openssl API 生成证书并对其签名(可选择生成签名散列并对其签名)。
但是第三步有问题,它们没有说明如何使用 CA 的公钥验证证书的指南或函数调用。
如果我遗漏了什么?
我检查的示例代码如下所示
$data = 'my data';
//create new private and public key
$req_key = openssl_pkey_new(array(
"private_key_bits" => 2048,
"private_key_type" => OPENSSL_KEYTYPE_RSA,
));
$dn = array(
"countryName" => "IN",
"stateOrProvinceName" => "Delhi",
"organizationName" => "example.net",
"organizationalUnitName" => "Security",
"commonName" => "example.net"
);
$req_csr = openssl_csr_new ($dn, $req_key);
$req_cert = openssl_csr_sign($req_csr, null, $req_key, 365);
openssl_x509_export ($req_cert, $out_cert);
echo $out_cert;
背景:我需要为某些应用程序实现基于 PKI 的数据共享/验证。它将涉及在源端加密然后发送到目的地的一些数据实体(数据实体将具有其公钥和私钥)。然后目的地解密并获得清晰的数据。但是这其中必然涉及到PKI,即数字签名+数字证书的实现。
最佳答案
此任务在 PHP 中不是很简单。事实上,PHP 并不是实现 CA 东西的好工具。它支持基本的 PKI 操作,仅此而已。我看到三个选项:
- X.509 只是 DER 编码的 ASN.1 结构。您可以使用 guiDumpASN-ng 检查它例如。 PHP 世界中也有一些 ASN.1 库。基本上,CA 签名在证书内。如果您能够提取它,您就可以自行验证数字签名。
http://php.net/manual/en/function.openssl-verify.php#98282
尝试使用类似openssl-x509-checkpurpose 的函数应该能够检查certificate chain .
尝试使用phpseclib - 查看验证 X.509 证书 -> validateSignature()。
希望对您有所帮助。
关于php - 如何通过CA的公钥验证数字证书,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/33386018/