php - 如何通过CA的公钥验证数字证书

标签 php openssl pki digital-certificate

我正在研究 PKI ( Public Key Infrastructure ) 中的数字证书。几乎所有与此相关的手册/页面都提供以下类似步骤。

  1. 获取主题身份 + 主题公钥(和/或加密消息散列与主题私钥)并构建证书。
  2. 使用 CA 的私钥签署证书
  3. 在目的地,使用 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 操作,仅此而已。我看到三个选项:

  1. X.509 只是 DER 编码的 ASN.1 结构。您可以使用 guiDumpASN-ng 检查它例如。 PHP 世界中也有一些 ASN.1 库。基本上,CA 签名在证书内。如果您能够提取它,您就可以自行验证数字签名。

http://php.net/manual/en/function.openssl-verify.php#98282

  1. 尝试使用类似openssl-x509-checkpurpose 的函数应该能够检查certificate chain .

  2. 尝试使用phpseclib - 查看验证 X.509 证书 -> validateSignature()。

希望对您有所帮助。

关于php - 如何通过CA的公钥验证数字证书,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/33386018/

相关文章:

Java 相当于 OpenSSL s_client 命令

tomcat - 在Spring Security中实现PKI认证

java - 无法使用 IAIK PKCS11 包装器加载 PKCS11 驱动程序

php - jQuery Tablesorter 不适用于使用 php 生成的表

php - 在php中打开com端口

Php 从 URL 获取哈希值

openssl - 如何配置 openssl 的默认后端引擎?

c++ - 如何创建 boost ssl iostream?

c - 无法将 pkcs#11 模块添加到 secmod 数据库

php - 使用 Zend_Form_Element_Select 时访问 InArray 验证器的自定义错误消息