выполняются следующие шаги для
Для подготовки обработки сертификата i+ 1 выполняются следующие шаги для сертификата i:
- Если представлено расширение отображений политики, проверяется, что специальное значение anyPolicy не присутствует в issuerDomainPolicy или subjectDomainPolicy.
- Если представлено расширение отображений политики, то для каждого issuerDomainPolicy ID-P в расширении отображений политики:
- Если переменная policy_mapping больше 0, для каждого узла в valid_policy_tree глубины i, где ID-P есть valid_policy, установить expected_policy_set и установить значения subjectDomainPolicy, которые определены, эквивалентными ID-P из расширения отображения политик.
Если нет узлов глубины i в valid_policy_tree, имеющих valid_policy ID-P, но есть узел глубиной i с valid_policy anyPolicy, создать подчиненный узел для узла глубиной i-1, который имеет valid_policy anyPolicy, следующим образом:- Установить valid_policy в ID-P;
- Установить qualifier_set в множество квалификаторов политики anyPolicy в расширении политик сертификации сертификата i;
- Установить criticality_indicator в значение критичности расширения политик сертификации сертификата i;
- Установить expected_policy_set в множество значений subjectDomainPolicy, которое определено эквивалентным ID-P расширения отображений политик.
- Если переменная policy_mapping равна 0:
- Удалить каждый узел глубины i в valid_policy_tree, где ID-P есть valid_policy.
- Если есть узел в valid_policy_tree глубины i-1 или меньше без подчиненных узлов, удалить этот узел. Повторять этот шаг до тех пор, пока не будет узлов глубины i-1 или меньше без подчиненных узлов.
- Если переменная policy_mapping больше 0, для каждого узла в valid_policy_tree глубины i, где ID-P есть valid_policy, установить expected_policy_set и установить значения subjectDomainPolicy, которые определены, эквивалентными ID-P из расширения отображения политик.
- Присвоить working_issuer_name имя субъекта сертификата.
- Присвоить working_public_key subjectPublicKey сертификата.
- Если поле subjectPublicKeyInfo сертификата содержит поле алгоритма с ненулевыми параметрами, присвоить параметры переменной working_public_key_parameters.
Если поле subjectPublicKeyInfo сертификата содержит поле алгоритма с ненулевыми параметрами или параметры опущены, сравнить алгоритм subjectPublicKey сертификата с working_public_key_algorithm.
Если алгоритм subjectPublicKey и working_public_key_algorithm различные, установить working_public_key_algorithm в null.
- Определить алгоритм subjectPublicKey сертификата для переменной working_public_key_algorithm.
- Если расширение ограничений имени включено в сертификат, модифицировать переменные состояния permitted_subtrees и excluded_subtrees следующим образом:
- Если permittedSubtrees присутствует в сертификате, установить переменную состояния permitted_subtrees в пересечение ее предыдущего значения и значения, указанного в поле расширения. Если permittedSubtrees не включает тип конкретного имени, переменная состояния permitted_subtrees для данного типа имени не изменяется. Например, пересечение msu.ru и cmc.msu.ru есть cmc.msu.ru. А пересечение cmc.msu.ru и mm.msu.ru есть пустое множество.
- Если excludedSubtrees присутствует в сертификате, установить переменную состояния excluded_subtrees в объединение ее предыдущего значения и значения, указанного в поле расширения. Если excludedSubtrees не включает тип конкретного имени, переменная состояния excluded_subtrees для данного типа имени не изменяется. Например, объединением пространства имен cmc.msu.ru и mm.msu.ru является пространство обеих имен.
- Если имена субъекта и выпускающего не идентичны:
- Если explicit_policy не 0, уменьшить explicit_policy на 1.
- Если policy_mapping не 0, уменьшить policy_mapping на 1.
- Если inhibi_any-policy не 0, уменьшить inhibi_any-policy на 1.
- Если расширение ограничений политики включено в сертификат, модифицировать переменные состояния 2 и policy_mapping следующим образом:
- Если requireExplicitPolicy присутствует и ее значение меньше, чем explicit_policy, установить explicit_policy в значение requireExplicitPolicy.
- Если inhibitPolicyMapping присутствует и ее значение меньше, чем policy_mapping, установить policy_mapping в значение inhibitPolicyMapping.
- Если расширение inhibitAnyPolicy присутствует в сертификате и меньше, чем inhibit_any-policy, установить inhibit_any-policy в значение inhibitAnyPolicy.
- Убедиться, что сертификат есть сертификат СА (если это не указано в расширении basicConstraints, проверить с помощью внешних средств).
- Если сертификат не является самовыпущенным, убедиться, что max_path_length больше нуля и уменьшить max_path_length на 1.
- Если pathLengthConstraint присутствует в сертификате и меньше, чем max_path_length, установить max_path_length в значение pathLengthConstraint.
- Если расширение использования ключа присутствует, проверить, установлен ли бит keyCertSign.
- Определить и обработать все остальные критичные расширения в сертификате.Обработать все другие распознанные некритичные расширения, представленные в сертификате.
Если проверки (1), (10), (11), (12) или (13) не прошли, процедура завершается, возвращается индикация недействительности сертификационного пути и соответствующая причина.
Если (1), (10), (11), (12) и (13) завершены успешно, увеличить i и выполнить базовую обработку сертификата, описанную в предыдущем пункте.