PHP Conference Japan 2024

openssl_pkcs7_verify

(PHP 4 >= 4.0.6, PHP 5, PHP 7, PHP 8)

openssl_pkcs7_verify验证 S/MIME 签名消息的签名

描述

openssl_pkcs7_verify(
    字符串 $input_filename,
    整数 $flags,
    ?字符串 $signers_certificates_filename = null,
    数组 $ca_info = [],
    ?字符串 $untrusted_certificates_filename = null,
    ?字符串 $content = null,
    ?字符串 $output_filename = null
): 布尔值|整数

openssl_pkcs7_verify() 读取给定文件中包含的 S/MIME 消息并检查数字签名。

参数

input_filename

消息路径。

flags

flags 可用于影响签名的验证方式 - 请参阅 PKCS7 常量 以获取更多信息。

signers_certificates_filename

如果指定了 signers_certificates_filename,则它应该是一个字符串,其中包含一个文件的名称,签名者证书将存储在该文件中,格式为 PEM

ca_info

如果指定了 ca_info,则它应该包含有关在验证过程中要使用的受信任 CA 证书的信息 - 请参阅 证书验证 以获取有关此参数的更多信息。

untrusted_certificates_filename

如果指定了 untrusted_certificates_filename,则它是包含一组证书的文件的名称,这些证书用作不受信任的 CA。

content

您可以使用 content 指定一个文件名,该文件将填充已验证的数据,但签名信息已被去除。

output_filename

返回值

如果签名已验证,则返回 true,如果签名不正确(消息已被篡改或签名证书无效),则返回 false,或者在发生错误时返回 -1。

变更日志

版本 描述
8.0.0 signers_certificates_filenameuntrusted_certificates_filenamecontentoutput_filename 现在可以为 null。
7.2.0 添加了 output_filename 参数。

注释

注意: 如 RFC 2045 中所述,input_filename 参数中的行长度不得超过 76 个字符。

添加注释

用户贡献的注释 1 条注释

11
reg1barclay at REMOVETHIS dot live dot it
6 年前
要使用 openssl_pkcs7_verify() 验证 .p7m 文件,您必须将其转换为 S/MIME 格式。例如…
<?php
function der2smime($file)
{
$to=<<<TXT
MIME-Version: 1.0
Content-Disposition: attachment; filename="smime.p7m"
Content-Type: application/x-pkcs7-mime; smime-type=signed-data; name="smime.p7m"
Content-Transfer-Encoding: base64
\n
TXT;
$from=file_get_contents($file);
$to.=chunk_split(base64_encode($from));
return
file_put_contents($file,$to);
}
?>
To Top