【问题标题】:How to initialize provider for pkcs11?如何为 pkcs11 初始化提供程序?
【发布时间】:2023-03-18 14:03:01
【问题描述】:

我想使用 nss 作为 pkcs11 的提供者,并且我正在使用 java、oracle JRE 和 ubuntu 64 位进行编码。我尝试了 2 种不同的包装器,iaik 和 SunPKCS11,但我都遇到了同样的问题。对于我的提供者,我首先尝试使用 libnss3.so 并且每次在实例化模块中遇到 IOException。然后我使用 libsoftokn3.so 并成功实例化了一个模块。但是现在我在初始化时遇到了这个异常:“CKR_ARGUMENTS_BAD”

这是我的代码,第一个使用 iaik,第二个使用 SunPKCS11

iaiak:

        Module pkcs11Module = Module.getInstance("libsoftokn.so");
        pkcs11Module.initialize(null);      //Here Throws the Excption:"iaik.pkcs.pkcs11.wrapper.PKCS11Exception: CKR_ARGUMENTS_BAD"
        Info info = pkcs11Module.getInfo();
        System.out.println(info);
        pkcs11Module.finalize(null);

SunPKCS11:

    String configName = "cfg";
    Provider p = new sun.security.pkcs11.SunPKCS11(configName);  //Here Throws the Excption:"sun.security.pkcs11.wrapper.PKCS11Exception: CKR_ARGUMENTS_BAD"
    Security.addProvider(p);

和文件“cfg”:

name = nss
library = /usr/lib/libsoftokn3.so

【问题讨论】:

    标签: java pkcs#11 nss iaik-jce


    【解决方案1】:

    您可以像这样指定目录,而不是指定库。

    Properties props = new Properties();
     props.put("name", "nss");
     props.put("nssLibraryDirectory", libDir);
     props.put("nssSecmodDirectory", dbDir);
     props.put("nssModule", "fips");
     props.put("nssDbMode", "readWrite");
    
     ByteArrayOutputStream out = new ByteArrayOutputStream();
     props.store(out, null);
     ByteArrayInputStream in = new ByteArrayInputStream(out.toByteArray());
    
     Provider ret = new sun.security.pkcs11.SunPKCS11(in);
    

    【讨论】:

      猜你喜欢
      • 2022-06-30
      • 2019-10-24
      • 1970-01-01
      • 2015-07-16
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2020-08-03
      • 1970-01-01
      相关资源
      最近更新 更多