2016-11-23 15 views
0

https://github.com/luisgoncalves/xades4j/wiki/DefiningKeyingData据说存储在智能卡中的密钥和证书可用于签署XML文档。本机库在代码示例中提到:Xades4J兼容的PKCS11本机库应该如何?

KeyingDataProvider kp = new PKCS11KeyStoreKeyingDataProvider(
       "path/to/native/lib", 
       "name", 
       new FirstCertificateSelector(), 
       null, null, false); 

但应该在这个机库什么,是DLL或Java的罐子,有什么功能,图书馆要出口?我试图用pkcs11wrapper-1.2.18.jar和pkcs11wrapper.dll库从我国数字签名程序包的分布,但异常被抛出:也产生了案件

Exception in thread "main" java.security.ProviderException: java.lang.reflect.InvocationTargetException 
    at xades4j.providers.impl.PKCS11KeyStoreKeyingDataProvider.createPkcs11Provider(PKCS11KeyStoreKeyingDataProvider.java:211) 
    at xades4j.providers.impl.PKCS11KeyStoreKeyingDataProvider.access$100(PKCS11KeyStoreKeyingDataProvider.java:52) 
    at xades4j.providers.impl.PKCS11KeyStoreKeyingDataProvider$1.getBuilder(PKCS11KeyStoreKeyingDataProvider.java:118) 
    at xades4j.providers.impl.KeyStoreKeyingDataProvider.ensureInitialized(KeyStoreKeyingDataProvider.java:175) 
    at xades4j.providers.impl.KeyStoreKeyingDataProvider.getSigningCertificateChain(KeyStoreKeyingDataProvider.java:189) 
    at xades4j.production.SignerBES.sign(SignerBES.java:151) 
    at xades4j.production.SignerBES.sign(SignerBES.java:122) 
    ... 
Caused by: java.lang.reflect.InvocationTargetException 
    at sun.reflect.NativeConstructorAccessorImpl.newInstance0(Native Method) 
    at sun.reflect.NativeConstructorAccessorImpl.newInstance(Unknown Source) 
    at sun.reflect.DelegatingConstructorAccessorImpl.newInstance(Unknown Source) 
    at java.lang.reflect.Constructor.newInstance(Unknown Source) 
    at xades4j.providers.impl.PKCS11KeyStoreKeyingDataProvider.createPkcs11Provider(PKCS11KeyStoreKeyingDataProvider.java:198) 
    ... 8 more 
Caused by: java.security.ProviderException: Error parsing configuration 
    at sun.security.pkcs11.Config.getConfig(Config.java:88) 
    at sun.security.pkcs11.SunPKCS11.<init>(SunPKCS11.java:129) 
    at sun.security.pkcs11.SunPKCS11.<init>(SunPKCS11.java:107) 
    ... 13 more 
Caused by: sun.security.pkcs11.ConfigurationException: Unexpected value Token['('], line 2 
    at sun.security.pkcs11.Config.excToken(Config.java:375) 
    at sun.security.pkcs11.Config.parseLine(Config.java:595) 
    at sun.security.pkcs11.Config.parseLibrary(Config.java:666) 
    at sun.security.pkcs11.Config.parse(Config.java:398) 
    at sun.security.pkcs11.Config.<init>(Config.java:220) 
    at sun.security.pkcs11.Config.getConfig(Config.java:84) 
    ... 15 more 

类似的异常跟踪,当我提供空路径或路径到不存在的库文件。

本地库应该在Xades4J中使用它?这个本地库是否应该支持一些普遍接受的接口。也许Xades4J仅适用于西班牙政府颁发的智能卡?

回答

2

这是来自卡提供商的驱动程序。 要使用您的智能卡,您需要安装一些软件。该软件(通常)有一些不错的界面,但它也安装驱动程序,(DLL的Windows,所以对于UNIX)。

再回到xades4j:

所以, “路径/到/本地/ lib目录” 是正确的......

在xades4j,看测试类别:

static protected String PTCC_PKCS11_LIB_PATH = "C:\\Windows\\System32\\pteidpkcs11.dll"; 

in this class它是用来here

顺便说一句,不xades4j,但interessing,爱沙尼亚语卡,see this

signatureToken = new PKCS11SignatureToken("/usr/local/lib/opensc-pkcs11.so", "22975".toCharArray(), 2); 

参见本:Signing a PDF with an eID using PKCS#11 and iText

1

你需要一个这样称为您的设备的PKCS#11驱动程序。它是用户模式DLL(在Windows上)或.so在Linux,Android和MacOS上(在iOS上没有共享模块,因此必须将PKCS#11支持编译到应用程序中)。