Java Sun pkcs# 11提供程序,HSM令牌LOGIN REQUIRED标志未设置,别名列表为空



我是Pavel,主要是一名Java开发人员。我的问题是:

我试图使用Java Sun pkcs# 11提供程序列出HSM插槽中的别名,我得到一个空列表。我在Windows XP/Server平台上用Java 6和7尝试过。我下载了Sun pkcs# 11源代码并对它们进行了检查,打开调试开关,执行了其他技巧,所以最后我发现别名映射是空的,因为令牌没有设置LOGIN_REQUIRED标志。在Sun pkcs# 11实现中有一个IF结构,所以当这个标志没有设置时,即使PIN字节被提供给密钥库,也没有C_Login调用!我觉得很奇怪!有人可以解释我,如果它是一个错误在pkcs# 11提供程序的太阳实现或有一个一般的想法背后?无论如何,当我"破解"原始来源时,如果提供了PIN,无论LOGIN_REQUIRED标志是否设置,它都会对令牌进行登录操作,并且我从令牌中获得别名!

这是正确的,Sun pkcs# 11提供程序在查找别名时尝试查找所有公开可见的私钥(无需登录)。之后,它将尝试为私钥找到一个可行的证书链(首先是pkcs# 11 ID,然后是X509发行者)。

我不知道为什么,但在我看来,pkcs# 11提供程序是在Sparc T1处理器(Niagara)推出的同时出现的,Sparc T1处理器包含一个加密处理器。Sun/Oracle从来没有提供过任何兼容性数据——我猜想他们的主要关注点是让T1在Java中工作——不过这只是猜测。唯一能确定的方法就是去问。

如果你想有一个更好的供应商,你可以看看IAIK软件(其较低级别,开源,实现被Sun/Oracle使用)。它们确实提供了支持和兼容性声明。然而,这是一种商业产品。

或者您可以让您的补丁被接受,我当然会对选项感兴趣,以便在使用pkcs# 11 FindObjects查找可用私钥之前登录。如果你提交一个bug报告,我肯定会投赞成票。

最新更新