我正在研究公钥基础设施中的数字证书。几乎所有关于这方面的手册/页面都遵循类似的步骤。
现在我能够找到方法在php(使用openssl lib)为第一和第二步,可以生成证书和签署它(可选地生成签名哈希和签署它太)通过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;
背景:我需要为一些应用实现基于公钥基础设施的数据共享/验证。它将涉及一些数据实体(数据实体将有其公钥和私钥)在源端加密,然后发送到目的地。然后目的地解密并获得清晰的数据。但整个必须涉及公钥基础设施,这意味着数字签名数字证书的实现。
不要搞砸自己实现证书验证的工作,而是寻找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";
}
其中所有trusted_root_cas。pem
,中级。pem
和endentity_cert.pem
可以是仅为执行上一个命令而创建的临时文件。
现在,如果您想知道openssl-verify
的功能,请执行man-verify
:
verify命令验证证书链。
在PHP中,这个任务并不简单。事实上,PHP并不是实现CA的好工具。它支持基本的PKI操作,但仅此而已。我看到三种选择:
http://php.net/manual/en/function.openssl-verify.php#98282
尝试使用openssl-x509-checkpurpose这样的函数来检查证书链。
尝试使用phpseclib-查看Validate X.509证书-
我希望这会对你有所帮助。
我的理解是公钥加密,私钥解密...有谁能帮我弄明白吗?
null null null 多谢!
通常情况下,访问远程服务器上的 Git 仓库要受到限制。你可能不希望任何人都能读取文件,或者至少不能改动文件吧。在这种情况下,进行有效的认证就是非常必要地。 你可能已经通过你所使用的浏览器了解了 “HTTPS” 协议,尽管它使用起来很简单,但是很多系统管理员还是会出于各种原因去选择使用更为普遍的 “SSH” 协议。在这种协议之下,当涉及到身份验证时,你就很可能需要 “SSH公钥”。 对于这种类型的
我想知道如何使用公钥来验证私钥。 “<代码> <模数> 这是一个字符串,我试图使用Python验证它的私钥(也是作为字符串提供的)。我知道发行人和观众需要做什么,但我不确定如何处理所有这些信息。 我看了一些peoples使用各种包的例子,但我似乎不知道pub_key、private_key和message是什么类型...请帮帮我...我希望学习
我需要用DSA公钥验证X509证书签名。我的证书文件x509.crt,我的DSA公钥在一个名为dsa_pub.key的文件中 我正试图为此使用openssl。我已经阅读了openssl验证文档,但在其中找不到任何有关DSA的参考。 当我运行以下命令时,我可以在证书中看到我的DSA公钥: 但是,在使用文件DSA_pub.key中的DSA公钥验证cert.crt时,我遇到了麻烦 如果您有任何建议,我将
问题内容: 我有一个外部服务,在定义的事件发生后会给我回电,并用其私钥签署他的请求。 我已经存储了如下公钥: 因此,我的工作是通过验证签名来检查请求的内容是否未更改。 这是我的算法: 但是目前,我的算法已停止在此消息的“ PublicKey publicKey = keyFactory.generatePublic(publicKeySpec)”步骤处: 那么,如何以java api接受的方式加载