После установки BouncyCastle проблемы установки
Я пытаюсь добавить BouncyCastle в качестве поставщика безопасности в Windows XP Pro, чтобы я мог использовать его для добавления некоторых сертификатов в приложение для Android в соответствии с инструкциями здесь. К сожалению, я не могу заставить его добавить поставщика.
Я:
- скачал провайдера в
C:Program FilesJavajre6libext
. - добавил
C:Program FilesJavajre6libextbcprov-jdk16-146.jar
до%CLASSPATH%
. - добавил
security.provider.7=org.bouncycastle.jce.provider.BouncyCastleProvider
на java.безопасность (7 - следующий int в порядке).
Когда Я беги:
keytool -import -v -trustcacerts -alias 0 -file mycert.crt -keystore mystore.bks -storetype BKS -providerName org.bouncycastle.jce.provider.BouncyCastleProvider -storepass mypassword
Я получаю следующее сообщение об ошибке:
keytool error: java.lang.ClassNotFoundException: org.bouncycastle.jce.provider.BouncyCastleProvider
Я также попытался добавить его динамически:
import java.security.Provider;
import java.security.Security;
import java.util.Enumeration;
import org.bouncycastle.jce.provider.BouncyCastleProvider;
public class BouncyCastleMain {
public static void main(String[] args) throws Exception {
Security.addProvider(new BouncyCastleProvider()); // add it
try { // list them out
Provider p[] = Security.getProviders();
for (int i = 0; i < p.length; i++) {
System.out.println(p[i]);
for (Enumeration<?> e = p[i].keys(); e.hasMoreElements();)
System.out.println("t" + e.nextElement());
}
} catch (Exception e) {
System.out.println(e);
}
}
}
сначала я получил ошибку доступа при компиляции класса java, но изменил ее на предупреждение за предложение здесь. Теперь, когда я запускаю код, он показывает BouncyCastle в списке поставщиков, но он не остается после завершения программы.
Я уверен, что это должно быть выполнимо, но я в тупике, как получить этот парень установил достаточно долго, чтобы запустить keytool с его помощью. Можно ли запустить keytool через Java API, или может быть какой-то шаг, который я пропустил, который заставит провайдера придерживаться?
спасибо!
2 ответов
на требует имя поставщика ("BC", в данном случае), а не имя класса. Альтернативный вариант, -providerClass
, требует имя класса, и это полезно, когда поставщик не зарегистрирован в .
когда вы регистрируете провайдера "программно", это только временно. Ваша программа должна перерегистрировать своего провайдера каждый раз, когда она запускается. Вы не сможете использовать этот подход, если ваша цель - сделать BouncyCastle доступно для keytool
.
так как вы уже установили поставщика (помещая в архив lib/ext
и перечислить его в java.security
), С помощью -providerName BC
вариант, вероятно, самое простое решение. Кроме того, вы можете использовать .
кстати, вы не должны использовать CLASSPATH
переменные среды. Библиотеки в lib/ext
уже находятся на пути класса.
если после исправления параметров вы все равно получите NoSuchProviderException
(через -providerName
) или ClassNotFoundException
(через -providerClass
), убедитесь, что вы используете правильную копию keytool
. То есть при выполнении укажите полный путь keytool
, а не полагаться на свой PATH
переменной. Убедитесь, что путь относится к JRE, в который был установлен BouncyCastle. Это не редкость для системы, чтобы иметь несколько JREs и JDKs.
Если вы находитесь в Windows, не забудьте запустить командную строку в качестве администратора для ввода команд keytool.