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 签名)中提取公共证书