После установки BouncyCastle проблемы установки

Я пытаюсь добавить BouncyCastle в качестве поставщика безопасности в Windows XP Pro, чтобы я мог использовать его для добавления некоторых сертификатов в приложение для Android в соответствии с инструкциями здесь. К сожалению, я не могу заставить его добавить поставщика.

Я:

  1. скачал провайдера в C:Program FilesJavajre6libext.
  2. добавил C:Program FilesJavajre6libextbcprov-jdk16-146.jar до %CLASSPATH%.
  3. добавил 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.