Извлеките информацию о цепочке сертификатов из подписанного сертификата X509 (ответ CSR) в Android / BouncyCastle

StackOverflow https://stackoverflow.com//questions/12699853

Вопрос

Могу ли я извлечь информацию о цепочке сертификатов из клиентского сертификата X509, подписанного центром сертификации, используя библиотеки Android или BouncyCastle?

У меня есть клиент Android, который получает сертификат X509, подписанный центром сертификации, с доверенного сервера.Я хочу сохранить подписанный сертификат клиента и мой закрытый ключ в файле PKCS12 (.p12).В настоящее время я делаю это, создавая KeyStore объект и добавление сертификата и закрытого ключа.Когда я добавляю клиента PrivateKey с KeyStore.setKeyEntry() способ, а Certificate[] chain является последним аргументом, который в данный момент содержит только сертификат клиента. Помешает ли это проверке моего сертификата, потому что у меня нет сертификата CA в Certificate[] chain? И если да, то возможно ли заполнить цепочку сертификатов информацией, извлеченной из подписанного X509Certificate?

Большинство примеров, по-видимому, загружают цепочку центров сертификации из файла PEM, хранилища доверия BKS или уже имеют доступ к списку сертификатов.

Вот что у меня есть:

    X509Certificate cert;      // signed client cert
    PrivateKey pkey;           // client private key
    String password; 

    KeyStore store;
    store = KeyStore.getInstance("PKCS12", "BC");
    store.load(null, null);

    // adding the signed cert
    store.setCertificateEntry("Client certificate", cert);

    // creating the cert chain
    X509Certificate[] chain = new X509Certificate[1];
    chain[0] = cert;
    // add rest of the certs in the chain here

    // adding the private key   
    store.setKeyEntry("Client private key", pkey, password.toCharArray(), chain);

    FileOutputStream fos;
    fos = openFileOutput("clientCredentials.p12", Context.MODE_PRIVATE);
    store.store(fos, password.toCharArray());
    fos.flush();
    fos.close();

Заранее спасибо!

Это было полезно?

Решение

Сертификат(ы) центра сертификации не включены в ваш подписанный сертификат.Вы должны откуда-то их получить (предварительно установить, загрузить с надежного сервера и т.д.).Что касается отказа от установки полной цепочки, если у проверяющего уже есть доступ к необходимым сертификатам CA, он всегда может проверить ваш сертификат конечного объекта.Как вы собираетесь использовать свой ключ и сертификат?

Кстати, ваш звонок в setCertificateEntry() создает запись доверенного сертификата, которая, вероятно, не является тем, что вам нужно для сертификата конечного объекта.

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top