Получить сертификаты ЦС из файла p12 программно и заказать список сертификатов?

После множества поисков я не нашел, как сделать эквивалент следующей команды в коде Java:

openssl pkcs12 -cacerts -in /path/to/file.p12 -noout

чтобы получить только сертификаты CA из этого p12 или openssl pkcs12 -clcerts -in /path/to/file.p12 -noout, чтобы получить сертификат

В java я загружаю file.p12, поэтому все эти сертификаты хранятся в хранилище ключей PKCS12, но не могу различить, какой сертификат CA, а какой - простой. Как это сделать ?

(В моем p12 у меня есть сертификат и сертификат CA N, который его подписал: CA 2 подписал сертификат, CA 3 подписал сертификаты CA 2 ..., CA N подписал сертификаты CA N-1)

2) Другой вопрос в том же порядке: есть ли способ заказать список сертификатов x509 для получения (ca 1, ... ca N), который я использовал:

CertificateFactory certFact = CertificateFactory.getInstance("X.509");
CertPath path = certFact.generateCertPath(myCertifList);

Но список нужно уже заказывать вопреки тому, на что я надеялся.

3) Гарантирован ли порядок сертификатов fullchain? Что, если Let's Encrypt, например, изменит свою стратегию и изменит способ построения цепочки и полной цепочки таким образом, чтобы мы не могли полагаться на фактический заказ сертификата? Большое спасибо за помощь!


person Kharlan    schedule 09.11.2016    source источник
comment
Сертификаты корневого ЦС самозаверяющие. Основное отличие от пользовательских самозаверяющих сертификатов состоит в том, что они перечислены в надежном хранилище сертификатов Java. См. Также этот вопрос .   -  person Robert    schedule 10.11.2016


Ответы (1)


Практический способ выдачи P12: с одним PrivateKey и соответствующим Certificate Chain (общий интернет-стандарт).

Подробнее об этом можно прочитать по этим ссылкам: PKCS # 12, Цепочка доверия и Промежуточный CA.

Обычно (почти всегда) сертификат пользователя будет первым сертификатом (наиболее важным) в цепочке, за которым следуют наименее важные (вспомогательные CA и CA, CA является последним).

Почти все программное обеспечение и библиотеки следуют этому подходу.

Таким образом, можно с уверенностью сказать, что цепочка сертификатов будет упорядочена (однако существует вероятность того, что цепочка может быть неполной, у вас может быть только сертификат пользователя, или сертификат CA может отсутствовать после сертификата Sub CA сертификат. Это сильно зависит от ЦС, выдавшего цепочку P12 / сертификатов). Но вы найдете сертификат пользователя в первой (нулевой) позиции.

Если вам нужно убедиться, что цепочка завершена и упорядочена, у вас может быть свой собственный защитный метод, который делает это. Вы можете определить тип сертификата (CA, SubCA или пользователь) на основе полей SubjectDN и IssuerDN сертификата.

Если SubjectDN равно IssuerDN, то это сертификат ЦС, а затем идентифицирует следующий сертификат (SubCA), если IssuerDN сертификата равен SubjectDN ЦС, то он следующий в цепочке и т. Д.

person always_a_rookie    schedule 10.11.2016