避免在创建 OpenSSL 签名时重新读取 PEM 文件


avoid re-reading pem file while creating openssl signatures

我正在使用类似于标准 openssl_pkcs7_sign() 示例的简单 php 代码来循环签署许多邮件http://php.net/manual/en/function.openssl-pkcs7-sign.php

问题是这段代码的 I/O 密集度太高。这将读取相同的证书并在循环中调用 openssl 函数。

我可以只读取内存中的证书并每次用于签名吗

这是脚本的相关部分

<?php
$headers =  array( "From: Ram <ram@netcore.co.in>", "Subject" => "Signed mail");

/* All the recipients who will get the mail */
$users = array ( 'ram@netcore.co.in' , 'aa@netcore.co.in','bb@netcore.co.in');
foreach ($users as $rcpt){
  $headers['To'] = $rcpt;
openssl_pkcs7_sign($rcpt."infile.txt",
                   "outfile.txt","file://noPassPrivatePublicKey.pem",
                     array("file://noPassPrivatePublicKey.pem", ""),
                     $headers);
  /* Now make an smtp connection and send the mail */
  send_mail_to_smtp($from,$rcpt,"outfile.txt");
}
?>

对邮件进行一次签名,然后将其发送给所有收件人。S/MIME 仅对邮件正文进行签名。因此,之后设置 To: 标头不会使签名无效。