PHP 中的 PKCS#7 签名使用 PKCS#11,无需 CLI 调用

PKCS#7 signature in PHP using PKCS#11 without a CLI call

有没有办法使用纯 PHP 的 PKCS#11 兼容 HSM 设备(卡 reader)创建 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() 函数只能与私钥文件一起使用,而不支持 [=13] =] 提供的密钥。我错过了什么吗?

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

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

很遗憾,您需要使用 CLI。