0

有没有一种方法可以使用纯 PHP 使用符合 PKCS#11 的 HSM 设备(读卡器)创建 PKCS#7 (S/MIME) 签名,即无需显式 shell 命令调用,例如使用PHP OpenSSL库或其他胶水?

openssl我可以使用带有 PKCS#11 引擎的CLI 成功创建 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提供的密钥。我错过了什么吗?

4

1 回答 1

1

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

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

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

于 2017-12-16T06:52:54.957 回答