Извлеките информацию о цепочке сертификатов из подписанного сертификата X509 (ответ CSR) в Android / BouncyCastle
-
12-12-2019 - |
Вопрос
Могу ли я извлечь информацию о цепочке сертификатов из клиентского сертификата 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()
создает запись доверенного сертификата, которая, вероятно, не является тем, что вам нужно для сертификата конечного объекта.