Рассмотрим детали сертификата, используя следующее:
openssl x509 -noout -text -purpose -in mycert.pem
Я нашел кучу целевых флагов (которые, как я обнаружил, устанавливаются различными расширениями, прикрепленными к сертификату).
Один из таких флагов цели - «Любая цель». Я не могу найти НИКАКОЙ документации по этому флагу и почему или почему он не установлен.
Кто-нибудь из вас знает, где я могу найти дополнительную информацию по этому поводу и что это значит?
Спасибо,
В Any Purpose : Yes
и Any Purpose CA : Yes
строки из openssl x509 -purpose
особенные. Он специфичен для openssl и показывает, на что будет проверяться сертификат при использовании с устаревшими версиями программного обеспечения, которые не проверяют наличие расширений.
Эти флаги специального назначения нельзя отключить или отключить. Из исходного кода openssl проверка цели определяется в openssl / crypto / x509v3 / v3_purp.c как статический X509_PURPOSE xstandard [] = {…}. Функция проверки проверки X509_PURPOSE_ANY возвращает 1.
Наиболее близкой к официальной документации по этому флагу, вероятно, являются сообщения доктора Стивена Н. Хенсона, автора v3_purp.c - http://marc.info/?l=openssl-users&m=96219426811480 и http://openssl.6102.n7.nabble.com/quot-critical-CA-FALSE-quot-but-quot-Any-Purpose-CA-Yes-quot-td29933.html.
Процитирую Стива:
«Параметр« Любая цель »- это то, что пропускает что угодно и не выполняет никаких проверок. Первоначально он был помещен туда для того, чтобы люди могли использовать сломанные сертификаты, если у них не было другого выбора и могли бы жить с последствиями ... С тех пор проверки CA стали обязательными в коде, даже если установлено "Any Purpose". Так что, если вы действительно попытаетесь использовать этот сертификат в качестве CA, он будет отклонен ».
Обычно я устанавливаю "AnyPurpose" для корневого ЦС (то есть это корневой ЦС, который может выдавать сертификаты любому другому промежуточному или подчиненному ЦС), а затем при выдаче промежуточного ЦС я устанавливаю ограничения ...
В моем корневом ЦС есть:
В моем промежуточном TLS CA для примера я установил:
Это ограничивает TLS CA от наследования всех атрибутов корневого CA (ограничительные OID, указанные здесь, позволят подписывать только сертификаты TLS, а с pathlen: 0 я буду запрещать подчиненные CA).
Все зависит от того, как вы настроите свою инфраструктуру PKI.
В моей сети я использую один промежуточный центр сертификации для каждой цели, например:
Таким образом, если возникает проблема с почтовым сертификатом, мне нужно только отозвать ЦС электронной почты, в то время как все остальные промежуточные ЦС в порядке.
Например, у крупных центров сертификации есть выделенный промежуточный центр сертификации для электромобилей.
Примечание: это для личного PKI, если вы хотите сделать что-то в соответствии с RFC и передовыми практиками, такими как крупные центры сертификации, тогда есть много дополнительных шагов, например, включить гораздо больше OID и настроить их все ...
Например, вы можете прочитать некоторые стандарты по этой ссылке:
https://cabforum.org/wp-content/uploads/Baseline_Requirements_V1.pdf
Другой пример, для сертификатов EV есть много дополнительных шагов по настройке OID:
И так как в моей настройке они не нужны, я не тратил время на поиск и тестирование необходимых OID для работы.
KeyUsage - это расширение v3, которое может присутствовать или не присутствовать в сертификате.
Полезная (хотя и слегка устаревшая) сводка значений id-ce-keyUsage: http://www.alvestrand.no/objectid/2.5.29.15.html [новые добавленные значения: 7 = encipherOnly и 8 = decipherOnly]
Уловка в том, что это «OID = 2.5.29.15 keyUsage extension» / может присутствовать или не присутствовать / в конкретном сертификате.
Что OpenSSL, вероятно, предполагает с PURPOSE_ANY, так это то, что это расширение было / не присутствовало /, и что поэтому «ваша собственная политика» решает, для чего его использовать или не использовать. В противном случае нет значения растрового изображения, соответствующего "ЛЮБОЙ" ...
В сертификатах X.509, как и в большинстве других случаев, если термин не определен явно, он наследует значение из непосредственно окружающего его контекста. Если этот контекст - «жизнь», то фраза «Любая цель» означает буквально это.
Итак, проверьте Политику сертификатов, Соглашение с подписчиком и Соглашение с проверяющей стороной выдающего ЦС, и если они ничего не говорят о флаге, то это означает то, что он говорит на коробке.
Из: http://en.wikipedia.org/wiki/Digital_certificate
Использование ключа: цель открытого ключа (например, шифрование, подпись, подпись сертификата ...).
См. Флаг -purpose в документации openssl: http://www.openssl.org/docs/apps/x509.html#CERTIFICATE_EXTENSIONS
Большинство сертификатов выпускаются с целью (или набором целей), которой они ограничены, например, аутентификация клиента, аутентификация сервера, обмен ключами и подпись кода. Если они используются для не одобренной цели (например, с использованием вашего сертификата электронной почты для подписи кода), они недействительны.
Расширение для любых целей просто означает, что сертификат всегда должен соответствовать ограничениям использования, что означает, что он действителен для всех видов использования.
«Назначение» OpenSSL - это не просто прямое отражение расширения Key-Usage сертификата v3.
OpenSSL сам определяет набор «целей», а затем имеет некоторую логику, которая определяет, соответствует ли данный сертификат выбранной цели на основе расширений сертификатов, включая, помимо прочего, использование ключа и расширения расширенного использования ключа.
Любая цель - это то, что вы получите, если сдадите экзамен -purpose any
к openssl verify
или если вы пишете код, который устанавливает цель контекста OpenSSL в значение 'any', например, SSL_CTX_set_purpose()
.
Большинство целей задокументированы в man x509
раздел CERTIFICATE EXTENSIONS
- он объясняет, какие свойства должен иметь сертификат, чтобы быть действительным для данной цели, но не документирует any
цель. В источнике вверху crypto/x509v3/v3_purp.c
вы можете видеть, что функция проверки выполняется для X509_PURPOSE_ANY
является no_check()
, который просто возвращает 1: фактически отключает проверку цели.
Я не уверен, что вы могли бы спроектировать ситуацию, в которой любой сертификат не быть действительным для any
цель. Я также не уверен, в чем разница между установкой цели any
и вообще не устанавливать цель, что должно привести к тому, что проверка цели будет полностью обойдена.
В частности, OpenSSL X509_PURPOSE_ANY
/ "Любая цель" / -purpose any
концепция не то же самое, что и RFC 5280 anyExtendedKeyUsage KeyPurposeId.