PHP openssl_pkcs7_verify不工作

时间:2017-07-02 19:15:08

标签: php pkcs#7 php-openssl

我正在使用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创建了我的符号验证,但是我们一起收到错误。为什么会这样?

1 个答案:

答案 0 :(得分:3)

在PHP 7中,我可以重现您的问题。使用这两个标志,验证失败。

也许THIS URL可以帮到你。,这部分讨论它。

  

SMIME -sign“分离”“附加”内容同样如此   -binary和text-canonicalized without,并标志着。 SMIME -verify识别“分离”,但(在multi_split中)总是标准化两者   使用前的零件。对于非同步发送的内容(使用   -sign -binary或等效)这会更改已签名的内容,并验证失败。发送的规范内容(最初   规范或规范化的发件人)确实验证,同样如此   输出而不确定发件人是否更改了它。

docs中,您可以读到解析器并不那么聪明:

  

<强> BUGS

     

MIME解析器不是很聪明:它似乎处理大多数消息   我已经抛出它,但它可能会扼杀其他人。

希望它有所帮助!