【发布时间】:2016-05-03 17:42:22
【问题描述】:
这对我来说是一个全新的概念,所以我在黑暗中拍摄。
要创建签名文件,请制作一个 PKCS #7 分离签名 清单文件,使用与您的签名关联的私钥 证书。包括 WWDR 中间证书作为 签名。您可以从 Apple 的网站下载此证书。 将签名写入 pass 顶层的文件签名 包裹。包括使用通行证签署的日期和时间 S/MIME 签名时间属性。
我的理解:
要创建签名文件,请对清单文件进行 PKCS #7 分离签名
我将使用 openssl_pkcs7_sign 函数并使用标志 PKCS7_DETACHED。
使用与您的签名证书关联的私钥。
我将使用我的 ssl cert.pem 文件的位置作为signcert 参数,并将cert.key 文件的位置作为privkey 参数。
将 WWDR 中间证书作为签名的一部分。
我将在 extracerts 参数中包含 WWDR 证书的路径
包括使用 S/MIME 签名时间属性签署通行证的日期和时间。
我将包含一个数组,其键为 signing-time,2015-05-03 10:40:00 的值类似于 headers 参数。
我的代码:
private function createSignature($dir)
{
$cert = '/etc/ssl/cert.pem';
$key = '/etc/ssl/private/cert.key';
$wwdr = '/location/of/apple/wwdr/cert.cer';
$headers = [
'signing-time' => (new DateTime())->format('o-m-d H:i:s'),
];
return openssl_pkcs7_sign("$dir/manifest.json", "$dir/signature", $cert, $key, $headers, PKCS7_DETACHED, $wwdr);
}
其他问题:
我注意到在openssl_pkcs7_sign 函数的文档示例中,文件的一些 位置以file:// 为前缀。这是为什么呢?
【问题讨论】: