- Перенаправление ссылок (Redirect)
- Просроченный CRL
- Сбои на сетевом и транспортном уровне
- Доступ к токену pkcs#11
- Инструкции и разъяснения
- Обязательные атрибуты квалифицированных сертификатов
- Проверка валидности сертификата по сос/crl
- Проверка срока действия сертификата
- Чем должны руководствоваться уц при публикации crl
Перенаправление ссылок (Redirect)
УЦ опубликовал в сертификате конкретный URL, но на сервере, где этот ресурс опубликован, происходит перенаправление клиента на другой URL.
Вызывающая система на Java может легко определить, что включено перенаправление следующим образом:
private static final String ATTENTION_CRL_REDIRECT_DETECTED = "Attention CRL redirect detected: ";
private static final String LOCATION = "Location";
URL url = new URL(crlURL);
InputStream crlStream = null;
URLConnection connection = url.openConnection();
String redirect = connection.getHeaderField(LOCATION);
if (redirect != null) {
throw new DownloadCRLException(
ATTENTION_CRL_REDIRECT_DETECTED crlURL STRING_DIRECTION redirect);
}Просроченный CRL
Сертификат может содержать несколько ссылок на списки отзыва. Внутри каждого CRL могут быть вложены ссылки на его дельты с иными, более короткими сроками жизни, а следовательно, обновляемые чаще.
Хорошая информационная система должна загрузить список по каждой доступной ссылке, загрузить все вложенные дельты и убедиться, что серийный номер проверяемого сертификата не встречается ни в одном из них.
Рекурсивный алгоритм поиска в коробках, вложенных друг в друга, хорошо подходит для решения этой задачи.
А чтобы не загружать CRL каждый раз при интенсивном обмене в автоматических информационных системах, списки отзыва можно кэшировать на заданное разумное время, но не больше срока их жизни.
Были случаи, когда по каким-то причинам УЦ своевременно не обновлял CRL.
Список отзыва с истекшим сроком действия, естественно, не принимается. И если для сертификата нет или не удается загрузить по другим ссылкам действующий список, то общий результат будет отрицательным, а документ с ЭП отвергнут.
Сбои на сетевом и транспортном уровне
В качестве примера можно привести ситуацию со сбоем или некорректными настройками и состоянием на оборудовании удостоверяющего центра или сайта организации.
Доступ к токену pkcs#11
Для доступа к токену и сертификатам, хранящимя на нем, воспользуемся пакетом
. Пакет распространяется как в бинарниках, так и в исходниках. Исходные коды пригодятся позднее, когда мы будем добавлять в пакет поддержку токенов с российской криптографией. Загрузить пакет TclPKCS11 можно двумя способами, либо командой tcl вида:
load <библиотека tclpkcs11> Tclpkcs11Либо загрузить просто как пакет pki::pkcs11, предварительно положив библиотеку tclpkcs11 и файл pkgIndex.tcl в удобный вам каталог (в нашем случае это подкаталог pkcs11 текущего каталога) и добавив его в путь auto_path:
#lappend auto_path [file dirname [info scrypt]]
lappend auto_path pkcs11
package require pki
package require pki::pkcs11
Поскольку нас интересуют токены прежде всего с поддержкой российской криптографии, то из пакета TclPKCS11 мы будем задействовать следующие
::pki::pkcs11::loadmodule <filename> -> handle
::pki::pkcs11::unloadmodule <handle> -> true/false
::pki::pkcs11::listslots <handle> -> list: slotId label flags
::pki::pkcs11::listcerts <handle> <slotId> -> list: keylist
::pki::pkcs11::login <handle> <slotId> <password> -> true/false
::pki::pkcs11::logout <handle> <slotId> -> true/falseСразу оговоримся, что функции login и logout здесь рассматриваться не будут. Это связано с тем, что в рамках этой статьи мы будем иметь дело только с сертификатами, а они являются публичными объектами токена. Для доступа к публичным объектам нет необходимости авторизовываться через PIN-код на токене.
Первая функция ::pki::pkcs11::loadmodule предназначена для загрузки библиотеки PKCS#11, которая поддерживает токен/смарткарту, на котором находятся сертификаты. Библиотека может быть получена либо при приобретении токена, либо загружена из Интернета или она была предустановлена на компьютере.
set filelib "/usr/local/lib64/librtpkcs11ecp_2.0.so"
set handle [::pki::pkcs11::loadmodule $filelib]
Соответственно есть функция выгрузки загруженной библиотеки:
::pki::pkcs11::unloadmodule $handleПосле того как была загружена библиотека и у нас есть ее handle можно получить список слотов, поддерживаемых этой библиотекой:
Инструкции и разъяснения
Федеральным казначейством введен в эксплуатацию портал заявителя «Формирование запросов на сертификаты» (ФЗС), который оптимизирует процесс получения сертификатов и позволяет:
· формировать первичный запрос на сертификат (требуется посещение территориального органа Федерального казначейства (ТОФК);
· осуществлять плановую смену сертификата без посещения ТОФК с использованием электронной подписи и соответствующего ей действующего сертификата, выданного Удостоверяющим центром Федерального казначейства (УЦ ФК) после 1 сентября 2021 года владельцу сертификата и лицу, действующему от имени заявителя, при условии, что ранее предоставленные в УЦ ФК сведения не изменились;
· осуществлять поиск выданных УЦ ФК сертификатов;
· формировать справку о статусе сертификата;
· проверять подлинность электронной подписи электронного документа.
С более подробной информацией можно
в разделе «ГИС»«Удостоверяющий центр».
Информацию о том, как сформировать первичный запрос или осуществить замену сертификата можно найти в разделе «ГИС»/«Удостоверяющий центр»/»Памятки, инструкции».
При наличии вопросов необходимо обращаться в ТОФК по месту нахождения юридического лица.
Обязательные атрибуты квалифицированных сертификатов
Состав квалифицированного сертификата регулируется Федеральным законом “Об электронной подписи” от 06.04.2021 N 63-ФЗ и Приказом ФСБ РФ от 27 декабря 2021 г. N 795 “Об утверждении Требований к форме квалифицированного сертификата ключа проверки электронной подписи”.
Несколько раз встречались квалифицированные сертификаты проверки подписи юридических лиц, выпущенные аккредитованным УЦ, в которых в поле Subject – субъект сертификации отсутствовал атрибут L – Местоположение.
Контроль квалифицированных сертификатов нашей системы отвергал данный сертификат и документы с ЭП партнера.
Удостоверяющий центр данную ситуацию комментировал так:
атрибут L для юридических лиц, зарегистрированных в г. Москве, не проставляется согласно 63-ФЗ и Приказа №795
На конкретный пункты Закона и Приказа в УЦ не ссылались.
Собственный повторный анализ юридических аспектов показал:
63-ФЗ от 06.04.2021 “Об электронной подписи”
Статья 14. Сертификат ключа проверки электронной подписи
2. Сертификат ключа проверки электронной подписи должен содержать следующую информацию:
2) фамилия, имя и отчество (если имеется) – для физических лиц, наименование и место нахождения – для юридических лиц или иная информация, позволяющая идентифицировать владельца сертификата ключа проверки электронной подписи;
Статья 17. Квалифицированный сертификат
2. Квалифицированный сертификат должен содержать следующую информацию:
2) фамилия, имя, отчество (если имеется) владельца квалифицированного сертификата – для физического лица, не являющегося индивидуальным предпринимателем, либо фамилия, имя, отчество (если имеется) и основной государственный регистрационный номер индивидуального предпринимателя – владельца квалифицированного сертификата – для физического лица, являющегося индивидуальным предпринимателем, либо наименование, место нахождения и основной государственный регистрационный номер владельца квалифицированного сертификата – для российского юридического лица, либо наименование, место нахождения владельца квалифицированного сертификата, а также идентификационный номер налогоплательщика (при наличии) – для иностранной организации (в том числе филиалов, представительств и иных обособленных подразделений иностранной организации);
Приказ ФСБ РФ от 27 декабря 2021 г. № 795
III. Требования к порядку расположения полей квалифицированного сертификата
5) stateOrProvinceName (наименование штата или области).
В качестве значения данного атрибута имени следует использовать текстовую строку, содержащую наименование соответствующего субъекта Российской Федерации. Объектный идентификатор типа атрибута stateOrProvinceName имеет вид 2.5.4.8;
6) localityName (наименование населенного пункта).
В качестве значения данного атрибута имени следует использовать текстовую строку, содержащую наименование соответствующего населенного пункта. Объектный идентификатор типа атрибута localityName имеет вид 2.5.4.7;
7) streetAddress (название улицы, номер дома).
В качестве значения данного атрибута имени следует использовать текстовую строку, содержащую часть адреса места нахождения соответствующего лица, включающую наименование улицы, номер дома, а также корпуса, строения, квартиры, помещения (если имеется). Объектный идентификатор типа атрибута streetAddress имеет вид 2.5.4.9;
В сертификате партнера в имени субъекта сертификации были указаны: stateOrProvinceName (наименование штата или области), streetAddress (название улицы, номер дома).
И не указано localityName (наименование населенного пункта).
locality – Местонахождение
В Законе 63-ФЗ и Приказе №795 нет информации, что для города Москва не нужно заполнять атрибут locality – Местонахождение.
Наоборот в обоих документах на русском языке применяется термин место нахождения, чему соответствует атрибут localityName ( 2.5.4.7)
После данного разбора удалось найти документ ФСБ РФ «ИЗВЕЩЕНИЕ ОБ ИСПОЛЬЗОВАНИИ АТРИБУТА ИМЕНИ «LOCALITYNAME» ПОЛЯ «SUBJECT» В СТРУКТУРЕ КВАЛИФИЦИРОВАННОГО СЕРТИФИКАТА КЛЮЧА ПРОВЕРКИ ЭЛЕКТРОННОЙ ПОДПИСИ»
Согласно части 2.2 статьи 18 Закона об ЭП для заполнения квалифицированного сертификата в соответствии с частью 2 статьи 17 Закона об ЭП аккредитованный удостоверяющий центр запрашивает и получает из государственных информационных ресурсов, в том числе, выписку из единого государственного реестра юридических лиц в отношении заявителя ‑ юридического лица.
Таким образом, в случае отсутствия в выписке из единого государственного реестра юридических лиц информации о наименовании населенного пункта, но при наличии информации о наименовании муниципального образования, аккредитованному удостоверяющему центру для заполнения квалифицированного сертификата вместо наименования соответствующего населенного пункта следует использовать наименование соответствующего муниципального образования.
На основании изложенного в качестве значения атрибута имени «localityName» поля «subject» в структуре квалифицированного сертификата следует указывать текстовую строку, содержащую наименование соответствующего населенного пункта или соответствующего муниципального образования.
Данное извещение с разъяснениями регулятора, как правильно заполнять атрибут L в квалифицированном сертификате юридического лица, также было направлено в аккредитованный УЦ.
Прошу использовать данную информацию в работе.
Желаю всем участникам PKI удачи и успехов!
Проверка валидности сертификата по сос/crl
Первым шагом необходимо получить СОС, затем его распарсить и проверить по нему сертификат.
Список точек выдачи СОС/CRL находится в расширении сертификата с oid-ом 2.5.29.31 (id-ce-cRLDistributionPoints):
array set extcert $cert_parse(extensions)
set ::crlfile ""
if {[info exists extcert(2.5.29.31)]} {
set ::crlfile [crlpoints [lindex $extcert(2.5.29.31) 1]]
} else {
puts "cannot load CRL"
}Собственно загрузка файла с СОС/CRL ведется следующим образом:
set filecrl ""
set pointcrl ""
foreach pointcrl $::crlfile {
set filecrl [readca $pointcrl $dir]
if {$filecrl != ""} {
set f [file join $dir [file tail $pointcrl]]
set fd [open $f w]
chan configure $fd -translation binary
puts -nonewline $fd $filecrl
close $fd
set filecrl $f
break
}
#Прочитать CRL не удалось. Берем следующую точку с CRL
}
if {$filecrl == ""} {
puts "Cannot load CRL"
}Собственно для загрузки СОС/CRL используется процедура readca:
Проверка срока действия сертификата
При разборе сертифмката в переменных ::notbefore и ::notafter хранится дата, с которой сертификат может использоваться в криптографических операциях (подписать, зашифровать и т.д.), и дата окончания срока действия сертификата. Процедура проверки срока действия сертификата имеет вид:
proc cert_valid_date {} {
# Проверяем валидность сертификата по срокам действия
#Дата начала действия сертификата
set startdate $::notbefore
#Дата окончания действия сертификата
set enddate $::notafter
# Получаем текущее время в секундах
set now [clock seconds]
set isvalid 1
set reason "Certificate is valid"
if {$startdate > $now} {
set isvalid 0
#Срок действия сертификата еще не наступил
set reason "Certificate is not yet valid"
} elseif {$now > $enddate} {
set isvalid 0
#Срок действия сертификата истек
set reason "Certificate has expired"
}
return [list $isvalid $reason]
}Возвращаемый список содержит два элемента. Первый элемент может содержать либо 0 (ноль) либо 1 (один). Значение «1» указывает на то, что сертификат действует, а 0 – на то, что сертификат не действует. Причина по которой не действует сертификат раскрывается во втором элементе. Этот элемент может содержать одно из трех значений:
Валидность сертификата определяется не только периодом его действия. Действие сертификата может быть приостановлено или прекращено удостоверяющим центром, как по его инициативе, так и по заявлению владельца сертификата, например при утрате носителя с закрытым ключом.
В этом случае сертификат включается удостоверяющим центром в список отозванных сертификатов СОС/CRL, которые распространяются УЦ. Как правило, точка распространения CRL включается в сертификат. Именно по списку отозванных сертификатов и проверяется валидность сертификата.
Чем должны руководствоваться уц при публикации crl
RFC 5280 Internet X.509 Public Key Infrastructure Certificate and Certificate Revocation List (CRL) Profile
Спецификацией RFC 5280 IETF и стандартом X.509 ITU-T, разработанными Инженерным советом Интернета и Международным консультационным комитетом по телефонии и телеграфии.
В частности, пунктом 8. Security Considerations из RFC 5280
