函数名称:openssl_cms_sign()
适用版本:PHP 5 >= 5.4.0, PHP 7
函数说明:openssl_cms_sign() 函数用于创建一个 CMS (Cryptographic Message Syntax) 签名。
语法:openssl_cms_sign(string $input, string &$output, mixed $signcert, mixed $privkey, array $headers [, int $flags = 0])
参数:
- $input:要签名的输入数据,可以是字符串或文件路径。
- &$output:签名结果的输出变量。
- $signcert:用于签名的证书,可以是字符串或 X.509 证书资源。
- $privkey:用于签名的私钥,可以是字符串或私钥资源。
- $headers:签名时添加的头部信息,是一个包含键值对的数组。
- $flags:可选参数,用于设置签名的行为标志。
返回值:成功时返回 TRUE,失败时返回 FALSE。
示例:
// 创建一个 CMS 签名
$input = "This is the input data to be signed";
$output = null;
$signcert = file_get_contents('signcert.pem');
$privkey = openssl_pkey_get_private('privatekey.pem');
$headers = array(
'Content-Type' => 'text/plain',
'Date' => '2022-01-01',
);
if (openssl_cms_sign($input, $output, $signcert, $privkey, $headers)) {
echo "CMS signature created successfully.\n";
file_put_contents('signed_data.cms', $output);
} else {
echo "Failed to create CMS signature.\n";
}
// 验证 CMS 签名
$cmsdata = file_get_contents('signed_data.cms');
$verifycert = file_get_contents('verifycert.pem');
if (openssl_cms_verify($cmsdata, CMS_NOINTERN | CMS_NOCERTS, $verifycert)) {
echo "CMS signature is valid.\n";
} else {
echo "CMS signature is invalid.\n";
}
以上示例中,首先使用 openssl_cms_sign() 函数创建一个 CMS 签名,将签名结果保存到文件 signed_data.cms 中。然后使用 openssl_cms_verify() 函数验证该 CMS 签名的有效性,使用的验证证书为 verifycert.pem。