Php 如何利用CA公钥验证数字证书

Php 如何利用CA公钥验证数字证书,php,openssl,pki,digital-certificate,Php,Openssl,Pki,Digital Certificate,我正在研究PKI公钥基础设施中的数字证书。几乎所有与此相关的手册/页面都给出了以下类似步骤 获取受试者身份+受试者公钥和/或受试者私钥加密的消息哈希,并构建证书。 使用CA的私钥签署证书 在目标位置,使用CA的公钥验证证书 现在我能够在php中找到方法,使用openssl库进行第一步和第二步,该步骤可以生成证书并对其进行签名,还可以选择生成签名哈希并通过openssl API对其进行签名 但第三步的问题是,它们没有显示如何使用CA公钥验证证书的指导线或函数调用 如果我错过了什么 我检查的示例代码

我正在研究PKI公钥基础设施中的数字证书。几乎所有与此相关的手册/页面都给出了以下类似步骤

获取受试者身份+受试者公钥和/或受试者私钥加密的消息哈希,并构建证书。 使用CA的私钥签署证书 在目标位置,使用CA的公钥验证证书 现在我能够在php中找到方法,使用openssl库进行第一步和第二步,该步骤可以生成证书并对其进行签名,还可以选择生成签名哈希并通过openssl API对其进行签名

但第三步的问题是,它们没有显示如何使用CA公钥验证证书的指导线或函数调用

如果我错过了什么

我检查的示例代码如下所示

$data=‘我的数据’; //创建新的私钥和公钥 $req\u key=openssl\u pkey\u newarray 私钥位=>2048, 私有密钥类型=>OPENSSL密钥类型RSA, ; $dn=数组 countryName=>在, stateOrProvinceName=>德里, organizationName=>example.net, organizationalUnitName=>安全性, commonName=>example.net ; $req\u csr=openssl\u csr\u新$dn,$req\u密钥; $req_cert=openssl_csr_sign$req_csr,null,$req_key,365; openssl_x509_导出$req_证书,$out_证书; echo$out\u证书;
背景:我需要为一些应用程序实现基于PKI的数据共享/验证。这将涉及一些数据实体,数据实体将在源端对其公钥和私钥进行加密,然后发送到目标。然后目标解密并获得清晰的数据。但是,整个过程必须涉及PKI,这意味着数字签名+数字证书的实现以及。这项任务在PHP中并不简单。事实上,PHP并不是实现CA的好工具。它支持基本的PKI操作,但仅此而已。我认为有三种选择:

X.509只是DER编码的ASN.1结构。例如,您可以使用。PHP世界中还有一些ASN.1库。基本上,CA签名在证书中。如果您能够提取它,那么您可以自己验证数字签名。 尝试使用这样的功能应该能够检查

尝试使用-查看验证X.509证书->验证签名

我希望它能对您有所帮助。

不要自己去实现证书验证,而是寻找CPV认证路径验证算法的实现,该算法包括认证链中需要执行的所有验证,其中证书签名验证只是其中之一

现在,我一直在寻找一个PHP API来执行CPV,但我没有找到,所以我求助于从PHP执行以下外部OpenSSL命令:

exec("openssl verify -CAfile trusted_root_cas.pem -untrusted intermediate_cas.pem endentity_cert.pem", $output, $return_var);
if ($return_var == 0) {
    echo "Certification path validation completed successfully";
} else {
    echo "Certification path validation completed with errors";
}
其中,所有受信任的_root_cas.pem、intermediate_cas.pem和endentity_cert.pem都可以是仅为执行上一个命令而创建的临时文件

现在,如果您想知道openssl verify的功能,请执行man verify:

verify命令验证证书链


你能澄清一下你想做什么吗?从您现在的问题来看,听起来您将密钥交换的概念与证书验证混为一谈。证书验证是另一个问题。验证完全取决于可信根证书颁发机构的概念,它建立了一个从服务器证书到可信颁发机构的验证链。@TechnikEmpire,我为这个问题添加了一些背景知识