SUPPORT-8703. Добавлена проверка цепочки сертификатов

This commit is contained in:
Наиля Алашкова 2024-11-25 13:06:44 +03:00
parent b93b8b8068
commit a3c7e63cfc
8 changed files with 478 additions and 2 deletions

View file

@ -0,0 +1,76 @@
Подписание (в автоматическом режиме) запросов в ЕСИА ключом ЭП.
Должно быть выполнено тестирование со следующими вариантами статуса сертификата ключа проверки ЭП:
1. Действительный сертификат компонента ervu-sign-module, изготовленный Удостоверяющим центром запрос в ЕСИА должен быть успешно отправлен:
1.1. Установить сертификат в систему, согласно "Инструкции по установке".
1.2. Открыть приложение - запрос в ЕСИА должен быть успешно отправлен.
2. Проверка статуса сертификата не может быть выполнена, так как в Системе отсутствует CRL, соответствующий Удостоверяющему центру запрос в ЕСИА не должен быть отправлен:
2.1. Удалить CRL, соответствующий Удостоверяющему центру, изготовившему сертификат компонента ervu-sign-module, выполнив команду от имени ervu:
/opt/cprocsp/bin/amd64/certmgr -delete -crl -store ucache -dn uc_fk@roskazna.ru
/opt/cprocsp/bin/amd64/certmgr -delete -crl -store uca -dn uc_fk@roskazna.ru
2.2. Отключить доступ к УЦ (например, прописав в /etc/hosts недоступный ip-адрес для хоста УЦ, указанного в свойствах сертификата):
Пример /etc/hosts:
127.0.0.1 crl.roskazna.ru
2.3. Перезапустить сервис подписания ervu-sign-module, чтобы сбросить кэш:
systemctl restart ervu-sign-module
2.4. Открыть приложение - запрос в ЕСИА не должен быть отправлен. Пользователю отобразится ошибка.
В логах ЛК РП должно быть следующее:
Caused by: java.lang.RuntimeException: 500 500 Internal Server Error
at ru.micord.ervu.security.esia.service.EsiaAuthService.errorHandler(EsiaAuthService.java:351) ~[classes/:1.10.0-SNAPSHOT]
at ru.micord.ervu.security.esia.service.EsiaAuthService.signMap(EsiaAuthService.java:340) ~[classes/:1.10.0-SNAPSHOT]
at ru.micord.ervu.security.esia.service.EsiaAuthService.generateAuthCodeUrl(EsiaAuthService.java:101) ~[classes/:1.10.0-SNAPSHOT]
В логах ervu-sign-module должно быть следующее:
WARN: The certificate is not trusted. CERT_TRUST_STATUS: '0x00000040'
ERROR: get_cert_chain exit with error
ERROR: sign_hash_data exit with error. Last error code: 0x00000000
ERROR: cryptopro_sign exit with error
ERROR: sign_content exit with error
ERROR: response status: '500 Internal Server Error'
CERT_TRUST_STATUS = 0x00000040 (CERT_TRUST_REVOCATION_STATUS_UNKNOWN) означает, что статус отзыва сертификата или одного из сертификатов в цепочке сертификатов неизвестен.
2.5. Восстановить доступ к УЦ. Все CRL будут автоматически установлены при следующих запросах на подпись.
3. Сертификат действителен, но выдан УЦ, корневой сертификат которого не установлен в системе запрос в ЕСИА не должен быть отправлен:
3.1. Получить цепочку сертификатов и SHA1 отпечаток корневого сертификата УЦ, выполнив команду от имени ervu:
/opt/cprocsp/bin/amd64/certmgr -list -thumbprint 0f948ba2b4866bf92e77f768a01add655daa5748 -chain
Результатом команды будет цепочка сертификатов с перечнем их свойств, из которого необходимо получить значение поля "SHA1 отпечаток" для одного из корневых сертификатов.
3.2. Из Системы удалить корневой сертификат Удостоверяющего центра, выполнив команду от имени root. Например, удалить сертификат Минцифры России, выполнив команду от имени root:
/opt/cprocsp/bin/amd64/certmgr -delete -store mRoot -thumbprint 2f0cb09be3550ef17ec4f29c90abd18bfcaad63a
3.3. Открыть приложение - запрос в ЕСИА не должен быть отправлен. Пользователю отобразится ошибка.
В логах ЛК РП должно быть следующее:
Caused by: java.lang.RuntimeException: 500 500 Internal Server Error
at ru.micord.ervu.security.esia.service.EsiaAuthService.errorHandler(EsiaAuthService.java:351) ~[classes/:1.10.0-SNAPSHOT]
at ru.micord.ervu.security.esia.service.EsiaAuthService.signMap(EsiaAuthService.java:340) ~[classes/:1.10.0-SNAPSHOT]
at ru.micord.ervu.security.esia.service.EsiaAuthService.generateAuthCodeUrl(EsiaAuthService.java:101) ~[classes/:1.10.0-SNAPSHOT]
В логах ervu-sign-module должно быть следующее:
WARN: The certificate is not trusted. CERT_TRUST_STATUS: '0x00000020'
ERROR: get_cert_chain exit with error
ERROR: sign_hash_data exit with error. Last error code: 0x80092004
ERROR: cryptopro_sign exit with error
ERROR: sign_content exit with error
ERROR: response status: '500 Internal Server Error'
CERT_TRUST_STATUS = 0x00000020 (CERT_TRUST_IS_UNTRUSTED_ROOT) означает, что сертификат или цепочка сертификатов основана на ненадежном корневом сертификате.
3.4. Восстановить все корневые сертификаты, которые были удалены, выполнив для каждого команду от имени root. Для восстановления сертификата Минцифры России выполните команду от имени root:
/opt/cprocsp/bin/amd64/certmgr -install -store mRoot -file guc2022.crt
Сертификат Минцифры России доступен по ссылке: http://reestr-pki.ru/cdp/guc2022.crt

View file

@ -0,0 +1,74 @@
Подписание (в автоматическом режиме) запросов в ЕСИА ключом ЭП.
Должно быть выполнено тестирование со следующими вариантами статуса сертификата ключа проверки ЭП:
1. Действительный сертификат компонента ervu-sign-module, изготовленный Удостоверяющим центром запрос в ЕСИА должен быть успешно отправлен:
1.1. Установить сертификат в систему, согласно "Инструкции по установке".
1.2. Открыть приложение - запрос в ЕСИА должен быть успешно отправлен.
2. Проверка статуса сертификата не может быть выполнена, так как в Системе отсутствует CRL, соответствующий Удостоверяющему центру запрос в ЕСИА не должен быть отправлен:
2.1. Удалить CRL, соответствующий Удостоверяющему центру, изготовившему сертификат компонента ervu-sign-module:
sudo -u ervu /opt/cprocsp/bin/amd64/certmgr -delete -crl -store ucache -all
sudo -u ervu /opt/cprocsp/bin/amd64/certmgr -delete -crl -store uca -all
2.2. Отключить доступ к УЦ (например, прописав в /etc/hosts недоступный ip-адрес для хоста УЦ, указанного в свойствах сертификата):
Пример /etc/hosts:
127.0.0.1 testgost2012.cryptopro.ru
2.3. Перезапустить сервис подписания ervu-sign-module, чтобы сбросить кэш:
sudo systemctl restart ervu-sign-module
2.4. Открыть приложение - запрос в ЕСИА не должен быть отправлен. Пользователю отобразится ошибка.
В логах ЛК РП должно быть следующее:
Caused by: java.lang.RuntimeException: 500 500 Internal Server Error
at ru.micord.ervu.security.esia.service.EsiaAuthService.errorHandler(EsiaAuthService.java:351) ~[classes/:1.10.0-SNAPSHOT]
at ru.micord.ervu.security.esia.service.EsiaAuthService.signMap(EsiaAuthService.java:340) ~[classes/:1.10.0-SNAPSHOT]
at ru.micord.ervu.security.esia.service.EsiaAuthService.generateAuthCodeUrl(EsiaAuthService.java:101) ~[classes/:1.10.0-SNAPSHOT]
В логах ervu-sign-module должно быть следующее:
WARN: The certificate is not trusted. CERT_TRUST_STATUS: '0x00000040'
ERROR: get_cert_chain exit with error
ERROR: sign_hash_data exit with error. Last error code: 0x00000000
ERROR: cryptopro_sign exit with error
ERROR: sign_content exit with error
ERROR: response status: '500 Internal Server Error'
CERT_TRUST_STATUS = 0x00000040 (CERT_TRUST_REVOCATION_STATUS_UNKNOWN) означает, что статус отзыва сертификата или одного из сертификатов в цепочке сертификатов неизвестен.
2.5. Восстановить доступ к УЦ. Все CRL будут автоматически установлены при следующих запросах на подпись.
3. Сертификат действителен, но выдан УЦ, корневой сертификат которого не установлен в системе запрос в ЕСИА не должен быть отправлен:
3.1. Получить цепочку сертификатов и SHA1 отпечаток корневого сертификата УЦ:
sudo -u ervu /opt/cprocsp/bin/amd64/certmgr -list -thumbprint 1f5ab193354a7701e4964711163c6b46d4a361e0 -chain
Результатом команды будет цепочка сертификатов с перечнем их свойств, из которого необходимо получить значение поля "SHA1 отпечаток" для одного из корневых сертификатов.
3.2. Из Системы удалить корневой сертификат Удостоверяющего центра. Например, удалить сертификат Тестового УЦ ООО Крипто-Про, выполнив команду:
sudo /opt/cprocsp/bin/amd64/certmgr -delete -store mRoot -thumbprint 41dcbff2ae102339bcedd0d5100ffb8e6018353d
3.3. Открыть приложение - запрос в ЕСИА не должен быть отправлен. Пользователю отобразится ошибка.
В логах ЛК РП должно быть следующее:
Caused by: java.lang.RuntimeException: 500 500 Internal Server Error
at ru.micord.ervu.security.esia.service.EsiaAuthService.errorHandler(EsiaAuthService.java:351) ~[classes/:1.10.0-SNAPSHOT]
at ru.micord.ervu.security.esia.service.EsiaAuthService.signMap(EsiaAuthService.java:340) ~[classes/:1.10.0-SNAPSHOT]
at ru.micord.ervu.security.esia.service.EsiaAuthService.generateAuthCodeUrl(EsiaAuthService.java:101) ~[classes/:1.10.0-SNAPSHOT]
В логах ervu-sign-module должно быть следующее:
WARN: The certificate is not trusted. CERT_TRUST_STATUS: '0x00000020'
ERROR: get_cert_chain exit with error
ERROR: sign_hash_data exit with error. Last error code: 0x80092004
ERROR: cryptopro_sign exit with error
ERROR: sign_content exit with error
ERROR: response status: '500 Internal Server Error'
CERT_TRUST_STATUS = 0x00000020 (CERT_TRUST_IS_UNTRUSTED_ROOT) означает, что сертификат или цепочка сертификатов основана на ненадежном корневом сертификате.
3.4. Восстановить все корневые сертификаты, которые были удалены, выполнив для каждого команду от имени root. Для восстановления сертификата Тестового УЦ ООО Крипто-Про выполните команду:
sudo /opt/cprocsp/bin/amd64/certmgr -install -store mRoot -file ~/work/ervu/certs/lkrp-mnsv93/testgost2012\(10\).crt

