Усиленная квалифицированная подпись: различия между версиями

Материал из ALT Linux Wiki
мНет описания правки
 
(не показаны 3 промежуточные версии 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. Затем следует устаносить CA-сертификаты:
2. Затем следует установить CA-сертификаты:
  apt-get install ca-gost-certificates-auc-crl
  # apt-get install ca-gost-certificates-auc-crl


= Структура цифровой подписи =
== Структура цифровой подписи ==


Усиленная квалифицированная подпись обычное представляет собой отделяемую подпись и публичную часть ключа подписи в pkcs7 контейнере в '''DER''' формате.
Усиленная квалифицированная подпись обычно представляет собой отделяемую подпись и публичную часть ключа подписи в pkcs7 контейнере в '''DER''' формате.


= Проверка подписи =
== Проверка подписи ==


1. Проверка выполняется с помощью ''openssl-smime'':
1. Проверка выполняется с помощью ''openssl-smime'':
Строка 34: Строка 34:
  $ wget http://reestr-pki.ru/cdp/guc_gost12.crt
  $ wget http://reestr-pki.ru/cdp/guc_gost12.crt


Преобразуем оба сертификата в PEM формат и объединяем:
Преобразуем оба сертификата в PEM-формат и объединяем:
  $ openssl x509 -inform der -in ca_fns_russia_2019_ul.crt -out ca_fns_russia_2019_ul.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
  $ openssl x509 -inform der -in guc_gost12.crt -out guc_gost12.crt.pem
Строка 43: Строка 43:
  [содержимое file]
  [содержимое file]
  Verification successful
  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