Использование пользовательского провайдера PKCS11 с jarsigner

Я написал собственный провайдер PKCS11, и теперь я хочу использовать его через jarsigner.

Моя команда:

jarsigner -verbose -keystore NONE -storetype PKCS11 -providerClass my.provider.class jar_to_sign_on.jar "key_name"

И я получаю следующую ошибку:

jarsigner error: java.lang.ClassNotFoundException: my.provider.class

Это связано с тем, что jarsinger не может найти реализацию .jar моего провайдера.

Когда я помещаю mt .jar в ...\Java\jdk1.8.0_31\jre\lib\ext, он работает отлично.

Мой вопрос: есть ли способ динамически установить мой провайдер .jar? (Например, -providerPath в keytool)


person Saar peer    schedule 19.07.2016    source источник


Ответы (2)


jarsigner имеет параметр -J, который позволяет передать его значение прямо в поддерживающий процесс Java. Проблема в том, что он не допускает пробелов, поэтому вам нужны две такие опции для передачи пути к классам. Что-то вроде этого должно работать:

jarsigner ... -J-cp -Jmylib.jar

person Andrew Lygin    schedule 19.07.2016
comment
Привет, 10x. Я получаю: Ошибка: не удалось найти или загрузить основной класс cp - person Saar peer; 19.07.2016
comment
Извините, правильная версия должна быть jarsigner ... -J-cp -Jmylib.jar, чтобы команда java знала, что cp — это опция, а не имя класса. - person Andrew Lygin; 19.07.2016
comment
Nice: теперь я получаю следующее: Ошибка: не удалось найти или загрузить основной класс sun.security.tools.jarsigner.Main - person Saar peer; 19.07.2016
comment
По крайней мере вариант работает. К сожалению, он переопределяет параметры, передаваемые jarsigner в java, но это можно исправить. Какой JDK вы используете? Я думаю, вам нужно добавить путь к JDK от tools.jar до -Jmylib.jar, который содержит отсутствующий класс. В моей системе это будет -Jmylib.jar:/Library/Java/JavaVirtualMachines/jdk1.8.0/Contents/Home/lib/tools.jar - person Andrew Lygin; 19.07.2016
comment
Я нашел разумное решение: я добавил -J-Djava.ext.dirs=my_jar_lib, и он работает. Недостатком является то, что мне нужно скопировать одну банку из ...\Java\jdk1.8.0_31\jre\lib\ext в мою папку .jar. - person Saar peer; 19.07.2016

Java classpath позволяет указать несколько файлов JAR, разделенных знаком ':'. В этом случае вы можете использовать

-J-cp -J./mylib.jar:‹путь к tools.jar›tools.jar

person Dymanuel    schedule 27.09.2020