2016-11-23 12 views
0

В https://github.com/luisgoncalves/xades4j/wiki/DefiningKeyingData говорится, что ключи и сертификаты, хранящиеся на смарт-карте, могут использоваться для подписи документов XML. Native библиотека упоминается в примере коды:Что должно быть в родной библиотеке PKCS11, совместимой с Xades4J?

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

Но что должно быть в этой родной библиотеке, это дллы или 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

Вы должны так -called PKCS # 11 для вашего устройства. Это пользовательский режим DLL (в Windows) или .so на Linux, Android и macOS (на iOS нет общих модулей, поэтому поддержка PKCS # 11 должна быть скомпилирована в приложение).

 Смежные вопросы

  • Нет связанных вопросов^_^