gpt4 book ai didi

php - 在 PHP 中调用 openssl_pkcs7_verify 时指定输入格式类型

转载 作者:可可西里 更新时间:2023-10-31 23:32:29 24 4
gpt4 key购买 nike

我有一个加密/PHP 问题,我希望有人能帮助我。我的问题是我有一个签名的 PKCS7 block ,我正试图在 PHP 中验证它。但是,当我运行以下 PHP 命令时:

openssl_pkcs7_verify($myfile, PKCS7_BINARY | PKCS7_NOVERIFY, $signers_file);

我收到以下错误:

PKCS7 routines:SMIME_read_PKCS7:no content type

如果我像这样使用 ruby​​ 来做:

p7container = OpenSSL::PKCS7.new(file_contents);
mystore = OpenSSL::X509::Store.new
p7container.verify(nil, store, nil, OpenSSL::PKCS7::NOVERIFY)

有效。

此外,如果我通过 OpenSSL 命令行运行它:

openssl smime -verify -inform der -in my_data_file -noverify

它也有效。但是,如果我运行以下命令:

openssl smime -verify -in my_data_file -noverify

这是相同的命令,但没有指定通知参数,它失败并显示与之前指定的相同错误消息,关于“无内容类型”,这让我似乎需要指定输入文件格式。我有什么想法可以通过 PHP 做到这一点吗?

预先感谢您的帮助,

最佳答案

我通过直接从 PHP 调用 openssl(使用 exec 函数)解决了这个问题。确保将 2>&1 添加到命令以将 stderr 重定向到 stdout,因为消息“验证成功”已发送到 stderr。

function verify($signedData, &$data = null) {
@mkdir("tmp");
$random = randomString(32);
$signedFile = "tmp/" . $random . ".pem";
$file = "tmp/" . $random . ".dat";
file_put_contents($signedFile, $signedData);
$output = exec("openssl smime -verify -in $signedFile -inform DER -noverify -out $file 2>&1");
if ($output == "Verification successful") {
$data = file_get_contents($file);
$result = true;
} else {
$result = false;
}
@unlink($signedFile);
@unlink($file);
return $result;
}

关于php - 在 PHP 中调用 openssl_pkcs7_verify 时指定输入格式类型,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14697702/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com