Усиленная квалифицированная подпись: различия между версиями
Bircoph (обсуждение | вклад) (Новая страница: «Работать с усиленной квалифицированной цифровой подписью можно не только с помощью проприетарных продуктов, таких как CryptoPro CSP и Vipnet CSP, но и с помощью свободного ПО, что и рассматривается далее. = Подготовка = 1. В качестве алгоритм...») |
мНет описания правки |
||
(не показано 5 промежуточных версий 1 участника) | |||
Строка 1: | Строка 1: | ||
Работать с усиленной квалифицированной цифровой подписью можно не только с помощью проприетарных продуктов, таких как[[Alt-csp-cryptopro | CryptoPro CSP]] и [[ViPNet_CSP | Vipnet CSP]], но и с помощью свободного ПО, что и рассматривается далее. | Работать с усиленной квалифицированной цифровой подписью (см. определение в [https://www.consultant.ru/document/cons_doc_LAW_112701/d9cd621c949a3c9efef51c2884c247e18ab9908b/ 63-ФЗ, статье 5, пункте 4]) можно не только с помощью проприетарных продуктов, таких как[[Alt-csp-cryptopro | CryptoPro CSP]] и [[ViPNet_CSP | Vipnet CSP]], но и с помощью свободного ПО, что и рассматривается далее. | ||
= Подготовка = | == Подготовка == | ||
1. В качестве алгоритма шифрования используется ГОСТ, поэтому нужно установить и настроить [[ГОСТ_в_OpenSSL | ГОСТ в OpenSSL]]. | 1. В качестве алгоритма шифрования используется ГОСТ, поэтому нужно установить и настроить [[ГОСТ_в_OpenSSL | ГОСТ в OpenSSL]]. | ||
2. Затем следует | 2. Затем следует установить CA-сертификаты: | ||
apt-get install ca-gost-certificates-auc-crl | # apt-get install ca-gost-certificates-auc-crl | ||
= Структура цифровой подписи = | == Структура цифровой подписи == | ||
Усиленная квалифицированная подпись обычно представляет собой отделяемую подпись и публичную часть ключа подписи в pkcs7 контейнере в '''DER''' формате. | |||
2. CA для подписи может не оказаться в ''ca-gost-certificates*'' (как промежуточного, так и корневого), в таком случае можно использовать URL для их получения из самой подписи: | == Проверка подписи == | ||
$ openssl pkcs7 -print_certs -inform | |||
1. Проверка выполняется с помощью ''openssl-smime'': | |||
openssl smime -verify -inform der -in file.sig -content file | |||
2. CA для подписи может не оказаться в ''ca-gost-certificates*'' (как промежуточного, так и корневого), тогда возникнет ошибка: | |||
Verification failure | |||
140321347796480:error:21075075:PKCS7 routines:PKCS7_verify:certificate verify error:crypto/pkcs7/pk7_smime.c:284:Verify error:unable to get local issuer certificate | |||
в таком случае можно использовать URL для их получения из самой подписи: | |||
$ openssl pkcs7 -print_certs -inform der -in file.sig -noout -text | grep "CA Issuers" | |||
CA Issuers - URI:http://uc.nalog.ru/crt/ca_fns_russia_2019_ul.crt | CA Issuers - URI:http://uc.nalog.ru/crt/ca_fns_russia_2019_ul.crt | ||
CA Issuers - URI:http://c0000-app005/crt/ca_fns_russia_2019_ul.crt | CA Issuers - URI:http://c0000-app005/crt/ca_fns_russia_2019_ul.crt | ||
Строка 19: | Строка 28: | ||
Забираем сертификат: | Забираем сертификат: | ||
wget http://uc.nalog.ru/crt/ca_fns_russia_2019_ul.crt | wget http://uc.nalog.ru/crt/ca_fns_russia_2019_ul.crt | ||
Аналогично по необходимости достаём корневой сертификат: | |||
$ openssl x509 -inform der -in ca_fns_russia_2019_ul.crt -noout -text | grep "CA Issuer" | |||
CA Issuers - URI:http://reestr-pki.ru/cdp/guc_gost12.crt | |||
$ wget http://reestr-pki.ru/cdp/guc_gost12.crt | |||
Преобразуем оба сертификата в PEM-формат и объединяем: | |||
$ openssl x509 -inform der -in ca_fns_russia_2019_ul.crt -out ca_fns_russia_2019_ul.pem | |||
$ openssl x509 -inform der -in guc_gost12.crt -out guc_gost12.crt.pem | |||
$ cat ca_fns_russia_2019_ul.pem guc_gost12.crt.pem > ca.pem | |||
Теперь можно проверить подпись файла: | |||
$ openssl smime -verify -inform der -in file.sig -content file -CAfile ca.pem | |||
[содержимое file] | |||
Verification successful | |||
== Особенности применения == | |||
Обычно подписываемые текстовые файлы идут с CRLF терминацией, которая при пересылке может быть преобразована в CR и подпись станет недействительной. | |||
Восстановить исходный файл можно с помощью {{cmd|unix2dos}} из пакета {{pkg|dos2unix}}: | |||
$ unix2dos file.old file.new |
Текущая версия от 10:36, 14 июня 2023
Работать с усиленной квалифицированной цифровой подписью (см. определение в 63-ФЗ, статье 5, пункте 4) можно не только с помощью проприетарных продуктов, таких как CryptoPro CSP и Vipnet CSP, но и с помощью свободного ПО, что и рассматривается далее.
Подготовка
1. В качестве алгоритма шифрования используется ГОСТ, поэтому нужно установить и настроить ГОСТ в OpenSSL.
2. Затем следует установить CA-сертификаты:
# apt-get install ca-gost-certificates-auc-crl
Структура цифровой подписи
Усиленная квалифицированная подпись обычно представляет собой отделяемую подпись и публичную часть ключа подписи в pkcs7 контейнере в DER формате.
Проверка подписи
1. Проверка выполняется с помощью openssl-smime:
openssl smime -verify -inform der -in file.sig -content file
2. CA для подписи может не оказаться в ca-gost-certificates* (как промежуточного, так и корневого), тогда возникнет ошибка:
Verification failure 140321347796480:error:21075075:PKCS7 routines:PKCS7_verify:certificate verify error:crypto/pkcs7/pk7_smime.c:284:Verify error:unable to get local issuer certificate
в таком случае можно использовать URL для их получения из самой подписи:
$ openssl pkcs7 -print_certs -inform der -in file.sig -noout -text | grep "CA Issuers" CA Issuers - URI:http://uc.nalog.ru/crt/ca_fns_russia_2019_ul.crt CA Issuers - URI:http://c0000-app005/crt/ca_fns_russia_2019_ul.crt
Забираем сертификат:
wget http://uc.nalog.ru/crt/ca_fns_russia_2019_ul.crt
Аналогично по необходимости достаём корневой сертификат:
$ openssl x509 -inform der -in ca_fns_russia_2019_ul.crt -noout -text | grep "CA Issuer" CA Issuers - URI:http://reestr-pki.ru/cdp/guc_gost12.crt $ wget http://reestr-pki.ru/cdp/guc_gost12.crt
Преобразуем оба сертификата в PEM-формат и объединяем:
$ openssl x509 -inform der -in ca_fns_russia_2019_ul.crt -out ca_fns_russia_2019_ul.pem $ openssl x509 -inform der -in guc_gost12.crt -out guc_gost12.crt.pem $ cat ca_fns_russia_2019_ul.pem guc_gost12.crt.pem > ca.pem
Теперь можно проверить подпись файла:
$ openssl smime -verify -inform der -in file.sig -content file -CAfile ca.pem [содержимое file] Verification successful
Особенности применения
Обычно подписываемые текстовые файлы идут с CRLF терминацией, которая при пересылке может быть преобразована в CR и подпись станет недействительной.
Восстановить исходный файл можно с помощью unix2dos из пакета dos2unix:
$ unix2dos file.old file.new