PHP中的PKCS#7签名使用PKCS#11而没有CLI调用

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了PHP中的PKCS#7签名使用PKCS#11而没有CLI调用相关的知识,希望对你有一定的参考价值。

有没有办法使用纯php创建符合PKCS#11的HSM设备(读卡器)的PKCS#7(S / MIME)签名,即没有明确的shell命令调用,例如,使用PHP OpenSSL库或其他一些胶水?

我可以使用CLI openssl和PKCS#11引擎成功创建PKCS#7签名,如下所示:

putenv('PIN='.$secret_card_pin);
shell_exec("export PIN; OPENSSL_CONF=openssl.cnf openssl smime -sign -engine pkcs11 -md sha1 -binary -in {$tmpFileIn} -out {$tmpFileOut} -outform der -keyform engine -inkey id_ed0007 -signer pubcert.pem");

我想清理这个,但似乎不可能使用纯PHP,因为据我所知,openssl_pkcs7_sign()函数只能与私钥文件一起使用,而不支持pkcs11-engine提供的密钥。我错过了什么吗?

答案

没有,虽然有许多语言的PKCS#11绑定,但没有一个用于PHP。

您需要这个,然后您可以构建一个PKCS#7并使用该库对其进行签名。

不幸的是,你不需要使用CLI。

以上是关于PHP中的PKCS#7签名使用PKCS#11而没有CLI调用的主要内容,如果未能解决你的问题,请参考以下文章

Pkcs11 ECDSA 签名返回 CKR_DATA_INVALID

如何将 PKCS7_sign 结果转换为 char * 或 std::string

使用 OpenSSL 从 SMIME 消息(pkcs7 签名)中提取公共证书

无法使用java中的pkcs#7和bouncyCastle签署zip文件

在 python 中获取 PKCS7 签名者链

如何使用 openssl 或任何其他在智能卡上签名的库创建 PKCS7 signedData 结构?