PHP OpenSSL openssl_pkcs7_verify()不起作用,即使shell的openssl正常工作

时间:2019-02-26 18:59:57

标签: php xml openssl php-openssl

我正在尝试使用PHP库中内置的OpenSSL来获取p7m签名文件(XML文件,尤其是那里的意大利人的fattura elettronica)的内容。我不需要检查签名/证书,仅需要内容。

我正在尝试使用openssl_pkcs7_verify()将其“翻译”:

UnhandledPromiseRejection

这是这样做的PHP行:

each

问题是$ result为-1,openssl_error_string()给了我这个错误:

$('.anchor').each((index, obj) => {
    var currentElementTop = $(obj).offset().top;

    var hash = $(obj).attr('id');
    if (currentElementTop < currentTop && currentTop < currentElementTop + $(obj).height() && currentHash!=hash){
        if(history.pushState) {
            history.pushState(null, null, '#'+hash);
        } else {
            location.hash = '#'+hash;
        }
        currentHash = hash
     }
});

不,我不能使用exec()或shell_exec()等。
我看到OpenSSL PHP库需要S / MIME而不是DER,所以我发现此函数将文件获取为S / MIME:

openssl smime -verify -noverify -in file.xml.p7m -inform DER -out file.xml

但是在使用openssl之前使用它是行不通的。
我该如何解决?预先感谢!

1 个答案:

答案 0 :(得分:1)

好的,我已经这样解决了:
首先,我必须使用

从文件中提取签名者的证书
openssl_pkcs7_verify($input, PKCS7_NOVERIFY | PKCS7_NOSIGS, $signer);

它将提取证书并将其保存在$ signer中。

那我用过

openssl_pkcs7_verify($input, PKCS7_NOVERIFY | PKCS7_NOSIGS, $signer, [], $signer, $output);

使用签名者的证书从$ output中的签名文件中提取内容。
当然,我仍然需要使用该函数(der2smime())将输入从DER转换为SMIME。
希望对您有帮助!