我正在使用pkcs7签署文档,一切正常,问题是验证标志的命令不起作用,总是返回false。我尝试将terminal命令用于文件并正常工作。
签署命令:
openssl_pkcs7_sign(
$tempdoc,
$tempsign,
$this->signature_data['signcert'],
array($this->signature_data['privkey'],
$this->signature_data['password']),
array(),
PKCS7_BINARY | PKCS7_DETACHED);
验证命令:
openssl_pkcs7_verify($tempsign, PKCS7_NOVERIFY)
终端命令:
openssl pkcs7 -inform DER -in signature.pkcs7 -print_certs -text
编辑1
我在我的代码中进行测试并发现我是否仅使用PKCS7_DETACHED或PKCS7_BINARY创建了我的符号验证,但是我们一起收到错误。为什么会这样?
答案 0 :(得分:3)
在PHP 7中,我可以重现您的问题。使用这两个标志,验证失败。
也许THIS URL可以帮到你。,这部分讨论它。
SMIME -sign“分离”“附加”内容同样如此 -binary和text-canonicalized without,并标志着。 SMIME -verify识别“分离”,但(在multi_split中)总是标准化两者 使用前的零件。对于非同步发送的内容(使用 -sign -binary或等效)这会更改已签名的内容,并验证失败。发送的规范内容(最初 规范或规范化的发件人)确实验证,同样如此 输出而不确定发件人是否更改了它。
在docs中,您可以读到解析器并不那么聪明:
<强> BUGS 强>
MIME解析器不是很聪明:它似乎处理大多数消息 我已经抛出它,但它可能会扼杀其他人。
希望它有所帮助!