114
docs/ПМИ.txt Normal file
View file

@ -0,0 +1,114 @@
1. Подписание (в автоматическом режиме) запросов в ЕСИА ключом ЭП.
Должно быть выполнено тестирование со следующими вариантами статуса сертификата ключа проверки ЭП:
1.1. Действительный сертификат компонента ervu-sign-module, изготовленный Удостоверяющим центром запрос в ЕСИА должен быть успешно отправлен:
1.1.1. Установить сертификат в систему, согласно "Инструкции по установке".
1.1.2. Открыть приложение - запрос в ЕСИА должен быть успешно отправлен.
1.2. Проверка статуса сертификата не может быть выполнена, так как в Системе отсутствует CRL, соответствующий Удостоверяющему центру запрос в ЕСИА не должен быть отправлен:
1.2.1. Удалить CRL, соответствующий Удостоверяющему центру, изготовившему сертификат компонента ervu-sign-module:
/opt/cprocsp/bin/amd64/certmgr -delete -crl -store ucache -all
/opt/cprocsp/bin/amd64/certmgr -delete -crl -store uca -all
1.2.2. Отключить доступ к УЦ.
1.2.3. Перезапустить сервис подписания ervu-sign-module, чтобы сбросить кэш.
1.2.4. Открыть приложение - запрос в ЕСИА не должен быть отправлен. Пользователю отобразится ошибка.
В логах ЛК РП должно быть следующее:
Caused by: java.lang.RuntimeException: 500 500 Internal Server Error
at ru.micord.ervu.security.esia.service.EsiaAuthService.errorHandler(EsiaAuthService.java:351) ~[classes/:1.10.0-SNAPSHOT]
at ru.micord.ervu.security.esia.service.EsiaAuthService.signMap(EsiaAuthService.java:340) ~[classes/:1.10.0-SNAPSHOT]
at ru.micord.ervu.security.esia.service.EsiaAuthService.generateAuthCodeUrl(EsiaAuthService.java:101) ~[classes/:1.10.0-SNAPSHOT]
В логах ervu-sign-module должно быть следующее:
WARN: The certificate is not trusted. CERT_TRUST_STATUS: '0x00000040'
ERROR: get_cert_chain exit with error
ERROR: sign_hash_data exit with error. Last error code: 0x00000000
ERROR: cryptopro_sign exit with error
ERROR: sign_content exit with error
ERROR: response status: '500 Internal Server Error'
CERT_TRUST_STATUS = 0x00000040 (CERT_TRUST_REVOCATION_STATUS_UNKNOWN) означает, что статус отзыва сертификата или одного из сертификатов в цепочке сертификатов неизвестен.
1.2.5. Восстановить доступ к УЦ. Все CRL будут автоматически установлены при следующих запросах на подпись.
1.3. Сертификат действителен, но выдан УЦ, корневой сертификат которого не установлен в системе запрос в ЕСИА не должен быть отправлен:
1.3.1. Получить цепочку сертификатов и SHA1 отпечаток корневого сертификата УЦ:
/opt/cprocsp/bin/amd64/certmgr -list -thumbprint <sign_cert_thumbprint> -chain
где <sign_cert_thumbprint> - это SHA1 отпечаток сертификата компонента ervu-sign-module.
Результатом команды будет цепочка сертификатов с перечнем их свойств, из которого необходимо получить значение поля "SHA1 отпечаток".
1.3.2. Из Системы удалить корневой сертификат Удостоверяющего центра, выполнив команду от имени root:
/opt/cprocsp/bin/amd64/certmgr -delete -store mRoot -thumbprint <root_cert_thumbprint>
где <root_cert_thumbprint> - это SHA1 отпечаток корневого сертификата УЦ, полученный на предыдущем шаге.
1.3.3. Открыть приложение - запрос в ЕСИА не должен быть отправлен. Пользователю отобразится ошибка.
В логах ЛК РП должно быть следующее:
Caused by: java.lang.RuntimeException: 500 500 Internal Server Error
at ru.micord.ervu.security.esia.service.EsiaAuthService.errorHandler(EsiaAuthService.java:351) ~[classes/:1.10.0-SNAPSHOT]
at ru.micord.ervu.security.esia.service.EsiaAuthService.signMap(EsiaAuthService.java:340) ~[classes/:1.10.0-SNAPSHOT]
at ru.micord.ervu.security.esia.service.EsiaAuthService.generateAuthCodeUrl(EsiaAuthService.java:101) ~[classes/:1.10.0-SNAPSHOT]
В логах ervu-sign-module должно быть следующее:
WARN: The certificate is not trusted. CERT_TRUST_STATUS: '0x00000020'
ERROR: get_cert_chain exit with error
ERROR: sign_hash_data exit with error. Last error code: 0x80092004
ERROR: cryptopro_sign exit with error
ERROR: sign_content exit with error
ERROR: response status: '500 Internal Server Error'
CERT_TRUST_STATUS = 0x00000020 (CERT_TRUST_IS_UNTRUSTED_ROOT) означает, что сертификат или цепочка сертификатов основана на ненадежном корневом сертификате.
1.3.4. Восстановить все корневые сертификаты, которые были удалены, выполнив для каждого команду от имени root:
/opt/cprocsp/bin/amd64/certmgr -install -store mRoot -file <root_cert>.crt
2. Проверка ЭП маркера доступа, полученного от ЕСИА.
Должно быть выполнено тестирование со следующими вариантами статуса сертификата ключа проверки ЭП:
2.1. Действительный сертификат ЕСИА ответ ЕСИА должен быть принят:
2.1.1. Установить сертификат ЕСИА в систему, согласно "Инструкции по установке".
2.1.2. Выполнить вход через ЕСИА - ответ ЕСИА должен быть принят.
2.2. Проверка статуса сертификата не может быть выполнена, так как в Системе отсутствует CRL, соответствующий Удостоверяющему центру, изготовившему сертификат ЕСИА - ответ ЕСИА не должен быть принят:
2.2.1. Удалить CRL, соответствующий Удостоверяющему центру, изготовившему сертификат ЕСИА:
/opt/cprocsp/bin/amd64/certmgr -delete -crl -store ucache
/opt/cprocsp/bin/amd64/certmgr -delete -crl -store uCA
2.2.2. Отключить доступ к УЦ.
2.2.3. Перезапустить сервис подписания ervu-sign-module, чтобы сбросить кэш.
2.2.4. Выполнить вход через ЕСИА - ответ ЕСИА должен быть отклонен с ошибкой.
2.2.5. Восстановить доступ к УЦ. Все CRL будут автоматически установлены при следующих запросах на проверку ЭП маркера доступа, полученного от ЕСИА.
2.3. Сертификат действителен, но выдан УЦ, корневой сертификат которого не установлен в системе ответ ЕСИА не должен быть принят:
2.3.1. Получить цепочку сертификатов и SHA1 отпечаток корневого сертификата УЦ:
/opt/cprocsp/bin/amd64/certmgr -list -thumbprint <esia_cert_thumbprint> -chain
где <esia_cert_thumbprint> - это SHA1 отпечаток сертификата ЕСИА.
Результатом команды будет цепочка сертификатов с перечнем их свойств, из которого необходимо получить значение поля "SHA1 отпечаток".
2.3.2. Из Системы удалить корневой сертификат Удостоверяющего центра, выполнив команду от имени root:
/opt/cprocsp/bin/amd64/certmgr -delete -store mRoot -thumbprint <root_esia_cert_thumbprint>
где <root_esia_cert_thumbprint> - это SHA1 отпечаток корневой сертификата УЦ, полученный на предыдущем шаге.
2.3.3. Выполнить вход через ЕСИА - обработка ответа от ЕСИА должна завершиться ошибкой.
2.3.4. Восстановить все корневые сертификаты, которые были удалены, выполнив для каждого команду от имени root:
/opt/cprocsp/bin/amd64/certmgr -install -store mRoot -file <root_esia_cert>.crt