OpenSSL x509 Флаг назначения "Any Purpose" Что это?

Глядя на детали сертификата, используя следующее:

openssl x509 -noout -text -purpose -in mycert.pem

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

Одним из таких целевых флагов является "Любая цель". Я не могу найти ЛЮБУЮ документацию по этому флагу и почему или почему он не установлен.

Кто-нибудь из вас знает, где я могу найти больше информации об этой цели и что это значит?

Спасибо,

7 ответов

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 стали обязательными в коде, даже если установлена ​​"Любая цель". Так что, если вы действительно попытаетесь использовать этот сертификат в качестве ЦС, он будет отклонен ".

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" / может или не может / присутствовать в конкретном сертификате.

Что, вероятно, предполагает OpenSSL с PURPOSE_ANY, так это то, что это расширение было / не присутствовало / и что поэтому "в соответствии с вашей собственной политикой" решать, для чего его использовать или не использовать. Иначе, нет значения растрового изображения, которое соответствует "ЛЮБОМУ"...

В сертификатах X.509, как и в большинстве других вещей, если термин не определен явно, то он наследует значение из своего непосредственно окружающего контекста. Если этот контекст "жизнь", то фраза "любая цель" означает буквально это.

Итак, проверьте Политику сертификации, Соглашение с подписчиком и Соглашение с проверяющей стороной выдающего ЦС, и если они ничего не говорят о флаге, то это означает, что написано на коробке.

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

Мой Root CA имеет:

  • AnyPolice 2.5.29.32.0,
  • CA: True 2.5.4.37,
  • AnyPurpose 2.5.29.15,
  • DigitalSignature 2.5.4.37.3,
  • Точки распространения CRL 2.5.29.31,

На моем промежуточном CA TLS для примера я установил:

  • Web ServerAuth TLS 1.3.6.1.5.5.7.3.1,
  • Web ClientAuth 1.3.6.1.5.5.7.3.2

Это ограничение TLS CA от наследования от всех атрибутов от корневого CA (упомянутые здесь ограничительные OID позволят подписывать только сертификаты TLS и с pathlen:0 я буду запрещать подчиненные CA).

Все зависит от того, как вы настроите свою инфраструктуру PKI.

В моей сети я делаю один промежуточный CA для каждой цели, например:

  • Промежуточный CA для электронной почты
  • Промежуточный CA для TLS
  • Средний CA для программного обеспечения
  • Средний CA для идентификации
  • Средний CA для компонентов

Таким образом, если есть проблема с почтовым сертификатом, мне нужно только отозвать Email CA, в то время как все другие промежуточные CA в порядке.

Большие сертификационные органы имеют, например, специальный промежуточный CA для EV.

Примечание: это для персональной PKI. Если вы хотите сделать что-то, следуя RFC и передовым методам, как это делают крупные центры сертификации, тогда существует множество дополнительных stpes, например, включить гораздо больше OID и настроить их все...

Например, вы можете прочитать некоторые стандарты по этой ссылке:

https://cabforum.org/wp-content/uploads/Baseline_Requirements_V1.pdf

Другой пример, для сертификатов EV существует множество дополнительных шагов настройки OID:

  • Подтвержден домен 2.23.140.1.2.1
  • Организация утверждена 2.23.140.1.2.2

И поскольку мои настройки не нуждаются в них, я не тратил свое время на поиск и тестирование необходимых OID для того, чтобы это работало

Большинство сертификатов выпускаются с целью (или набором целей), для которой они ограничены, такими как аутентификация клиента, аутентификация сервера, обмен ключами и подписывание кода. Если они используются в целях, которые не одобрены (например, использование вашего сертификата электронной почты для подписи кода), они недействительны.

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

"Цель" 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.

От: http://en.wikipedia.org/wiki/Digital_certificate

Использование ключа: Назначение открытого ключа (например, шифрование, подпись, подписание сертификата...).

Смотрите флаг -purpose в документах openssl: http://www.openssl.org/docs/apps/x509.html.

Другие вопросы по тегам