Протоколы безопасного сетевого взаимодействия

       

Основная обработка сертификата


Действия по основной обработке сертификата, выполняемые для сертификата i (для всех i в [1..n]), перечислены ниже.

  1. Проверить основную информацию сертификата. Сертификат должен удовлетворять каждому из следующих условий:
    1. Сертификат подписан working_public_key_algirithm, с использованием working_public_key и working_public_parameters.
    2. Период действительности сертификата включает текущее время.
    3. В текущий момент времени сертификат не отменен и не имеет статуса приостановленного. Это может быть определено получением соответствующего CRL, информации о статусе или внешними механизмами.
    4. Имя выпустившего сертификат есть working_issuer_name.
  2. Если сертификат i является самовыпущенным, и это не последний сертификат в пути, пропустить данный шаг для сертификата i. В противном случае убедиться, что имя субъекта расположено в одном из Permitted_subtrees для уникальных имен Х.500 и что каждое из альтернативных имен в расширении subjectAltName (критичном или некритичном) расположено в одном Permitted_subtrees для данного типа имени.
  3. Если сертификат i является самовыпущенным, и это не последний сертификат в пути, пропустить данный шаг для сертификата i. В противном случае убедиться, что имя субъекта не расположено ни в одном из Excluded_subtrees для уникальных имен Х.500 и что каждое альтернативное имя в расширении subjectAltName (критичное или некритичное) не расположено ни в одном из Excluded_subtrees для данного типа имени.
  4. Если в сертификате имеется расширение политик сертификации и valid_policy_tree не NULL, обработать информацию политики с помощью следующих шагов в указанном порядке:
    1. Для каждой политики 2, не эквивалентной 2, в расширении политик сертификации пусть P-OID обозначает OID политики Р и P-Q обозначает множество квалификаторов для политики Р. Выполняются следующие шаги в указанном порядке:
      1. Если valid_policy_tree включает узел глубины i-1, где P-OID принадлежит expected_policy_set, создать подчиненный узел следующим образом: установить valid_policy в OID-P; установить qualifier_set в P-Q и установить expected_policy_set в {P-OID}.


        Например, рассмотрим valid_policy_tree с узлом глубины i-1, где expected_policy_set есть {Gold, White}. Предположим, что политики сертификации Gold и Silver присутствуют в расширении политик сертификации сертификата i. Это означает, что политика Gold соответствует, а политика Silver – нет. Данное правило будет создавать подчиненный узел глубины i для политики Gold. Результат показан на рис. 17.3.

      2. Если нет соответствия на шаге (1) и valid_policy_tree включает узел глубины i-1 с действительной политикой anyPolicy, создается подчиненный узел со следующими значениями: установить valid_policy в P-OID; установить qualifier_set в P-Q и установить expected_policy_set в {P-OID}.

        Например, рассмотрим valid_policy_tree с узлом глубины i-1, где valid_policy есть anyPolicy. Предположим, что политики сертификации Gold и Silver присутствуют в расширении политик сертификации сертификата i. Политика Gold не имеет квалификатора, но политика Silver имеет квалификатор, Q-Silver. Если Gold и Silver не соответствуют (1), данное правило будет создавать два подчиненных узла глубины i, по одному на каждую политику. Результат показан на рис. 17.4.

    2. Если расширение политик сертификации включает политику anyPolicy с квалификатором, установленным в AP-Q и либо (а) inhibit_any_policy есть больше 0, либо (b) i<n и сертификат самовыпущенный, тогда:

      Для каждого узла в valid_policy_tree глубины i-1, для каждого значения в expected_policy_set (включая anyPolicy), которое не присутствует в подчиненном узле, создается подчиненный узел со следующими значениями: установить valid_policy в значение из expected_policy_set в родительском узле; установить qualifier_set в AP-Q и установить множество expected_policy_set в значение в valid_policy из данного узла.

      Например, рассмотрим valid_policy_tree с узлом глубины i-1, где expected_policy_set есть {Gold, Silver}. Предположим, что anyPolicy присутствует в расширении политик сертификации сертификата i, но Gold и Silver нет. Данное правило будет создавать два подчиненных узла глубины i, по одному для каждой политики.



      Результат показан на рис. 17.5.

    3. Если существует узел в valid_policy_tree глубины i-1 или менее без каких- либо подчиненных узлов, удалить данный узел. Повторять этот шаг до тех пор, пока не останется узлов глубины i-1 или менее без подчиненных узлов.

      Например, рассмотрим valid_policy_tree, показанную на рис. 17.6. Два узла глубины i-1, которые помечены ‘X’, не имеющие подчиненных узлов, удаляются. Применяя данное правило к результирующему дереву, узел глубины i-2, помеченный как ‘Y’, будет удален. Следующее применение правила не вызовет удаления каких-либо узлов, и данный шаг завершится.

    4. Если расширение политик сертификации было помечено как критичное, установить criticality_indicator во всех узлах глубины i в TRUE. Если расширение политик сертификации было помечено как некритичное, установить criticality_indicator во всех узлах глубины i в FALSE.



    Рис. 17.3.  Обработка точного соответствия


    Рис. 17.4.  Обработка несоответствующих политик, когда конечный узел специфицирует anyPolicy


    Рис. 17.5.  Обработка несоответствующих политик, когда расширение политик сертификации специфицирует anyPolicy


    Рис. 17.6.  Сокращение valid_policy_tree

  5. Если расширение политик сертификации не присутствует, установить valid_policy_tree в NULL.
  6. Проверить: либо explicit_policy больше нуля, либо valid_policy_tree не эквивалентно NULL;


Если любой из шагов (1), (2), (3) или (6) не завершается успешно, процедура прекращается, возвращается индикация неудачной проверки и соответствующая причина.

Если i не равно n, продолжается выполнение подготовительных шагов. Если i равно n, выполняются шаги wrap-up.


Содержание раздела