2016-11-23 4 views
0

En https://github.com/luisgoncalves/xades4j/wiki/DefiningKeyingData il est dit que les clés et les certificats qui sont stockés dans la carte à puce, peuvent être utilisés pour signer des documents XML. bibliothèque native est mentionné dans l'exemple de code:Que devrait être dans la bibliothèque native PKCS11 compatible Xades4J?

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

Mais ce qui devrait être dans cette bibliothèque native, est-ce pot dll ou Java, quelles fonctions la bibliothèque doit exporter? J'ai essayé d'utiliser les bibliothèques pkcs11wrapper-1.2.18.jar et pkcs11wrapper.dll des distributions de paquets de signature numérique de mon pays, mais les exceptions ont été jetées:

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 

La trace d'exception similaire est généré également dans les cas où je fournir un chemin ou un chemin vide vers un fichier de bibliothèque inexistant.

Que devrait être dans la bibliothèque native pour l'utiliser à partir de Xades4J? Cette bibliothèque native devrait-elle supporter une interface universellement acceptée? Peut-être Xades4J est approprié uniquement pour les cartes à puce qui sont émises par le gouvernement de l'Espagne?

Répondre

2

C'est le pilote fourni par le fournisseur de la carte. Pour utiliser votre carte à puce, vous devez installer un logiciel. Ce logiciel (normalement) a une belle interface mais il installe aussi des pilotes (dll pour Windows, donc pour unix).

revenir à xades4j:

Ainsi, "chemin/vers/native/lib" est correct ...

En xades4j, voir les classes de test:

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

in this class Et il est utilisé here

Par ailleurs, pas xades4j, mais interessing, pour la carte estonienne, see this:

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

Voir aussi ceci: Signing a PDF with an eID using PKCS#11 and iText

1

Vous avez besoin d'une sorte -appelé le pilote PKCS # 11 pour votre appareil. Il s'agit d'une DLL en mode utilisateur (sous Windows) ou .so sous Linux, Android et macOS (sur iOS, il n'y a pas de modules partagés, donc la prise en charge de PKCS # 11 doit être compilée dans l'application).