Выпускающий
САs могут не выпускать nextUpdate следующего выпуска
Рассмотрим синтаксис
CertificateList ::= SEQUENCE {
tbsCertList TBSCertList,
signatureAlgorithm AlgorithmIdentifier,
signatureValue BIT STRING
}
TBSCertList ::= SEQUENCE {
version Version OPTIONAL,
-- если присутствует, должно быть v2
signature AlgorithmIdentifier,
issuer Name,
thisUpdate Time,
nextUpdate Time OPTIONAL,
revokedCertificates SEQUENCE OF SEQUENCE {
userCertificate CertificateSerialNumber,
revocationDate Time,
crlEntryExtensions Extensions OPTIONAL
-- если присутствует, должно быть v2
} OPTIONAL,
crlExtensions [0] EXPLICIT Extensions OPTIONAL
-- если присутствует, должно быть v2
}
CertificateList есть последовательность трех обязательных полей.
Первым полем в последовательности является tbsCertList. Данное поле само представляет собой последовательность, состоящую из имени выпускающего, даты выпуска, даты выпуска следующего списка, необязательного списка отмененных сертификатов и необязательных расширений
Поле signatureAlgorithm содержит идентификатор алгоритма, использованного выпускающим CertificateList. Данное поле должно содержать те же самые идентификаторы алгоритмов, что и поле signature в последовательности tbsCertList.
Поле signatureValue содержит цифровую подпись, вычисленную над ASN.1 tbsCertList. ASN.1 tbsCertList используется в виде входа в функцию подписывания. Данное значение подписи представлено в виде строки битов и содержится в поле signatureValue. Детали данного процесса для разных алгоритмов различны.
САs, которые выпускают и keyCertSign в расширении использования ключа, другой имеет установленный бит в расширении использования ключа. Когда используются разные закрытые ключи, соответствующие им сертификаты содержат разные идентификаторы ключа. Считается, что использование разных сертификатов СА для проверки действительности подписей сертификатов и подписей
Подписанный список сертификатов или TBSCertList представляет собой последовательность обязательных и необязательных полей. Обязательные поля идентифицируют выпускающего
Необязательные поля включают список отмененных сертификатов и расширения
Данное необязательное поле описывает версию представления
Данное поле содержит идентификатор алгоритма, использованного для подписывания signatureAlgorithm в последовательности CertificateList.
Имя выпускающего определяет участника, который подписал и выпустил issuerName. В расширении issuerAltName могут присутствовать альтернативные формы имени. Поле issuerName должно содержать уникальное имя (DN) X.500. Данное поле определено как Х.501 типа Name и должно следовать правилам представления для поля issuerName в сертификате.
Данное поле указывает дату выпуска данного ThisUpdate может быть представлено как UTCTime или GeneralizedTime.
Данное поле определяет дату, когда будет выпущен следующий nextUpdate равным или более поздним, чем все предыдущие nextUpdate может быть представлено в виде UTCTime или GeneralizedTime.
Требуется включать nextUpdate во все TBSCertList описывает данное поле как OPTIONAL, которое состоит из ASN.1-структур, определенных в стандарте X.509.
Когда отмененных сертификатов не существует, список отмененных сертификатов должен отсутствовать. В противном случае отмененные сертификаты перечислены указанием их серийных номеров. Сертификаты, отмененные СА, однозначно идентифицируются серийным номером. Указывается дата, когда произошла отмена. Дополнительная информация может быть добавлена в расширения записей
Данное поле может появиться, если версия есть 2. Если данное поле присутствует, оно является последовательностью одного или более расширений
Расширения, определенные ANSI X9, ISO/IEC и ITU-T для X.509 v2
Расширение идентификатора ключа уполномоченного органа предоставляет способы идентификации открытого ключа, соответствующего закрытому ключу, который использовался для подписывания
Расширение альтернативных имен выпускающего позволяет задействовать дополнительные идентификаторы, которые связаны с выпускающим domainComponent.
Расширение issuerAltName не должно быть помечено как критичное.
Номер
Если выпускающий
Если выпускающий
Индикатор
Расширение индикатора BaseCRLNumber. Номер
Когда конформный выпускающий
Когда
issuingDistributionPoint опущено и в issuingDistributionPoint присутствует и в BaseCRLNumber, указанному в Считается, что
Если сертификат был приостановлен в любом removeFromCRL.
Выпускающий removeFromCRL, если время notAfter, указанное в сертификате, предшествует времени thisUpdate, указанному в
Если упоминание об отмене сертификата впервые появилось в
Приложение, которое поддерживает thisUpdate и nextUpdate.
Точка распространения
Коды причин, связанные с точкой распространения, должны быть указаны в onlySomeReasons. Если onlySomeReasons не присутствует, точка распространения должна содержать отмены для всех кодов причин. САs могут использовать точки распространения keyCompromise (1), cACompromise (2) и aACompromise (8) появляются в одной точке распространения, а отмены с другими кодами причины появляются в другой точке распространения.
Если поле distributionPoint присутствует и содержит URI, должна предполагаться следующая семантика: объект является указателем на самый последний
Если поле distributionPoint отсутствует,
Выпускающий indirectCRL, если
id-ce-issuingDistributionPoint
OBJECT IDENTIFIER ::= { id-ce 28 }
issuingDistributionPoint ::= SEQUENCE {
distributionPoint [0]
DistributionPointName OPTIONAL,
onlyContainsUserCerts [1]
BOOLEAN DEFAULT FALSE,
onlyContainsCACerts [2] BOOLEAN
DEFAULT FALSE,
onlySomeReasons [3] ReasonFlags OPTIONAL,
indirectCRL [4] BOOLEAN DEFAULT FALSE,
onlyContainsAttributeCerts [5] BOOLEAN
DEFAULT FALSE
}
Расширение наиболее свежий
Для данного расширения и для расширения сертификата cRLDistributionPoints используется один и тот же описанный выше синтаксис. Поля причины и CRLIssuer в данном расширении
Каждое имя точки распространения указывает местоположение
Расширения записи
Все расширения записи
Расширение reasonCode является некритичным расширением записи reasonCode.
id-ce-cRLReason OBJECT IDENTIFIER ::=
{ id-ce 21 }
-- reasonCode ::= { CRLReason }
CRLReason ::= ENUMERATED {
unspecified (0),
keyCompromise (1),
cACompromise (2),
affiliationChanged (3),
superseded (4),
cessationOfOperation (5),
certificateHold (6),
removeFromCRL (8),
privilegeWithdrawn (9),
aACompromise (10)
}
Код инструкции приостановки является некритичным расширением записи
Дата недействительности является некритическим расширением записи
При обработке
Рассмотрим алгоритм
Действительные пути начинаются с сертификатов, выпущенных доверенным корневым органом. Алгоритм должен иметь открытый ключ корневого СА, имя корневого СА и все ограничения, накладываемые на множества путей, которые могут считаться действительными.
Выбор доверенного корневого органа является вопросом политики: это может быть самый верхний СА в иерархии, либо CA, который выпустил свой(и) сертификат(ы) для проверки, или какой-то другой СА. Процедура
Рассмотрим шаги, которые необходимо выполнить, чтобы определить, имеет ли сертификат статус отмененного или приостановленного, когда
При
Например, некоторым клиентам не требуется поддержка расширения отображения политики безопасности. Клиенты, которые не поддерживают данное расширение, могут пропустить шаги
Алгоритм проверяет действительность сертификата относительно текущей даты и времени. Также можно поддерживать проверку действительности относительно некоторой точки в прошлом. Заметим, что механизмы не позволяют проверять действительность сертификата относительно времени вне периода действительности сертификата.
Доверенный начальный сертификат является входом в алгоритм. Для
Исходная цель
Для достижения данной цели процесс
х в {1, ..., n-1} х+1.1 выпущен доверенным начальным сертификатом.n является действительным сертификатом.х в {1, ..., n-1} сертификат был действительным в момент запроса.Когда начальный доверенный сертификат представлен в форме
Конкретный n, в противном случае результатом будет нулевое дерево действительной политики.
Сертификат является самовыпущенным, если DNs, которые появляются в полях субъекта и выпускающего, одинаковы и не пусты. В общем случае выпускающие и
Данный раздел описывает алгоритм, состоящий из четырех основных шагов:
Шаги (1) и (4) выполняются только один раз. Шаг (2) выполняется для всех сертификатов в пути. Шаг (3) выполняется для всех сертификатов в пути, за исключением последнего. На рис.17.1 представлена высокоуровневая диаграмма потока для данного алгоритма.
Данный алгоритм предполагает наличие следующих семи входов:
User-initial-policy-set: множество User-initial-policy-set имеет специальное значение anyРolicy, если пользователю политика сертификации не важна.Initial-policy-mapping-inhibit , который определяет, является ли отображение политики допустимым в сертификационном пути.Initial-explicit - policy, который определяет, что путь должен быть действительным для, по крайней мере, одной сертификационной политики в user-initial-policy-set.Initial-any-policy-inhibit , который определяет, должен ли anyPolicy обрабатываться, если он включен в сертификат.
(рис 17.1) Диаграмма потока при обработке сертификационного пути
Данная фаза инициализации устанавливает одиннадцать переменных состояния на основании семи входов:
Valid_policy_tree: дерево политик сертификации с соответствующими необязательными квалификаторами; каждый из листьев дерева является действительной политикой на данной стадии в NULL. После того как дерево установлено в NULL, обработка политики прекращается.
Каждый узел в valid_policy_tree включает четыре объекта данных: действительную политику, множество соответствующих квалификаторов политики, множество из одного или более ожидаемых значений политики и индикатор критичности. Если узел имеет глубину х, компоненты узла имеют следующую семантику:
Valid_policy есть единственный х.Qualifier_set является множеством квалификаторов политики, связанных с действительной политикой в сертификате х.Criticality_indicator определяет, было ли расширение политики в сертификате х маркировано как критичное.Expected_policy_set содержит один или более OIDs политик, которые должны соответствовать данной политике в сертификате х+1.
Начальным значением valid_policy_tree является единственный узел с valid_policy anyPolicy, пустым qualifier_set, expected_policy_set с единственным значением anyPolicy и criticality_indicator FALSE. Считается, что данный узел имеет глубину ноль.
Permitted_subtrees: множество корневых имен для каждого типа имени (например, Х.500 уникальные имена, e-mail адреса или IP-адреса), определяющее множество поддеревьев, в которых все имена субъектов в последующих сертификатах в сертификационном пути должны считаться действительными. Данная переменная включает множество для каждого типа имени: начальное значение для множества Distinguished Names является множеством всех уникальных имен; начальное значение множества имен RFC822 является множеством всех RFC822 имен и т.д.Excluded_subtrees: множество корневых имен для каждого типа имени (например, Х.500 уникальное имя, email адреса или IP-адреса), определяющее множество поддеревьев, в которых имя субъекта в последующих сертификатах в сертификационном пути не может считаться действительным. Данная переменная включает множество для каждого типа имени, и начальное значение для каждого множества является пустым.Inhibit_any-policy: целое, которое определяет, можно ли считать идентификатор политики anyPolicy принимаемым. Целое определяет число игнорируемых несамовыпущенных сертификатов, обрабатываемых до anyPolicy, если он присутствует в сертификате. Однажды установленная, данная переменная может уменьшаться, но не может возрастать. Это означает, что если сертификат в пути не допускает обработку anyPolicy, последующие сертификаты не могут разрешить принимать данную политику. Если initial-any-policy-inhibit установлено, то начальное значение есть 0, в противном случае начальное значение есть n+1.Policy_mapping: целое, которое определяет, допустимо ли отображение политики. Целое определяет число несамовыпущенных сертификатов, которые могут быть обработаны до запрещения отображения политики. Однажды установленная, данная переменная может уменьшаться, но не может возрастать. Таким образом, если сертификат в пути указывает, что отображение политики недопустимо, это не может быть перекрыто следующим сертификатом. Если initial-policy-mapping-inhibit установлено, то начальное значение есть 0, в противном случае начальное значение есть n+1.Working_public_key_algorithm: Working_public_key_algorithm инициализируется из алгоритма Working_public_key: открытый ключ, используемый для проверки подписи сертификата. Working_public_key инициализируется из Working_public_key_parameters: параметры, связанные с текущим открытым ключом, который может требоваться для проверки подписи (в зависимости от алгоритма). Переменная working_public_key_parameters инициализируется из параметров Working_issuer_name: уникальное имя выпускающего, ожидаемое в следующем сертификате в цепочке. Working_issuer_name инициализируется доверенным выпускающим, указанным в информации доверенного начального сертификата.Max_path_length: данное целое инициализируется в n, уменьшается для каждого несамовыпущенного сертификата в пути и может быть уменьшено до значения в поле ограничения длины пути с расширением базовых ограничений сертификата СА.После завершения шагов инициализации выполняются основные шаги обработки, описываемые ниже.
Действия по основной обработке сертификата, выполняемые для сертификата i (для всех i в [1..n] ), перечислены ниже.
working_public_key_algirithm, с использованием working_public_key и working_public_parameters.working_issuer_name.i является самовыпущенным, и это не последний сертификат в пути, пропустить данный шаг для сертификата i. В противном случае убедиться, что имя субъекта расположено в одном из Permitted_subtrees для уникальных имен Х.500 и что каждое из альтернативных имен в расширении subjectAltName (критичном или некритичном) расположено в одном Permitted_subtrees для данного типа имени.i является самовыпущенным, и это не последний сертификат в пути, пропустить данный шаг для сертификата i. В противном случае убедиться, что имя субъекта не расположено ни в одном из Excluded_subtrees для уникальных имен Х.500 и что каждое альтернативное имя в расширении subjectAltName (критичное или некритичное) не расположено ни в одном из Excluded_subtrees для данного типа имени.valid_policy_tree не NULL, обработать информацию политики с помощью следующих шагов в указанном порядке:P-OID обозначает P-Q обозначает множество квалификаторов для политики Р. Выполняются следующие шаги в указанном порядке: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.
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.
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.
valid_policy_tree глубины i-1 или менее без каких-либо подчиненных узлов, удалить данный узел. Повторять этот шаг до тех пор, пока не останется узлов глубины i-1 или менее без подчиненных узлов.Например, рассмотрим valid_policy_tree, показанную на рис. 17.6. Два узла глубины i-1, которые помечены ‘X’, не имеющие подчиненных узлов, удаляются. Применяя данное правило к результирующему дереву, узел глубины i-2, помеченный как ‘Y’, будет удален. Следующее применение правила не вызовет удаления каких-либо узлов, и данный шаг завершится.
criticality_indicator во всех узлах глубины i в TRUE. Если расширение политик сертификации было помечено как некритичное, установить criticality_indicator во всех узлах глубины i в FALSE.
(рис 17.3) Обработка точного соответствия
(рис 17.4) Обработка несоответствующих политик, когда конечный узел специфицирует anyPolicy
(рис 17.5) Обработка несоответствующих политик, когда расширение политик сертификации специфицирует anyPolicy
(рис 17.6) Сокращение valid_policy_treevalid_policy_tree в NULL.explicit_policy больше нуля, либо valid_policy_tree не эквивалентно NULL ;Если любой из шагов (1), (2), (3) или (6) не завершается успешно, процедура прекращается, возвращается индикация неудачной проверки и соответствующая причина.
Если i не равно n, продолжается выполнение подготовительных шагов. Если i равно n, выполняются шаги wrap-up.
Для подготовки обработки сертификата 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 или меньше без подчиненных узлов.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.inhibit_any-policy не 0, уменьшить inhibit_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 и выполнить базовую обработку сертификата, описанную в предыдущем пункте.
Для завершения обработки сертификата конечного участника выполнить следующие шаги для сертификата n:
n не является самовыпущенным, и значение explicit_policy не 0, уменьшить explicit_policy на 1.requireExplicitPolicy присутствует и имеет значение 0, установить переменную состояния explicit_policy в 0.subjectPublicKey сертификата для working_public_key.subjectPublicKeyInfo сертификата содержит поле алгоритма с ненулевыми параметрами, определить параметры как переменную working_public_key_parameters.Если поле subjectPublicKeyInfo сертификата содержит поле алгоритма с нулевыми параметрами или параметры опущены, сравнить алгоритм subjectPublicKeyInfo сертификата с working_public_key_algorithm. Если subjectPublicKeyInfo и working_public_key_algorithm различны, установить working_public_key_parameters в null.
subjectPublicKey сертификата переменной working_public_key_algorithm.n. Обработать все другие распознанные некритичные расширения, представленные в сертификате n.valid_policy_tree и user-initial-policy-set следующим образом:valid_policy_tree есть NULL, пересечение есть NULL.valid_policy_tree есть не NULL и user-initial-policy-set есть any-policy, пересечение есть valid_policy_tree.valid_policy_tree есть не NULL и user-initial-policy-set есть не any-policy, вычислить пересечение valid_policy_tree и user-initial-policy-set следующим образом:valid_policy для anyPolicy. Это есть valid_policy_node_set.valid_policy любого узла в valid_policy_node_set установлено не в user-initial-policy-set и не в anyPolicy, удалить данный узел и все подчиненные узлы.valid_policy_tree включает узел глубины n с valid_policy anyPolicy и user-initial-policy-set есть не any-policy, выполнить следующие шаги:P-Q в qualifier_set в узле глубины n с valid_policy anyPolicy.P-OID в user-initial-policy-set, который не содержит значение valid_policy узла, создать подчиненный узел, чьим родителем является узел глубины n-1 с valid_policy anyPolicy. Установить значения в подчиненном узле следующим образом: установить valid_policy в P-OID ; установить qualifier_set в P-Q ; копировать criticality_indicator из узла глубины n с valid_policy anyPolicy ; установить expected_policy_set в {P-oid }.n с valid_policy anyPolicy.valid_policy_tree глубины n-1 или менее без подчиненных узлов, удалить этот узел. Повторять данный шаг до тех пор, пока не останется узлов глубины n-1 без подчиненных узлов.Если либо (1) значение переменной explicit_policy больше нуля, либо (2) valid_policy_tree не есть NULL, то обработка пути выполнена.
Если обработка пути выполнена, процедура завершается, возвращая индикатор успешного завершения вместе с заключительными значениями valid_policy_tree, working_public_key и working_public_key_algorithm working_public_key_parameters.
Алгоритм
Выбор одного или нескольких доверенных CАs является локальной прерогативой. Система может предоставлять любой из доверенных CАs в качестве доверенного корневого сертификата для конкретного пути. Входы для алгоритма
Также можно специфицировать расширенную версию приведенной выше процедуры обработки SubordinationToCA неявно предполагается для оставшегося
Рассмотрим шаги, позволяющие определить, имеет ли сертификат статус отмененного или приостановленного, в том случае, если
Данный алгоритм предполагает, что все необходимые
Данный алгоритм определяет множество входов, множество переменных состояния и шаги обработки, которые выполняются для каждого сертификата в пути.
Для поддержки обработки отмены алгоритму требуется два входа:
basicConstraints можно убедиться, что рассматриваемый сертификат связан с СА или с конечным участником. Если расширения cRLDistributionsPoint и freshestCRL присутствуют, алгоритм использует их для определения статуса отмены.Use-deltas: данный булевый вход определяет, применяются ли Для поддержки обработки
Reasons_mask: данная переменная содержит множество причин отмены, поддерживаемых для обрабатываемых unspecified, superseded, cessationOfOperation, certificateHold, privilegeWithdrawn и aACompromise. Специальное значение all-reasons используется для обозначения множества всех возможных членов. Данная переменная инициализируется в пустое множество.Cert_status: данная переменная содержит unspecified, keyCompromise, caCompromise, affiliationChanged, superseded, cessationWithdrawn, aACompomise, специальное значение UNREVOKED или специальное значение UNDETERMINED. Данная переменная инициируется в специальное значение UNREVOKED.Interim_reasons_mask: это множество причин отмены, поддерживаемых Замечание: в некоторых окружениях нет необходимости проверять все коды причин. Например, некоторые окружения имеют дело только с caCompromise и keyCompromise для сертификатов СА. Данный алгоритм проверяет все коды причин. Дополнительная обработка и переменные состояния могут потребоваться для ограничения проверки подмножества кодов причин.
Данный алгоритм начинается с предположения, что сертификат не отменен. Алгоритм проверяет один или более
Для каждой точки распространения (DP) в расширении сертификата точек распространения (reasons_mask не all-reasons) и (cert_status есть UNREVOKED) ) выполнить следующее:
next update, выполнить следующие действия:use-deltas установлен и либо сертификат, либо freshest next update, которое больше текущего времени.next update в новом next update и use-deltas установлен, получить текущий cRLIssuer, убедиться, что поле выпускающего в cRLIssuer в DP, и что indrectCRL. В противном случае убедиться, что выпускающий cRLIssuer DP.onlyContainsUserCerts установлено в расширении сА.onlyContainsCACerts установлено в расширении сА.onlyContainsAttributeCerts не установлено.use-deltas, проверить выпускающего и interim_reasons_mask для данного onlySomeReasons и DP включает reasons, то установить interim_reasons_mask в пересечение reasons в DP и onlySomeReasons в расширении onlySomeReasons, но в DP опущены reasons, то установить interim_reasons_mask в значение onlySomeReasons в расширении onlySomeReasons, но DP включает reasons, то установить interim_reasons_mask в значение DP reasons.onlySomeReasons и в DP опущены reasons, то установить interim_reasons_mask в специальное значение all-reasons.interim_reasons_mask включает одну или более reasons, которые не включены в reasons_mask.cRLSign.use-deltas установлен, проверить действительность подписи для use-deltas установлен, выполнить поиск для сертификата в cert_status в значение, соответствующее указанной причине, следующим образом:cert_status в значение расширения записи cert_status в значение unspecified.cert_status есть UNREVOKED, то выполнить поиск для сертификата в cert_status в указанную причину, как описано в шаге (9).cert_status есть removeFromCRL ), то установить cert_status в UNREVOKED.Если reasons_mask есть all- или cert_status не UNREVOKED, то статус отмены определен, так как возвращается cert_status.
Если cRLIssuer, и имя точки распространения выпускающего сертификат. Это означает, что последовательность имен в fullName создается из поля выпускающего сертификат, а также расширения issuerAltName сертификата. Если статус отмены остается неопределенным, то возвращается cert_status UNDETERMINED.
Главным в данном стандарте является формат и содержимое сертификатов и
Однако факторы безопасности, внешние по отношению к данной спецификации, могут оказывать влияние на гарантии, предоставляемые
Процедуры, выполняемые САs и RАs для корректного связывания идентификации пользователя и его открытого ключа, заметно влияют на гарантию того, что размещено в сертификате. Доверяющие группы должны иметь возможность просматривать регламент практики сертификации СА. Это особенно важно при выпуске сертификатов для других САs.
Использование одной пары ключей как для подписывания, так и для других целей категорически неприемлемо. Использование отдельных пар ключей для подписывания и для управления ключом обеспечивает пользователям определенные преимущества. Такое разделение связано с тем, что потеря или раскрытие ключа подписывания будет отличаться от потери или раскрытия ключа управления ключом. Использование различных пар ключей позволяет создавать сбалансированные и гибкие ответы. Также различные периоды действительности и длины ключей для каждой пары могут более соответствовать конкретным прикладным окружениям.
К сожалению, некоторые наследуемые приложения (например, TLS/SSL) используют единственную пару ключей для подписывания и для управления ключом.
Критическим фактором безопасности является защита закрытых ключей. Недостаточная защита пользователями своих закрытых ключей позволяет атакующему подделывать их подписи, либо дешифровать их конфиденциальную информацию. Компрометация закрытого ключа подписывания СА может иметь катастрофические последствия. Если атакующему удалось незаметно получить закрытый ключ СА, он может выпускать поддельные сертификаты и
САs должны поддерживать безопасное архивирование ключей подписывания. Безопасность процедур архивирования ключей является критичным фактором при возможности раскрытия ключа.
Доступность и своевременное обновление информации отмены позволяют гарантировать корректность информации, хранящейся в сертификате. Хотя срок действия сертификата и истекает естественным образом, в течение его жизненного цикла могут произойти события, негативно влияющие на связывание субъекта и открытого ключа. Если информация отмены несвоевременна или недоступна, гарантия связывания существенно понижается. Доверяющие группы могут не иметь возможности обрабатывать каждое критичное расширение, которое может появиться в
Алгоритм
Кроме того, когда произошла компрометация ключа доверенного СА, пользователю необходимо модифицировать информацию, предоставляемую подпрограммам
Качество реализаций, которые обрабатывают сертификаты, также влияет на степень предоставляемых гарантий. Алгоритм
Связывание между ключом и субъектом сертификата не может быть более сильным, чем реализация криптографического модуля и алгоритмов, используемых при создании подписи. Короткие длины ключей или слабые хэш-алгоритмы ограничивают использование сертификата. САs должны следить за развитием криптографии и внедрять наиболее сильные криптографические технологии. Кроме того, САs должны отклонять выпуск сертификатов для САs или конечных участников, которые создают слабые подписи.
Несогласованность приложений в правилах сравнения имен может привести к тому, что будет принят недействительный
САs должны представить уникальное имя в поле
Кроме того, ограничения имени для уникальных имен должны быть установлены идентично представлениям, используемым в поле субъекта или расширении . Если это не так, то ограничения имени, установленные как excludedSubTrees, не будут соответствовать, и недействительные пути будут приниматься, и ограничения имени, выраженные как permittedSubtrees, не будут соответствовать, и действительные пути будут отвергаться. Для того, чтобы избежать приема недействительных путей, САs должны установить ограничения имени для уникальных имен как permittedSubtrees везде, где это возможно.
Выпускающий
САs могут не выпускать nextUpdate следующего выпуска
Рассмотрим синтаксис
CertificateList ::= SEQUENCE {
tbsCertList TBSCertList,
signatureAlgorithm AlgorithmIdentifier,
signatureValue BIT STRING
}
TBSCertList ::= SEQUENCE {
version Version OPTIONAL,
-- если присутствует, должно быть v2
signature AlgorithmIdentifier,
issuer Name,
thisUpdate Time,
nextUpdate Time OPTIONAL,
revokedCertificates SEQUENCE OF SEQUENCE {
userCertificate CertificateSerialNumber,
revocationDate Time,
crlEntryExtensions Extensions OPTIONAL
-- если присутствует, должно быть v2
} OPTIONAL,
crlExtensions [0] EXPLICIT Extensions OPTIONAL
-- если присутствует, должно быть v2
}
CertificateList есть последовательность трех обязательных полей.
Первым полем в последовательности является tbsCertList. Данное поле само представляет собой последовательность, состоящую из имени выпускающего, даты выпуска, даты выпуска следующего списка, необязательного списка отмененных сертификатов и необязательных расширений
Поле signatureAlgorithm содержит идентификатор алгоритма, использованного выпускающим CertificateList. Данное поле должно содержать те же самые идентификаторы алгоритмов, что и поле signature в последовательности tbsCertList.
Поле signatureValue содержит цифровую подпись, вычисленную над ASN.1 tbsCertList. ASN.1 tbsCertList используется в виде входа в функцию подписывания. Данное значение подписи представлено в виде строки битов и содержится в поле signatureValue. Детали данного процесса для разных алгоритмов различны.
САs, которые выпускают и keyCertSign в расширении использования ключа, другой имеет установленный бит в расширении использования ключа. Когда используются разные закрытые ключи, соответствующие им сертификаты содержат разные идентификаторы ключа. Считается, что использование разных сертификатов СА для проверки действительности подписей сертификатов и подписей
Подписанный список сертификатов или TBSCertList представляет собой последовательность обязательных и необязательных полей. Обязательные поля идентифицируют выпускающего
Необязательные поля включают список отмененных сертификатов и расширения
Данное необязательное поле описывает версию представления
Данное поле содержит идентификатор алгоритма, использованного для подписывания signatureAlgorithm в последовательности CertificateList.
Имя выпускающего определяет участника, который подписал и выпустил issuerName. В расширении issuerAltName могут присутствовать альтернативные формы имени. Поле issuerName должно содержать уникальное имя (DN) X.500. Данное поле определено как Х.501 типа Name и должно следовать правилам представления для поля issuerName в сертификате.
Данное поле указывает дату выпуска данного ThisUpdate может быть представлено как UTCTime или GeneralizedTime.
Данное поле определяет дату, когда будет выпущен следующий nextUpdate равным или более поздним, чем все предыдущие nextUpdate может быть представлено в виде UTCTime или GeneralizedTime.
Требуется включать nextUpdate во все TBSCertList описывает данное поле как OPTIONAL, которое состоит из ASN.1-структур, определенных в стандарте X.509.
Когда отмененных сертификатов не существует, список отмененных сертификатов должен отсутствовать. В противном случае отмененные сертификаты перечислены указанием их серийных номеров. Сертификаты, отмененные СА, однозначно идентифицируются серийным номером. Указывается дата, когда произошла отмена. Дополнительная информация может быть добавлена в расширения записей
Данное поле может появиться, если версия есть 2. Если данное поле присутствует, оно является последовательностью одного или более расширений
Расширения, определенные ANSI X9, ISO/IEC и ITU-T для X.509 v2
Расширение идентификатора ключа уполномоченного органа предоставляет способы идентификации открытого ключа, соответствующего закрытому ключу, который использовался для подписывания
Расширение альтернативных имен выпускающего позволяет задействовать дополнительные идентификаторы, которые связаны с выпускающим domainComponent.
Расширение issuerAltName не должно быть помечено как критичное.
Номер
Если выпускающий
Если выпускающий
Индикатор
Расширение индикатора BaseCRLNumber. Номер
Когда конформный выпускающий
Когда
issuingDistributionPoint опущено и в issuingDistributionPoint присутствует и в BaseCRLNumber, указанному в Считается, что
Если сертификат был приостановлен в любом removeFromCRL.
Выпускающий removeFromCRL, если время notAfter, указанное в сертификате, предшествует времени thisUpdate, указанному в
Если упоминание об отмене сертификата впервые появилось в
Приложение, которое поддерживает thisUpdate и nextUpdate.
Точка распространения
Коды причин, связанные с точкой распространения, должны быть указаны в onlySomeReasons. Если onlySomeReasons не присутствует, точка распространения должна содержать отмены для всех кодов причин. САs могут использовать точки распространения keyCompromise (1), cACompromise (2) и aACompromise (8) появляются в одной точке распространения, а отмены с другими кодами причины появляются в другой точке распространения.
Если поле distributionPoint присутствует и содержит URI, должна предполагаться следующая семантика: объект является указателем на самый последний
Если поле distributionPoint отсутствует,
Выпускающий indirectCRL, если
id-ce-issuingDistributionPoint
OBJECT IDENTIFIER ::= { id-ce 28 }
issuingDistributionPoint ::= SEQUENCE {
distributionPoint [0]
DistributionPointName OPTIONAL,
onlyContainsUserCerts [1]
BOOLEAN DEFAULT FALSE,
onlyContainsCACerts [2] BOOLEAN
DEFAULT FALSE,
onlySomeReasons [3] ReasonFlags OPTIONAL,
indirectCRL [4] BOOLEAN DEFAULT FALSE,
onlyContainsAttributeCerts [5] BOOLEAN
DEFAULT FALSE
}
Расширение наиболее свежий
Для данного расширения и для расширения сертификата cRLDistributionPoints используется один и тот же описанный выше синтаксис. Поля причины и CRLIssuer в данном расширении
Каждое имя точки распространения указывает местоположение
Расширения записи
Все расширения записи
Расширение reasonCode является некритичным расширением записи reasonCode.
id-ce-cRLReason OBJECT IDENTIFIER ::=
{ id-ce 21 }
-- reasonCode ::= { CRLReason }
CRLReason ::= ENUMERATED {
unspecified (0),
keyCompromise (1),
cACompromise (2),
affiliationChanged (3),
superseded (4),
cessationOfOperation (5),
certificateHold (6),
removeFromCRL (8),
privilegeWithdrawn (9),
aACompromise (10)
}
Код инструкции приостановки является некритичным расширением записи
Дата недействительности является некритическим расширением записи
При обработке
Рассмотрим алгоритм
Действительные пути начинаются с сертификатов, выпущенных доверенным корневым органом. Алгоритм должен иметь открытый ключ корневого СА, имя корневого СА и все ограничения, накладываемые на множества путей, которые могут считаться действительными.
Выбор доверенного корневого органа является вопросом политики: это может быть самый верхний СА в иерархии, либо CA, который выпустил свой(и) сертификат(ы) для проверки, или какой-то другой СА. Процедура
Рассмотрим шаги, которые необходимо выполнить, чтобы определить, имеет ли сертификат статус отмененного или приостановленного, когда
При
Например, некоторым клиентам не требуется поддержка расширения отображения политики безопасности. Клиенты, которые не поддерживают данное расширение, могут пропустить шаги
Алгоритм проверяет действительность сертификата относительно текущей даты и времени. Также можно поддерживать проверку действительности относительно некоторой точки в прошлом. Заметим, что механизмы не позволяют проверять действительность сертификата относительно времени вне периода действительности сертификата.
Доверенный начальный сертификат является входом в алгоритм. Для
Исходная цель
Для достижения данной цели процесс
х в {1, ..., n-1} х+1.1 выпущен доверенным начальным сертификатом.n является действительным сертификатом.х в {1, ..., n-1} сертификат был действительным в момент запроса.Когда начальный доверенный сертификат представлен в форме
Конкретный n, в противном случае результатом будет нулевое дерево действительной политики.
Сертификат является самовыпущенным, если DNs, которые появляются в полях субъекта и выпускающего, одинаковы и не пусты. В общем случае выпускающие и
Данный раздел описывает алгоритм, состоящий из четырех основных шагов:
Шаги (1) и (4) выполняются только один раз. Шаг (2) выполняется для всех сертификатов в пути. Шаг (3) выполняется для всех сертификатов в пути, за исключением последнего. На рис.17.1 представлена высокоуровневая диаграмма потока для данного алгоритма.
Данный алгоритм предполагает наличие следующих семи входов:
User-initial-policy-set: множество User-initial-policy-set имеет специальное значение anyРolicy, если пользователю политика сертификации не важна.Initial-policy-mapping-inhibit , который определяет, является ли отображение политики допустимым в сертификационном пути.Initial-explicit - policy, который определяет, что путь должен быть действительным для, по крайней мере, одной сертификационной политики в user-initial-policy-set.Initial-any-policy-inhibit , который определяет, должен ли anyPolicy обрабатываться, если он включен в сертификат.
(рис 17.1) Диаграмма потока при обработке сертификационного пути
Данная фаза инициализации устанавливает одиннадцать переменных состояния на основании семи входов:
Valid_policy_tree: дерево политик сертификации с соответствующими необязательными квалификаторами; каждый из листьев дерева является действительной политикой на данной стадии в NULL. После того как дерево установлено в NULL, обработка политики прекращается.
Каждый узел в valid_policy_tree включает четыре объекта данных: действительную политику, множество соответствующих квалификаторов политики, множество из одного или более ожидаемых значений политики и индикатор критичности. Если узел имеет глубину х, компоненты узла имеют следующую семантику:
Valid_policy есть единственный х.Qualifier_set является множеством квалификаторов политики, связанных с действительной политикой в сертификате х.Criticality_indicator определяет, было ли расширение политики в сертификате х маркировано как критичное.Expected_policy_set содержит один или более OIDs политик, которые должны соответствовать данной политике в сертификате х+1.
Начальным значением valid_policy_tree является единственный узел с valid_policy anyPolicy, пустым qualifier_set, expected_policy_set с единственным значением anyPolicy и criticality_indicator FALSE. Считается, что данный узел имеет глубину ноль.
Permitted_subtrees: множество корневых имен для каждого типа имени (например, Х.500 уникальные имена, e-mail адреса или IP-адреса), определяющее множество поддеревьев, в которых все имена субъектов в последующих сертификатах в сертификационном пути должны считаться действительными. Данная переменная включает множество для каждого типа имени: начальное значение для множества Distinguished Names является множеством всех уникальных имен; начальное значение множества имен RFC822 является множеством всех RFC822 имен и т.д.Excluded_subtrees: множество корневых имен для каждого типа имени (например, Х.500 уникальное имя, email адреса или IP-адреса), определяющее множество поддеревьев, в которых имя субъекта в последующих сертификатах в сертификационном пути не может считаться действительным. Данная переменная включает множество для каждого типа имени, и начальное значение для каждого множества является пустым.Inhibit_any-policy: целое, которое определяет, можно ли считать идентификатор политики anyPolicy принимаемым. Целое определяет число игнорируемых несамовыпущенных сертификатов, обрабатываемых до anyPolicy, если он присутствует в сертификате. Однажды установленная, данная переменная может уменьшаться, но не может возрастать. Это означает, что если сертификат в пути не допускает обработку anyPolicy, последующие сертификаты не могут разрешить принимать данную политику. Если initial-any-policy-inhibit установлено, то начальное значение есть 0, в противном случае начальное значение есть n+1.Policy_mapping: целое, которое определяет, допустимо ли отображение политики. Целое определяет число несамовыпущенных сертификатов, которые могут быть обработаны до запрещения отображения политики. Однажды установленная, данная переменная может уменьшаться, но не может возрастать. Таким образом, если сертификат в пути указывает, что отображение политики недопустимо, это не может быть перекрыто следующим сертификатом. Если initial-policy-mapping-inhibit установлено, то начальное значение есть 0, в противном случае начальное значение есть n+1.Working_public_key_algorithm: Working_public_key_algorithm инициализируется из алгоритма Working_public_key: открытый ключ, используемый для проверки подписи сертификата. Working_public_key инициализируется из Working_public_key_parameters: параметры, связанные с текущим открытым ключом, который может требоваться для проверки подписи (в зависимости от алгоритма). Переменная working_public_key_parameters инициализируется из параметров Working_issuer_name: уникальное имя выпускающего, ожидаемое в следующем сертификате в цепочке. Working_issuer_name инициализируется доверенным выпускающим, указанным в информации доверенного начального сертификата.Max_path_length: данное целое инициализируется в n, уменьшается для каждого несамовыпущенного сертификата в пути и может быть уменьшено до значения в поле ограничения длины пути с расширением базовых ограничений сертификата СА.После завершения шагов инициализации выполняются основные шаги обработки, описываемые ниже.
Действия по основной обработке сертификата, выполняемые для сертификата i (для всех i в [1..n] ), перечислены ниже.
working_public_key_algirithm, с использованием working_public_key и working_public_parameters.working_issuer_name.i является самовыпущенным, и это не последний сертификат в пути, пропустить данный шаг для сертификата i. В противном случае убедиться, что имя субъекта расположено в одном из Permitted_subtrees для уникальных имен Х.500 и что каждое из альтернативных имен в расширении subjectAltName (критичном или некритичном) расположено в одном Permitted_subtrees для данного типа имени.i является самовыпущенным, и это не последний сертификат в пути, пропустить данный шаг для сертификата i. В противном случае убедиться, что имя субъекта не расположено ни в одном из Excluded_subtrees для уникальных имен Х.500 и что каждое альтернативное имя в расширении subjectAltName (критичное или некритичное) не расположено ни в одном из Excluded_subtrees для данного типа имени.valid_policy_tree не NULL, обработать информацию политики с помощью следующих шагов в указанном порядке:P-OID обозначает P-Q обозначает множество квалификаторов для политики Р. Выполняются следующие шаги в указанном порядке: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.
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.
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.
valid_policy_tree глубины i-1 или менее без каких-либо подчиненных узлов, удалить данный узел. Повторять этот шаг до тех пор, пока не останется узлов глубины i-1 или менее без подчиненных узлов.Например, рассмотрим valid_policy_tree, показанную на рис. 17.6. Два узла глубины i-1, которые помечены ‘X’, не имеющие подчиненных узлов, удаляются. Применяя данное правило к результирующему дереву, узел глубины i-2, помеченный как ‘Y’, будет удален. Следующее применение правила не вызовет удаления каких-либо узлов, и данный шаг завершится.
criticality_indicator во всех узлах глубины i в TRUE. Если расширение политик сертификации было помечено как некритичное, установить criticality_indicator во всех узлах глубины i в FALSE.
(рис 17.3) Обработка точного соответствия
(рис 17.4) Обработка несоответствующих политик, когда конечный узел специфицирует anyPolicy
(рис 17.5) Обработка несоответствующих политик, когда расширение политик сертификации специфицирует anyPolicy
(рис 17.6) Сокращение valid_policy_treevalid_policy_tree в NULL.explicit_policy больше нуля, либо valid_policy_tree не эквивалентно NULL ;Если любой из шагов (1), (2), (3) или (6) не завершается успешно, процедура прекращается, возвращается индикация неудачной проверки и соответствующая причина.
Если i не равно n, продолжается выполнение подготовительных шагов. Если i равно n, выполняются шаги wrap-up.
Для подготовки обработки сертификата 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 или меньше без подчиненных узлов.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.inhibit_any-policy не 0, уменьшить inhibit_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 и выполнить базовую обработку сертификата, описанную в предыдущем пункте.
Для завершения обработки сертификата конечного участника выполнить следующие шаги для сертификата n:
n не является самовыпущенным, и значение explicit_policy не 0, уменьшить explicit_policy на 1.requireExplicitPolicy присутствует и имеет значение 0, установить переменную состояния explicit_policy в 0.subjectPublicKey сертификата для working_public_key.subjectPublicKeyInfo сертификата содержит поле алгоритма с ненулевыми параметрами, определить параметры как переменную working_public_key_parameters.Если поле subjectPublicKeyInfo сертификата содержит поле алгоритма с нулевыми параметрами или параметры опущены, сравнить алгоритм subjectPublicKeyInfo сертификата с working_public_key_algorithm. Если subjectPublicKeyInfo и working_public_key_algorithm различны, установить working_public_key_parameters в null.
subjectPublicKey сертификата переменной working_public_key_algorithm.n. Обработать все другие распознанные некритичные расширения, представленные в сертификате n.valid_policy_tree и user-initial-policy-set следующим образом:valid_policy_tree есть NULL, пересечение есть NULL.valid_policy_tree есть не NULL и user-initial-policy-set есть any-policy, пересечение есть valid_policy_tree.valid_policy_tree есть не NULL и user-initial-policy-set есть не any-policy, вычислить пересечение valid_policy_tree и user-initial-policy-set следующим образом:valid_policy для anyPolicy. Это есть valid_policy_node_set.valid_policy любого узла в valid_policy_node_set установлено не в user-initial-policy-set и не в anyPolicy, удалить данный узел и все подчиненные узлы.valid_policy_tree включает узел глубины n с valid_policy anyPolicy и user-initial-policy-set есть не any-policy, выполнить следующие шаги:P-Q в qualifier_set в узле глубины n с valid_policy anyPolicy.P-OID в user-initial-policy-set, который не содержит значение valid_policy узла, создать подчиненный узел, чьим родителем является узел глубины n-1 с valid_policy anyPolicy. Установить значения в подчиненном узле следующим образом: установить valid_policy в P-OID ; установить qualifier_set в P-Q ; копировать criticality_indicator из узла глубины n с valid_policy anyPolicy ; установить expected_policy_set в {P-oid }.n с valid_policy anyPolicy.valid_policy_tree глубины n-1 или менее без подчиненных узлов, удалить этот узел. Повторять данный шаг до тех пор, пока не останется узлов глубины n-1 без подчиненных узлов.Если либо (1) значение переменной explicit_policy больше нуля, либо (2) valid_policy_tree не есть NULL, то обработка пути выполнена.
Если обработка пути выполнена, процедура завершается, возвращая индикатор успешного завершения вместе с заключительными значениями valid_policy_tree, working_public_key и working_public_key_algorithm working_public_key_parameters.
Алгоритм
Выбор одного или нескольких доверенных CАs является локальной прерогативой. Система может предоставлять любой из доверенных CАs в качестве доверенного корневого сертификата для конкретного пути. Входы для алгоритма
Также можно специфицировать расширенную версию приведенной выше процедуры обработки SubordinationToCA неявно предполагается для оставшегося
Рассмотрим шаги, позволяющие определить, имеет ли сертификат статус отмененного или приостановленного, в том случае, если
Данный алгоритм предполагает, что все необходимые
Данный алгоритм определяет множество входов, множество переменных состояния и шаги обработки, которые выполняются для каждого сертификата в пути.
Для поддержки обработки отмены алгоритму требуется два входа:
basicConstraints можно убедиться, что рассматриваемый сертификат связан с СА или с конечным участником. Если расширения cRLDistributionsPoint и freshestCRL присутствуют, алгоритм использует их для определения статуса отмены.Use-deltas: данный булевый вход определяет, применяются ли Для поддержки обработки
Reasons_mask: данная переменная содержит множество причин отмены, поддерживаемых для обрабатываемых unspecified, superseded, cessationOfOperation, certificateHold, privilegeWithdrawn и aACompromise. Специальное значение all-reasons используется для обозначения множества всех возможных членов. Данная переменная инициализируется в пустое множество.Cert_status: данная переменная содержит unspecified, keyCompromise, caCompromise, affiliationChanged, superseded, cessationWithdrawn, aACompomise, специальное значение UNREVOKED или специальное значение UNDETERMINED. Данная переменная инициируется в специальное значение UNREVOKED.Interim_reasons_mask: это множество причин отмены, поддерживаемых Замечание: в некоторых окружениях нет необходимости проверять все коды причин. Например, некоторые окружения имеют дело только с caCompromise и keyCompromise для сертификатов СА. Данный алгоритм проверяет все коды причин. Дополнительная обработка и переменные состояния могут потребоваться для ограничения проверки подмножества кодов причин.
Данный алгоритм начинается с предположения, что сертификат не отменен. Алгоритм проверяет один или более
Для каждой точки распространения (DP) в расширении сертификата точек распространения (reasons_mask не all-reasons) и (cert_status есть UNREVOKED) ) выполнить следующее:
next update, выполнить следующие действия:use-deltas установлен и либо сертификат, либо freshest next update, которое больше текущего времени.next update в новом next update и use-deltas установлен, получить текущий cRLIssuer, убедиться, что поле выпускающего в cRLIssuer в DP, и что indrectCRL. В противном случае убедиться, что выпускающий cRLIssuer DP.onlyContainsUserCerts установлено в расширении сА.onlyContainsCACerts установлено в расширении сА.onlyContainsAttributeCerts не установлено.use-deltas, проверить выпускающего и interim_reasons_mask для данного onlySomeReasons и DP включает reasons, то установить interim_reasons_mask в пересечение reasons в DP и onlySomeReasons в расширении onlySomeReasons, но в DP опущены reasons, то установить interim_reasons_mask в значение onlySomeReasons в расширении onlySomeReasons, но DP включает reasons, то установить interim_reasons_mask в значение DP reasons.onlySomeReasons и в DP опущены reasons, то установить interim_reasons_mask в специальное значение all-reasons.interim_reasons_mask включает одну или более reasons, которые не включены в reasons_mask.cRLSign.use-deltas установлен, проверить действительность подписи для use-deltas установлен, выполнить поиск для сертификата в cert_status в значение, соответствующее указанной причине, следующим образом:cert_status в значение расширения записи cert_status в значение unspecified.cert_status есть UNREVOKED, то выполнить поиск для сертификата в cert_status в указанную причину, как описано в шаге (9).cert_status есть removeFromCRL ), то установить cert_status в UNREVOKED.Если reasons_mask есть all- или cert_status не UNREVOKED, то статус отмены определен, так как возвращается cert_status.
Если cRLIssuer, и имя точки распространения выпускающего сертификат. Это означает, что последовательность имен в fullName создается из поля выпускающего сертификат, а также расширения issuerAltName сертификата. Если статус отмены остается неопределенным, то возвращается cert_status UNDETERMINED.
Главным в данном стандарте является формат и содержимое сертификатов и
Однако факторы безопасности, внешние по отношению к данной спецификации, могут оказывать влияние на гарантии, предоставляемые
Процедуры, выполняемые САs и RАs для корректного связывания идентификации пользователя и его открытого ключа, заметно влияют на гарантию того, что размещено в сертификате. Доверяющие группы должны иметь возможность просматривать регламент практики сертификации СА. Это особенно важно при выпуске сертификатов для других САs.
Использование одной пары ключей как для подписывания, так и для других целей категорически неприемлемо. Использование отдельных пар ключей для подписывания и для управления ключом обеспечивает пользователям определенные преимущества. Такое разделение связано с тем, что потеря или раскрытие ключа подписывания будет отличаться от потери или раскрытия ключа управления ключом. Использование различных пар ключей позволяет создавать сбалансированные и гибкие ответы. Также различные периоды действительности и длины ключей для каждой пары могут более соответствовать конкретным прикладным окружениям.
К сожалению, некоторые наследуемые приложения (например, TLS/SSL) используют единственную пару ключей для подписывания и для управления ключом.
Критическим фактором безопасности является защита закрытых ключей. Недостаточная защита пользователями своих закрытых ключей позволяет атакующему подделывать их подписи, либо дешифровать их конфиденциальную информацию. Компрометация закрытого ключа подписывания СА может иметь катастрофические последствия. Если атакующему удалось незаметно получить закрытый ключ СА, он может выпускать поддельные сертификаты и
САs должны поддерживать безопасное архивирование ключей подписывания. Безопасность процедур архивирования ключей является критичным фактором при возможности раскрытия ключа.
Доступность и своевременное обновление информации отмены позволяют гарантировать корректность информации, хранящейся в сертификате. Хотя срок действия сертификата и истекает естественным образом, в течение его жизненного цикла могут произойти события, негативно влияющие на связывание субъекта и открытого ключа. Если информация отмены несвоевременна или недоступна, гарантия связывания существенно понижается. Доверяющие группы могут не иметь возможности обрабатывать каждое критичное расширение, которое может появиться в
Алгоритм
Кроме того, когда произошла компрометация ключа доверенного СА, пользователю необходимо модифицировать информацию, предоставляемую подпрограммам
Качество реализаций, которые обрабатывают сертификаты, также влияет на степень предоставляемых гарантий. Алгоритм
Связывание между ключом и субъектом сертификата не может быть более сильным, чем реализация криптографического модуля и алгоритмов, используемых при создании подписи. Короткие длины ключей или слабые хэш-алгоритмы ограничивают использование сертификата. САs должны следить за развитием криптографии и внедрять наиболее сильные криптографические технологии. Кроме того, САs должны отклонять выпуск сертификатов для САs или конечных участников, которые создают слабые подписи.
Несогласованность приложений в правилах сравнения имен может привести к тому, что будет принят недействительный
САs должны представить уникальное имя в поле
Кроме того, ограничения имени для уникальных имен должны быть установлены идентично представлениям, используемым в поле субъекта или расширении . Если это не так, то ограничения имени, установленные как excludedSubTrees, не будут соответствовать, и недействительные пути будут приниматься, и ограничения имени, выраженные как permittedSubtrees, не будут соответствовать, и действительные пути будут отвергаться. Для того, чтобы избежать приема недействительных путей, САs должны установить ограничения имени для уникальных имен как permittedSubtrees везде, где это возможно.
Для получения официальных документов о завершении программы дополнительного профессионального образования (удостоверения о повышении квалификации, дипломов о профессиональной переподготовке и MBA) необходимо предоставить:
Внимание! Вы можете не заказывать доставку бумажной версии официального документы, а скачать его в электронном виде и распечатать самостоятельно. Информация о выданном документе в течение 1 месяца загружается в Федеральную информационную систему «Федеральный реестр сведений о документах об образовании и (или) о квалификации, документах об обучении» - ФИС ФРДО.
Доступ на новый сайт осуществляется с использованием адреса электронной почты, который был указан вами при регистрации на "старом". Мы постарались перенести все ваши данные с прежнего ресурса, однако не исключена вероятность потери части информации.
При возникновении проблемы со входом, воспользуйтесь функцией сброса пароля
Если вы обнаружите несоответствия, пожалуйста, сообщите нам.