【问题标题】:PKCS#7 signature in PHP using PKCS#11 without a CLI call在 PHP 中使用 PKCS#11 的 PKCS#7 签名,无需 CLI 调用
【发布时间】:2017-12-12 11:01:59
【问题描述】:

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

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

【问题讨论】:

    标签: php openssl pkcs#11 pkcs#7 opensc


    【解决方案1】:

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

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

    很遗憾,您需要使用 CLI。

    【讨论】:

    • 这是罕见的正确时刻之一,让我非常难过。不过,在接受这个答案之前,我会稍等片刻。也许有人想出了一个解决方案,我们都会因为犯错而感到高兴。
    • 一位朋友用 PHP 制作了一个 PDF 签名库,这是我们经常讨论的内容。我想说我错了,但我知道我不是:)
    • 我又看了几天,但无法推翻您的答案。公认。很遗憾。顺便说一句,PDF 签名和 XML 签名看起来很相似(就我们谈论 PAdES 和 XAdES 而言)。提到的图书馆是否有可能涵盖这两个主题?
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-03-21
    相关资源
    最近更新 更多