0

我们正在开发一个新的安全项目。我们希望同时启用服务器端和客户端身份验证。为了允许客户端身份验证,我们希望创建可以放入“读卡器”并使用指纹解锁的卡片。

现在,目前我们有几个 A 公司的读卡器,为了让我们的客户端(java - 不是浏览器,而是我们自己的一个小软件)使用该卡上的证书,java 程序使用对dll 允许我们连接到它。

我正在寻找一种方法来使这种与读卡器的连接通用,以防我们将读卡器更改为 B 公司。

我的问题是:

  1. 有没有更好的方法来访问证书的读卡器?例如,使用纯 java 代码(或纯 JDK 代码)并仍然以某种方式检索证书和所需的所有其他操作。

  2. 鉴于没有纯 Java 方法可以做到这一点,是否有一种通用方法可以帮助我不依赖特定的 .dll?

  3. 你认为这有多安全?也许,在没有读卡器的情况下进行客户端身份验证是否有同样安全的方法?

4

2 回答 2

2

Oracle JRE 附带Sun PKCS#11 提供程序,它允许您插入实现 PKCS#11 API 的 DLL。

就 Java 而言,这绝对是“标准”方式。您的智能卡可以作为KeyStore实例加载。如果您的密钥无法从智能卡中提取,PrivateKey则仍将创建 a 对象以在您的应用程序签名/解密中使用,但您将无法提取私有指数(假设此处为 RSA):它将操作委托给卡,按设计。

(我过去曾在 Linux 机器上使用 OpenSC/OpenCT 成功尝试过。我相信 PKCS#11 在 Windows 中更为罕见,但一些智能卡提供商可能仍会为其提供接口。)

这有多安全取决于您使用的 PKCS#11 实现。调整您自己的 DLL 以使其适合 PKCS#11 肯定需要一些努力和审查,然后才能称其为“安全”。

于 2012-05-16T01:42:58.163 回答
0

一种选择是位于读卡器设备驱动程序和 Java 应用程序之间的中间件。这样,您的应用程序仅与中间件库交互,您无需关心直接访问 DLL 或您正在使用的硬件类型,甚至是 sun PKCS11 提供程序。如果安装了新的读卡器,中间件将与驱动器交互。您可以访问您的证书,但如果生物特征数据(指纹)存储在智能卡上(而不是在您的服务器上),中间件可以帮助访问它。制造这种中间件的公司之一是 Active Identity。

于 2012-05-17T17:18:57.040 回答