在lib / java.security中缺少Sun PKCS#11提供程序

时间:2017-02-17 11:12:18

标签: java keystore

我正在尝试配置使用带有java keytool的HSM,我需要" security.provider.7 = sun.security.pkcs11.SunPKCS11"使用它

security.provider.1=sun.security.provider.Sun
security.provider.2=sun.security.rsa.SunRsaSign
security.provider.3=sun.security.ec.SunEC
security.provider.4=com.sun.net.ssl.internal.ssl.Provider
security.provider.5=com.sun.crypto.provider.SunJCE
security.provider.6=sun.security.jgss.SunProvider
security.provider.7=com.sun.security.sasl.Provider
security.provider.8=org.jcp.xml.dsig.internal.dom.XMLDSigRI
security.provider.9=sun.security.smartcardio.SunPCSC
security.provider.10=sun.security.mscapi.SunMSCAPI

样品

 security.provider.1=sun.security.provider.Sun
    security.provider.2=sun.security.rsa.SunRsaSign
    security.provider.3=com.sun.net.ssl.internal.ssl.Provider
    security.provider.4=com.sun.crypto.provider.SunJCE
    security.provider.5=sun.security.jgss.SunProvider
    security.provider.6=com.sun.security.sasl.Provider
    security.provider.7=sun.security.pkcs11.SunPKCS11 C:\\Program
    Files\\Java\\jdk1.6.0_18\\jre\\lib\\security\\luna.cfg
    security.provider.8=org.jcp.xml.dsig.internal.dom.XMLDSigRI
    security.provider.9=sun.security.smartcardio.SunPCSC
    security.provider.10=sun.security.mscapi.SunMSCAPI 

我安装了java 1.8 JDK但仍未出现在java安全文件中。 我如何获得这些提供商?

3 个答案:

答案 0 :(得分:0)

docs表示类名后面应该遵循合适配置文件的路径(根据示例),或者应该手动实例化提供程序并将其添加到Security类。它似乎在您的文件中丢失。

答案 1 :(得分:0)

您必须自己添加它。 SunPKCS11 Provider类需要一个配置文件,该文件具有HSM的连接参数。

x配置文件中最重要的属性是library,它指向HSM制造商的dll / so文件。 name提供商的名称(可以是任何值)和slot令牌所在的插槽号或slotListIndex可用插槽列表中插槽的索引。

答案 2 :(得分:0)

我知道现在做出回应为时已晚,但对未来的开发者会有所帮助。

我遇到了同样的问题,以下是解决它的步骤。

步骤 1: *您需要更新位于 JRE ${JAVA_HOME}/jre/lib/security 下的 java.Security 文件以包含 SunPKCS11 提供程序。

security.provider.1=sun.security.provider.Sun
security.provider.2=sun.security.rsa.SunRsaSign
security.provider.3=com.sun.net.ssl.internal.ssl.Provider
security.provider.4=com.sun.crypto.provider.SunJCE
security.provider.5=sun.security.jgss.SunProvider
security.provider.6=com.sun.security.sasl.Provider
security.provider.7=org.jcp.xml.dsig.internal.dom.XMLDSigRI
security.provider.8=sun.security.smartcardio.SunPCSC
security.provider.9=sun.security.mscapi.SunMSCAPI
security.provider.10=sun.security.pkcs11.SunPKCS11 ${your_cfg_filePath}/pkcs11_sdkdata.cfg
security.provider.11=sun.security.pkcs11.SunPKCS11 /${your_cfg_filePath}/pkcs11.cfg

步骤 2: 确保您已更新给定路径上的 pkcs11.cfg 和 pkcs11_sdkdata.cfg 文件,其中包含您的 HSM 密钥和 nCiphers。其中包括 libcknfast.so 文件的路径。

步骤 3:如果我们将 java.security 文件放在 JRE 之外,那么我们需要提供以下 jvm args。**

 -Djava.security.properties==${java_security_filePath}/java.security\
 -DKEY_STORE=/${your_cfg_filePath}/pkcs11.cfg \
 -DKEY_LABEL={KEY_LABEL} \
 -DCRYPTO_LABEL={CRYPTO_LABEL} \
 -DKEY_STORE_SDK_DATA=${your_cfg_filepath}/pkcs11_sdkdata.cfg \
 -DKEY_LABEL_SDK_DATA={sdkData_Label}\
 -DCRYPTO_LABEL_SDK_DATA={crypto_sdkData_Label} 

在你的代码中你可以这样使用

Provider provider = Security.getProvider("SunPKCS11");
KeyStore keyStore = KeyStore.getInstance("PKCS11", provider);