RFC: 5280
Оригинал: Internet X.509 Public Key Infrastructure Certificate and Certificate Revocation List (CRL) Profile
Предыдущие версии: RFC 2459, RFC 3280, RFC 4325, RFC 4630
Категория: Предложенный стандарт
Дата публикации: (с дополнениями из RFC 6818, Январь 2013)
Авторы: , , , , , ,
Перевод: Мельников Дмитрий Анатольевич

6.1.4. Фаза подготовки к обработке (i+1)-го сертификата

Для готовности к обработке (i+1)-го сертификата, проводятся следующие операции по отношению к i-ому сертификату:

  1. Если имеет место субполе «policyMappings» (отображения политик), то проверяем, что специфическое значение «anyPolicy» не представлено в виде последовательности «issuerDomainPolicy» или «subjectDomainPolicy».

  2. Если имеет место субполе «policyMappings», то для каждой последовательности «issuerDomainPolicy» с идентификатором политики ID-P в субполе «policyMappings»:

    1. Если переменная «policy_mapping» > 0, то для каждого узла в дереве «valid_policy_tree» глубиной i, в котором идентификатор политики ID-P указывает на приемлемую политику «valid_policy», устанавливаем в компоненте «expected_policy_set» совокупность значений «subjectDomainPolicy», которые определяются как эквиваленты ID-P с помощью субполя «policyMappings».

      Если в дереве «valid_policy_tree» нет узла глубиной i, имеющего приемлемую политику «valid_policy» с идентификатором ID-P, но имеет место узел глубиной i, имеющий приемлемую политику «anyPolicy», то из этого узла формируется дочерний узел глубиной i-1 с приемлемой политикой «anyPolicy» следующим образом:

      1. Установим компонент «valid_policy» в значение ID-P.

      2. Установим компонент «qualifier_set» в значение совокупности определителей, указанной в политике «anyPolicy» из субполя «certificatePolicies» i-ого сертификата.

      3. И установим компонент «expected_policy_set» в совокупность значений «subjectDomainPolicy», которые определяются как эквиваленты значения ID-P с помощью субполя «policyMappings».

    2. Если переменная «policy_mapping» равна 0:

      1. Удаляем каждый узел глубиной i в дереве «valid_policy_tree», в котором ID-P определяет приемлемую политику «valid_policy».

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

  3. Присваиваем имя владельца сертификата переменной «working_issuer_name».

  4. Присваиваем значение «subjectPublicKey» из сертификата переменной «working_public_key».

  5. Если поле «subjectPublicKeyInfo» сертификата включает субполе «algorithm» с не нулевыми параметрами, то присваиваем эти параметры переменной «working_public_key_parameters».

    Если же поле «subjectPublicKeyInfo» сертификата включает субполе «algorithm» с нулевыми параметрами или эти параметры просто отсутствуют, то сравниваем алгоритм для «subjectPublicKey» из сертификата с переменной «working_public_key_algorithm». Если алгоритм для «subjectPublicKey» из сертификата и переменная «working_public_key_algorithm» не совпадают, то устанавливаем переменную «working_public_key_algorithm» в нулевое значение.

  6. Присваиваем значение алгоритма для «subjectPublicKey» из сертификата переменной «working_public_key_algorithm».

  7. Если в сертификате представлено субполе «nameConstraints», то изменяем переменные состояния «permitted_subtrees» и «excluded_subtrees» следующим образом:

    1. Если в сертификате представлена последовательность «permittedSubtrees», то устанавливаем переменную состояния «permitted_subtrees» в точку пересечения её предыдущего значения со значением, представленном в поле «Расширения». Если последовательность «permittedSubtrees» не содержит соответствующий формат имени, то переменная состояния «permitted_subtrees» остаётся неизменной для этого типа имён. Например, точкой пересечения имён «example.com» и «foo.example.com» является «foo.example.com.». А точкой пересечения имён «example.com» и «example.net» является пустое множество.

    2. Если в сертификате представлена последовательность «excludedSubtrees», то устанавливаем переменную состояния «excluded_subtrees» в объединённую последовательность, состоящую из её предшествующего значения и значения, представленного в поле «Расширения». Если последовательность «excludedSubtrees» не включает соответствующего формата имён, то переменная состояния «excluded_subtrees» остаётся неизменной для этого типа имён. Например, объединённой последовательностью пространств имён «example.com» и «foo.example.com» является «example.com.». А объединённой последовательностью пространств имён «example.com» и «example.net» являются оба пространства имён.

  8. Если i-ый сертификат не является само-изданным, то:

    1. Если переменная «explicit_policy» ≠ 0, то уменьшаем переменную «explicit_policy» на единицу.

    2. Если переменная «policy_mapping» ≠ 0, то уменьшаем переменную «policy_mapping» на единицу.

    3. Если переменная «inhibit_anyPolicy» ≠ 0, то уменьшаем переменную «inhibit_anyPolicy» на единицу.

  9. Если сертификат включает субполе «policyConstraints», то изменяем переменные состояния «explicit_policy» и «policy_mapping» следующим образом:

    1. Если представлена последовательность «requireExplicitPolicy» и её значение меньше значения переменной «explicit_policy», то устанавливаем переменную «explicit_policy» в значение из последовательности «requireExplicitPolicy».

    2. Если представлена последовательность «inhibitPolicyMapping» и её значение меньше значения переменной «policy_mapping», то устанавлива ем переменную «policy_mapping» в значение из последовательности «inhibitPolicyMapping».

  10. Если сертификат включает субполе «inhibitAnyPolicy» и его значение меньше значения переменной «inhibit_anyPolicy», то устанавливаем переменную «inhibit_anyPolicy» в значение из субполя «inhibitAnyPolicy»;

  11. Если i-ый сертификат является третьей версией сертификата, то проверяем, что в этом сертификате представлено субполе «basicConstraints», и что флаг «cA» установлен в значение «TRUE»; (Если i-ый сертификат является первой или второй версией сертификата, то прикладная система обязана, либо проверить, что i-ый сертификат является сертификатом УЦ, полученный автономным способом, либо удалить этот сертификат. Прикладные системы и ИТС, придерживающиеся этого стандарта, могут удалять все промежуточные сертификата между первой и второй версиями.)

  12. Если сертификат не был само-изданным, то проверяем, что переменная «max_path_length» > 0, и уменьшаем значение переменной «max_path_length» на единицу.

  13. Если сертификат включает последовательность «pathLenConstraint» и её значение меньше значения переменной «max_path_length», то устанавливаем переменную «max_path_length» в значение из последовательности «pathLenConstraint».

  14. Если сертификат включает субполе «keyUsage», то проверяем, бит «keyCertSign» установлен.

  15. Распознаём и обрабатываем любое другое критичное субполе в поле «Расширения», представленное в сертификате. Обрабатываем любое другое распознаваемое не критичное субполе в поле «Расширения», представленное в сертификате, и которое затрагивает обработку маршрута.

Если проверки a), k), l), n) или o) «провалились», то процедура прекращается, указывая на неисправность и соответствующую причину.

Если проверки a), k), l), n) или o) завершились успешно, то увеличивает на единицу индекс i и продолжаем основную обработку сертификата (6.1.3).

2007 - 2017 © Русские переводы RFC, IETF, ISOC.