[devel] X509v3: CRL Distribution Points: help is needed

manowar на altlinux.org manowar на altlinux.org
Ср Авг 8 18:43:25 MSK 2018


  Всем привет. Прошу помощи у тех, кто хорошо "шарит" в ASN.1.

  Имею экземпляр цифровой подписи в формате PKCS#7 (CMS). Для того,
чтобы её проверить по правилам, нужно принять во внимание списки отзыва
сертификатов (CRL).
  Согласно стандарту (RFC 3280, п. 4.2.1.14 [1]), информация о списках
отзыва (вернее о том, где можно их получить) представляется в виде
списка (SEQUENCE) объектов типа DistributionPoint. Каждый
DistributionPoint содержит 3 поля, одно из которых ---
distributionPoint --- и является собственно именем (адресом) для
получения CRL. Однако, по тому же стандарту (если я правильно его
понял), поле distributionPoint.fullName может, в свою очередь, быть
представлено _списком_ типа GeneralNames. Тогда получается, что для
каждого объекта DistributionPoint задать _несколько_ адресов одновременно.
  Возможность и смысл указания нескольких адресов подтверждается
наличием в документе следующих слов: "each name
describes a different mechanism to obtain the same CRL. For example,
the same CRL could be available for retrieval through both LDAP and
HTTP" --- т.е. каждый адрес, входящий в состав
distributionPoint.fullName, вроде бы является _альтернативой_ для
получения _одного и того же_ списка отзыва.

  Вот как выглядит в разобранном виде та часть файла подписи, которая
отвечает за CRL:

> SEQUENCE(2 elem)
>   OBJECT IDENTIFIER2.5.29.31cRLDistributionPoints(X.509 extension)
>   OCTET STRING(1 elem)
>     SEQUENCE(2 elem)
>       SEQUENCE(1 elem)
>         [0](1 elem)
>           [0](1 elem)
>             [6]http://pki-lan/ocsp/6b00868389d200cf56b86be4e336101e1f72aec3.crl
>       SEQUENCE(1 elem)
>         [0](1 elem)
>           [0](1 elem)
>             [6]http://pki.grfc.ru/ra/cdp/6b00868389d200cf56b86be4e336101e1f72aec3.crl

( Весь файл целиком доступен по (сокр.) адресу:
https://tinyurl.com/ybpjg9ha )

  Теперь, собственно, сам вопрос: структура выше соответствует двум
разным CRL? или же это всё-таки два варианта получения одного и того же
CRL? Иными словами, что перед нами: два объекта типа DistributionPoint
или же две строки, относящиеся к одному такому объекту?
  Сам я склоняюсь к первому варианту --- формально заявлено два _разных_
CRL. Однако меня смущает указание на количество elem, которое я не
совсем понимаю как читать.

  Предыстория же моего вопроса связана с тем, что первый из указанных
адресов --- это, очевидно, адрес внутренней сети, а не Интернет. А это
значит, что издатель подписи (сертификата) рассчитывал на то, что оба
указанных им адреса будут расценены как альтернативные и, при
недоступности первого, проверяющий перейдёт по второму. Но dirmngr (из
пакета gnupg2) считает иначе: он расценивает указанную информацию как
список из двух различных CRL, которые, следовательно, оба требуются для
проверки подписи. Невозможность получить CRL по первому адресу в
результате приводит к невозможности подтвердить подпись.
  Короче говоря, мне нужно понять кто не прав: GnuPG или grfc.ru. В
пользу последнего как будто бы говорит его официальный статус УЦ. Но с
другой стороны, знаем мы эти статусы.

---
[1]: https://tools.ietf.org/html/rfc3280#section-4.2.1.14


Подробная информация о списке рассылки Devel