【发布时间】:2017-11-10 20:08:27
【问题描述】:
我设法让SunPKCS11 在 Windows 下与 Firefox ESR 52.0 一起工作,但我无法让它在 MacOS 中加载。我已经尝试了几种不同的配置并通过PKCS11 直接加载它,但没有任何效果,谁能给我一些指导?
pkcs11.cfg配置如下:
name = FirefoxKeyStore
library = "/Applications/Firefox.app/Contents/MacOS/fixed-for-java-runtime/libsoftokn3.dylib"
attributes = compatibility
nssArgs = "configdir='/Users/helloworld/Library/Application Support/Firefox/Profiles/wasdwasd.default-1453211557245' certPrefix='' keyPrefix='' secmod='secmod.db' flags='readOnly' "
slot = 2
然后在 Java 中,我尝试像这样加载它:
FileInputStream fis = new FileInputStream("pkcs11.cfg");
Provider provider = new SunPKCS11(fis);
Security.addProvider(provider);
但是这立即给了我以下错误:
sunpkcs11: Initializing PKCS#11 library /Applications/Firefox.app/Contents/MacOS/fixed-for-java-runtime/libsoftokn3.dylib
sunpkcs11: Multi-threaded initialization failed: sun.security.pkcs11.wrapper.PKCS11Exception: CKR_DEVICE_ERROR
Exception in thread "main" java.security.ProviderException: Initialization failed
at sun.security.pkcs11.SunPKCS11.<init>(SunPKCS11.java:376)
at sun.security.pkcs11.SunPKCS11.<init>(SunPKCS11.java:107)
您可能会问我为什么要从奇怪的文件夹中加载 .dylib,那是因为我在 MacOS 中使用 install_name_tool 将 @executable_path 更改为 @loader_path 以使库依赖项工作(因为我'我试图在 Eclipse 中而不是从 Firefox 本身中运行它)。
我也尝试使用这里建议的解决方案:How to finalize SunPKCS11 Provider after it is initialized?,但它也是不行的......我得到了同样的错误。
除了尝试这里提到的各种不同的配置设置:https://developer.mozilla.org/en-US/docs/Mozilla/Projects/NSS/PKCS11/Module_Specs#Softoken_Specific_Parameters
EDIT1
我尝试了@FaithReaper 提到的方法,但它仍然抛出同样的错误。我尝试将槽值更改为0、1 或-1,结果相同。加载底层PKCS11 对象时似乎存在问题。
Caused by: sun.security.pkcs11.wrapper.PKCS11Exception: CKR_DEVICE_ERROR
at sun.security.pkcs11.wrapper.PKCS11.C_Initialize(Native Method)
at sun.security.pkcs11.wrapper.PKCS11$SynchronizedPKCS11.C_Initialize(PKCS11.java:1545)
at sun.security.pkcs11.wrapper.PKCS11.getInstance(PKCS11.java:157)
at sun.security.pkcs11.SunPKCS11.<init>(SunPKCS11.java:330)
我不知道这是否有帮助,但我在 FireFox 配置文件上运行了 modutil 并正在转储此信息:
modutil -dbdir "/Users/eto/Library/Application Support/Firefox/Profiles/ew2g332o.default-1453211557245" -rawlist
library= name="NSS Internal PKCS #11 Module"
parameters="configdir=/Users/eto/Library/Application Support/Firefox/Profiles/ew2g332o.default-1453211557245 certPrefix= keyPrefix= secmod=secmod.db flags=readOnly "
NSS="Flags=internal,critical trustOrder=75 cipherOrder=100 slotParams=(1={slotFlags=[RSA,DSA,DH,RC2,RC4,DES,RANDOM,SHA1,MD5,MD2,SSL,TLS,AES,Camellia,SEED,SHA256,SHA512] askpw=any timeout=30})"
PKCS #11 模块列表
NSS 内部 PKCS #11 模块 uri: pkcs11:library-manufacturer=Mozilla%20Foundation;library-description=NSS%20Internal%20Crypto%20Services;library-version=3.33 插槽:2 个插槽状态:已加载
槽:NSS 内部加密服务令牌:NSS 通用加密 服务 URI: pkcs11:token=NSS%20Generic%20Crypto%20Services;manufacturer=Mozilla%20Foundation;serial=0000000000000000;model=NSS%203
槽:NSS 用户私钥和证书服务令牌:NSS 证书数据库 uri: pkcs11:token=NSS%20Certificate%20DB;manufacturer=Mozilla%20Foundation;serial=0000000000000000;model=NSS%203
【问题讨论】:
标签: java macos firefox pkcs#11