我通过提供的acos-pkcs11.dll库(Java 32bit以便在Windows上使用SunPKCS11)在Windows上使用Java SunPKCS11实现ACS CryptoMate64令牌的工作实现。
ACS CryptoMate64是一个USB令牌,SunPKCS11可在Windows计算机上本地访问。 Linux没有PKCS11库(没有.so文件或类似的东西)。
因为我正在使用Linux机器来获得某些功能,所以我想问一下如何通过USB连接到不同计算机上的网络来访问PCKS11设备。
这个想法如下: Linux:想要使用USB CryptoMate64但没有库的应用程序。 Windows:使用acos-pkcs11.dll连接USB CryptoMate64。 应用程序使用的是在Windows计算机上连接的CryptoMate64。
是否可以在Linux机器上配置Java SunPKCS11以通过网络远程使用它? 或者它是制造商提供的PKCS11模块的一部分?
我知道HSM能够通过PKCS11通过网络进行通信,所以我的问题是询问是否也可以通过USB cryptotoken进行通信。
欢迎提出各种建议或想法。
答案 0 :(得分:0)
基于网络的HSM常用的方法是让PKCS#11库为方法调用执行Marshalling,并使用传输协议通过网络发送此数据。此应用程序传输协议通常是为TCP套接字定义的。由于数据的性质,这种传输连接应该是安全的。它应该至少提供客户和服务器身份验证并保持机密性,真实性和完整性。可以使用具有客户端身份验证的TLS,但协议不能依赖DNS命名系统来保证其安全性。
现在,包含HSM的联网HSM或系统应包含对数据执行非编组的服务,执行预处理并将其发送到HSM。虽然不是必需的,但这可以通过使用安全的非Marshalled数据调用非联网的PKCS#11库来实现。
另一种选择是创建自己的Java安全提供程序。该提供程序可以调用服务器上的代码并在那里调用PCKS#11库。实现Java安全提供程序也不容易,并且要求您使用Oracle提供的私钥证书(对于正常的Java SE安装)对提供程序进行签名。
正如您所理解的那样,通过网络使用HSM不应掉以轻心,并且应该成为HSM安全性的一部分。你可以尝试自己创建这样一个系统,但你不应该欺骗自己;联网的HSM很可能不像本地使用的那样安全。一般情况下,如果HSM供应商无法提供服务,您可能最好再购买另一个USB令牌。或者您当然可以购买网络HSM。