используя сертификат в https - PullRequest
3 голосов
/ 24 октября 2010

Я пишу приложение для Android.Как я могу использовать сертификат в соединении https при инициализации сертификата из файла каталога, а не из пакетов?

Когда у меня есть файл пакетов с паролем, этот код работает:

    KeyStore keyStore = KeyStore.getInstance("PKCS12");
    keyStore.load(certificateIs, pass.toCharArray());
    KeyManagerFactory kmf = KeyManagerFactory.getInstance(KeyManagerFactory.getDefaultAlgorithm());
    kmf.init(keyStore, pass.toCharArray());
    SSLContext sc = SSLContext.getInstance("TLS");
    sc.init(kmf.getKeyManagers(), trustAllCerts, new java.security.SecureRandom());
    HttpsURLConnection.setDefaultSSLSocketFactory(sc.getSocketFactory());

У меня есть сертификат, инициализированный из файла der:

    CertificateFactory cf = CertificateFactory.getInstance("X.509");
    X509Certificate certificate = (X509Certificate) cf.generateCertificate(certBytes);

Я не знаю, как использовать этот сертификат через https соединение.

1 Ответ

1 голос
/ 24 октября 2010

Вы, кажется, говорите об аутентификации по сертификату клиента (где ваше устройство Android является клиентом).

Во-первых, вам нужно, чтобы клиент имел закрытый ключ, соответствующий открытому ключу в сертификате, который вы используете.пытаясь использовать (вот и весь смысл, иначе ничего бы не аутентифицировалось).PKCS # 12 является одним из обычных форматов для хранения закрытого ключа и сертификата.Если у вас есть только сертификат в файле der , у вас, вероятно, не будет закрытого ключа, поэтому он не будет работать.Из вашего вопроса не совсем понятно, что вы делаете с вашей переменной certificate относительно KeyManagerFactory (если у вас есть пользовательский X509KeyManager, он должен вернуть закрытый ключ в своем методе getPrivateKey, иначе он выиграетне работает).

Во-вторых, проверка подлинности клиента-сертификата всегда инициируется сервером, поэтому вам необходимо настроить сервер соответствующим образом (похоже, это уже имеет место, если ваш тест основан нана хранилище ключей PKCS # 12 работает).

...