【发布时间】:2011-03-14 23:06:42
【问题描述】:
如何在 Linux 服务器上运行的 PHP 应用程序中使用符合 PKCS#11 的 HSM(例如 SafeNet iKey 2032 [USB] 或 Aladdin eToken PRO [USB])中的密钥材料?
【问题讨论】:
如何在 Linux 服务器上运行的 PHP 应用程序中使用符合 PKCS#11 的 HSM(例如 SafeNet iKey 2032 [USB] 或 Aladdin eToken PRO [USB])中的密钥材料?
【问题讨论】:
我假设您询问的是用户使用他们的令牌来生成签名。签名是在客户端生成的,即在浏览器中。您的解决方案在 linux/php 上这一事实并不重要。
您必须添加一个称为签名者的软件组件,它将读取证书并生成签名。
现有的开源签名者是用 java 编写的,原因是 java applet 仍然是最可用的客户端技术。
【讨论】:
我没有看到,粗略的搜索也没有找到,用于 PHP 的 PCKS#11 胶水库。可能不是您要找的答案。 (:如果你比我有更好的搜索功能,请更新此线程。
我认为您最好的选择是编写一个调用 PKCS#11 并访问 HSM 的 C 程序,然后从您的 PHP 应用程序中将其作为外部二进制文件调用。即使出现了针对 PHP 的 PKCS#11 包装器,这种方法也会为您提供可用于 C 代码的完整 API,而不必使用包装器的作者来满足他们自己的要求所需的任何东西。 PKCS#11 是一个大型 API,包装器的实现通常不完整。
【讨论】:
您需要查看来自 OpenSC 项目的 pkcs11-helper。如果您尝试直接从 PHP 访问 PKCS#11 模块,这将是一个困难的方法。
【讨论】:
您应该使用 php-pkcs11,它允许将您的私钥保存到基于 Oasis 组织的 PKCS11 标准的 HSM(硬件库)中。见:https://github.com/gamringer/php-pkcs11
您的 HSM 可以是 U 盘、TPM 或智能卡。
【讨论】: