2013-09-03 3 views
0

나는 nss를 pkcs11의 공급자로 사용하고 싶습니다. Java JRE와 우분투 64 비트를 코딩하고 있습니다. 나는 2 개의 다른 래퍼 인 iaik과 SunPKCS11을 시도했지만, 둘 다 똑같은 문제가있었습니다. 내 공급자를 위해, 나는 libnss3.so를 사용하고 모듈을 인스턴스화 할 때 IOException을받을 때마다 사용하려고했습니다. 그런 다음 libsoftokn3.so를 사용하여 모듈을 인스턴스화하는 데 성공했습니다. 하지만 지금은 초기화에이 예외에 직면 처음 SunPKCS11 프로pkcs11에 대한 공급자를 초기화하는 방법?

를 사용하여 두 번째를 iaik 및 사용 "CKR_ARGUMENTS_BAD"여기

내 코드입니다

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 

답변

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);