- Регистрация на веб-сервисе “дія”: основные нюансы
- Генерация запроса на сертификат
- Генерация ключевой пары
- Как конвертировать ключи приват банка в m.e.doc?
- Личные данные для заполнения
- Номенклатура сертификатов
- Откуда берутся сертификаты?
- Послідовність дій користувача:
- Регистрация в мобильном приложении
- Регистрация с помощью id.gov.ua
- Словарный запас
- Список записей хранилища
- Сценарий №1 — найти следующего в связке
- Удаление записи хранилища ключей
- Як підписати документ через портал “дія”?
- Як подати документ через сервіс центрального засвідчувального органу?
- Выводы
Регистрация на веб-сервисе “дія”: основные нюансы
Регистрация на веб-сервисе возможна двумя способами: через ЭЦП (электронная цифровая подпись) и с помощью ID.gov.ua. Каждый из этих способов имеет определенную специфику, которую далее разберем немного подробнее.
Генерация запроса на сертификат
Утилита keytool может генерировать запрос сертификата с помощью команды certreq. Запрос сертификата — это запрос к центру сертификации (ЦС) на создание публичного сертификата для вашей организации. После создания запроса на сертификат он должен быть отправлен в центр сертификации, в котором вы хотите создать сертификат (например, Verisign, Thawte или какой-либо другой центр сертификации).
Прежде чем вы сможете сгенерировать запрос сертификата для личного ключа и пары открытых ключей, вы должны сгенерировать этот закрытый ключ и пару открытых ключей в хранилище ключей (или импортировать его). Как это сделать можно посмотреть в соответсвтующей главе.
-certreq
-alias alias
-sigalg sigalg
-file certreq_file
-keypass keypass
-storetype storetype
-keystore keystore
-storepass storepass
-providerName provider_name
-providerClass provider_class_name
-providerArg provider_arg
-v
-protected
-Jjavaoption
Вот пример команды -certreq:
"C:\Program FilesJavajdk1.8.0_111binkeytool"
-certreq
-alias testkey
-keypass 123456
-storetype JKS
-keystore keystore.jks
-storepass abcdef
-file certreq.certreq
Эта команда сгенерирует запрос сертификата для ключа, сохраненного с псевдонимом testkey в файле keystore.jks, и запишет запрос сертификата в файл с именем certreq.certreq.
Ниже приведен список аргументов, которые принимают различные команды keytool. Помните, что не все команды принимают все эти аргументы. Посмотрите на конкретную команду, чтобы увидеть, какие аргументы она принимает.
-alias
Псевдоним записи в хранилище ключей. Помните, псевдоним
может указывать только на один ключ.-keyalg
Название алгоритма, используемого для генерации ключа. Обычно используется RSA.-keysize
Размер ключа в битах. Обычно размеры ключа кратны. Кроме того, различные алгоритмы могут поддерживать только определенные предварительно заданные размеры ключей.-sigalg
Алгоритм подписи, используемый для подписи пары ключей.-dname
Уникальное имя из стандарта X.500. Это имя будет связано с
псевдонимом для этой пары ключей в хранилище ключей, также
используется в качестве полей «эмитент» и «субъект» в самозаверяющем
сертификате.-keypass
Пароль ключевой пары, необходимый для
доступа к этой конкретной паре ключей в хранилище ключей.-validity
Количество дней, в течение которых сертификат,
приложенный к паре ключей, должен быть действительным.-storetype
Формат файла, в котором должно быть сохранено хранилище ключей. По умолчанию используется JKS. Другим вариантом является формат PKCS11.-keystore
Имя файла хранилища для хранения сгенерированной пары
ключей. Если файл не существует, он будет создан.-file
Имя файла для чтения или записи сертификата или запроса сертификата.-storepass
Пароль от хранилища ключей, всем, кто захочет работать
с ним, понадобится этот пароль. Отличиеstorepass
отkeypass
в
том что первый предоставляет доступ к хранилищу, а второй к отдельной
паре ключей. Вам понадобятся оба пароля для доступа к любому ключу,
хранящемуся в хранилище.-rfc
Если включить этот флаг, то утилита будет использовать текстовый формат, а не двоичный формат, например для экспорта или импорта сертификатов. Значение -rfc
относится к стандарту RFC 1421.-providerName
Имя провайдера криптографического API, который вы хотите использовать при создании пары ключей. Имя провайдера должно быть указано в файлах свойств безопасности Java.-providerClass
Имя корневого класса провайдера криптографического API, который вы хотите использовать. Используется когда имя провайдера не указано в файлах свойств безопасности Java.-providerArg
Аргументы, передаваемые собственному криптографическому провайдеру при инициализации (если это необходимо провайдеру).-v
Сокращенное от verbose, утилита Keytool будет выводить много дополнительной информации в командную строку в удобочитаемом формате.-protected
Определяет, должен ли пароль хранилища ключей предоставляться каким-либо внешним механизмом, например, аппаратный токен. Допустимые значения: true и false.-Jjavaoption
Строка опций для Java VM которая генерирует пару ключей и создает хранилище.
Генерация ключевой пары
Генерация ключевой пары (открытый ключ / закрытый ключ) является одной из наиболее распространенных задач, для которых используется утилита Keytool. Сгенерированная пара ключей вставляется в файл KeyStore как пара ключей с собственной подписью. Вот общий формат командной строки для генерации пары ключей:
-genkeypair
-alias alias
-keyalg keyalg
-keysize keysize
-sigalg sigalg
-dname dname
-keypass keypass
-validity valDays
-storetype storetype
-keystore keystore
-storepass storepass
-providerClass provider_class_name
-providerArg provider_arg
-v
-protected
-Jjavaoption
Аргументы объяснены в разделе Аргументы Keytool. Не все эти аргументы нужны и многие являются не обязательными. Утилита сообщит вам, если вы пропустили обязательный аргумент. Вот пример команды, которая импортирует сертификат в KeyStore.
"C:\Program FilesJavajdk1.8.0_111binkeytool"
-importcert
-alias testkey
-keypass 123456
-storetype JKS
-keystore keystore2.jks
-file cert.cert
-rfc
-storepass abcdef
Как конвертировать ключи приват банка в m.e.doc?
В программе M.E.Doc все документы мы подписываем электронными цифровыми подписями. ЭЦП Вы можете получить в аккредитованных центрах, но стоит обратить внимание, что программа M.E.Doc может работать с определенными АЦСК, а именно:
- АЦСК «Україна»;
- АЦСК ІДД ДФС;
- АЦСК «MasterKey»;
- АЦСК органів юстиції України;
- АЦСК Укрзалізниці;
- АЦСК ПАТ «УкрСиббанк»;
- АЦСК ДП «УСС»;
- АЦСК «Приват Банк».
Сейчас мы рассмотрим, как успешно использовать ключи Приват Банка в программе (мы будем использовать ключи для юридического лица). Ключ приват банка – это файл с расширением JKS. Для подписания отчетов в программе нам необходимо конвертировать ключ для понятного программе расширения zs2. Запускаем M.E.Doc, далее «Адміністрування» – «Сертифікати».
В открывшемся окне открываем вкладку «Сервіс» – «Конвертація ключа JKS».
Программа предложит выбрать файл ключа (он должен быть у Вас на компьютере или на флешке). Затем необходимо указать путь куда хотим сохранить конвертированный вариант ключа, в нашем случае, это: «C:UsersVadimDocumentsKey_convert». В нижнем поле вводим пароль ключа JKS и нажимаем «Конвертувати».
Если все сделано верно, то M.E.Doc сообщит об успешной конвертации.
В папке конечного результата, у нас должно появиться 2 файла с расширением. zs2 (это непосредственно наши конвертированные ключи) и 4 файла сертификатов .crt. Если вы делали конвертацию ключей для физического лица без печати, то у Вас будет 1 файл .zs2, и 2 сертификата .crt. Возвращаемся в вкладку “Сертифікати”, нажимаем на кнопку добавить (на рисунке пункт 1.), выбираем все полученные сертификаты из папки в которую конвертировали ключи и нажимаем кнопку открыть.
После загрузятся сертификаты Вашего предприятия и программа предложит Вам «Змінити налаштування комплекту підписів», в предложенном запросе выберете «Так».
В меню настройки подписей, нажав на стрелочку напротив типа документов (к примеру «Звітність») выберите перечень подписей, которые необходимо ставить на данный тип документов – нажмите «Ок».
Личные данные для заполнения
Сразу после регистрации в “Дія” рекомендуется указать персональную информацию о себе. Это такие данные, как:
- ФИО;
- идентификационный номер налогоплательщика;
- дата рождения;
- номер мобильного телефона;
- адрес электронной почты;
- пол.
В зависимости от выбранного способа регистрации, паспортные данные, а также информация о прописке или подтягиваются автоматически, или это нужно выполнить самостоятельно. Аналогичную информацию понадобится указать и при регистрации через мобильное приложение.
Номенклатура сертификатов
Давайте рассмотрим, какие сертификаты X.509 встречаются в природе, если рассматривать их по расположению в
пищевой
цепочке доверия.
По степени
крутизны
дороговизны и надежности сертификаты делятся на 3 вида:
DVOVEV
Откуда берутся сертификаты?
Еще совсем недавно было всего 2 способа заполучить X.509 сертификат, но времена меняются и с недавнего времени есть и третий путь.
- Создать свой собственный сертификат и самому же его подписать. Плюсы — это бесплатно, минусы — сертификат будет принят лишь вами и, в лучшем случае, вашей организацией.
- Приобрести сертификат в УЦ. Это будет стоить денег в зависимости от различных его характеристик и возможностей, указанных выше.
- Получить бесплатный сертификат LetsEncrypt, доступны только самые простые DV сертификаты.
Для первого сценария достаточно пары команд и чтобы 2 раза не вставать создадим сертификат с алгоритмом эллиптических кривых. Первым шагом нужно создать закрытый ключ. Считается, что шифрование с алгоритмом эллиптических кривых дает больший выхлоп, если измерять в тактах CPU, либо байтах длины ключа. Поддержка ECC не определена однозначно в TLS < 1.2.
openssl ecparam -name secp521r1 -genkey -param_enc explicit -out private-key.pem
Далее, создает CSR — запрос на подписание сертификата.
openssl req -new -sha256 -key private.key -out server.csr -days 730
И подписываем.
openssl x509 -req -sha256 -days 365 -in server.csr -signkey private.key -out public.crt
Результат можно посмотреть командой:
openssl x509 -text -noout -in public.crt
Openssl имеет огромное количество опций и команд. Man страница не очень полезна, справочник удобнее использовать так:
openssl -help
openssl x509 -help
openssl s_client -help
Ровно то же самое можно сделать с помощью java утилиты keytool.
keytool -genkey -keyalg RSA -alias selfsigned -keystore keystore.jks -storepass password -validity 360 -keysize 2048
Следует серия вопросов, чтобы было чем запомнить поля owner и issuer
What is your first and last name?
What is the name of your organizational unit?
What is the name of your organization?
What is the name of your City or Locality?
What is the name of your State or Province?
What is the two-letter country code for this unit?
Is CN=Johnnie Walker, OU=Unknown, O=Unknown, L=Moscow, ST=Moscow, C=RU correct?
Конвертируем связку ключей из проприетарного формата в PKCS12.
keytool -importkeystore -srckeystore keystore.jks -destkeystore keystore.jks -deststoretype pkcs12
Смотрим на результат:
Alias name: selfsigned
Creation date: 20.01.2021
Entry type: PrivateKeyEntry
Certificate chain length: 1
Certificate[1]:
Owner: CN=Johnnie Walker, OU=Unknown, O=Unknown, L=Moscow, ST=Moscow, C=RU
Issuer: CN=Johnnie Walker, OU=Unknown, O=Unknown, L=Moscow, ST=Moscow, C=RU
Serial number: 1f170cb9
Valid from: Sat Jan 20 18:33:42 MSK 2021 until: Tue Jan 15 18:33:42 MSK 2021
Certificate fingerprints:
MD5: B3:E9:92:87:13:71:2D:36:60:AD:B5:1F:24:16:51:05
SHA1: 26:08:39:19:31:53:C5:43:1E:ED:2E:78:36:43:54:9B:EA:D4:EF:9A
SHA256: FD:42:C9:6D:F6:2A:F1:A3:BC:24:EA:34:DC:12:02:69:86:39:F1:FC:1B:64:07:FD:E1:02:57:64:D1:55:02:3D
Signature algorithm name: SHA256withRSA
Subject Public Key Algorithm: 2048-bit RSA key
Version: 3
Extensions:
#1: ObjectId: 2.5.29.14 Criticality=false
SubjectKeyIdentifier [
KeyIdentifier [
0000: 30 95 58 E3 9E 76 1D FB 92 44 9D 95 47 94 E4 97 0.X..v...D..G...
0010: C8 1E F1 92 ....
]
]
Значению ObjectId: 2.5.29.14 соответствует определение ASN.1, согласно RFC 3280 оно всегда non-critical. Точно так же можно узнать смысл и возможные значения других ObjectId, которые присутствуют в сертификате X.509.
subjectKeyIdentifier EXTENSION ::= {
SYNTAX SubjectKeyIdentifier
IDENTIFIED BY id-ce-subjectKeyIdentifier
}
SubjectKeyIdentifier ::= KeyIdentifier
Послідовність дій користувача:
1. В першому кроці зробіть наступне:
2. В наступному кроці зробіть таке:
3. Третім кроком буде надання результату підписання документа.
Кнопку “Зберегти” використовують для збереження підписаного файлу у файловій системі комп’ютера користувача. Принцип збереження відбувається так само, як й у звичайному випадку завантаження файлу переглядачем.
Кнопку “Назад” використовують для повернення на початкову сторінку сервісу. При цьому завантаження підписаних файлів не відбувається, результати створення підпису скасовуються.
Зауважте, що під час роботи сервісу інформація, яка міститься у файлах користувача, оброблюється в переглядачі, та не передається на сторону ЦЗО.
Регистрация в мобильном приложении
Чтобы войти в приложение, необходимо для начала пройти идентификацию через технологии Bank ID:
Процесс регистрации в мобильном приложении “Дія” занимает считанные минуты. На каждом этапе можно воспользоваться подробными подсказками, поэтому зарегистрироваться не составит особого труда.
Регистрация с помощью id.gov.ua
Такой способ предполагает, что зарегистрироваться на портале можно при помощи Bank ID НБУ. Возможность есть только у клиентов банков, что поддерживают функционал Bank ID. Всего в списке доступных банков находится более 35 учреждений, включая ПриватБанк.
Словарный запас
Определение X.509 сертификатов есть в архиве ITU-T
Certificate ::= SEQUENCE {
tbsCertificate TBSCertificate,
signatureAlgorithm AlgorithmIdentifier,
signatureValue BIT STRING }
TBSCertificate ::= SEQUENCE {
version [0] EXPLICIT Version DEFAULT v1,
serialNumber CertificateSerialNumber,
signature AlgorithmIdentifier,
issuer Name,
validity Validity,
subject Name,
subjectPublicKeyInfo SubjectPublicKeyInfo,
issuerUniqueID [1] IMPLICIT UniqueIdentifier OPTIONAL,
-- If present, version MUST be v2 or v3
Для того, чтобы досконально понять обозначения и синтаксис, придется читать спеки X.680 редакции 2008 г., где есть полное описание ASN.1. В понятиях ASN.1SEQUENCE обозначает примерно то же самое, что и struct в Си. Это может сбить с толку, ведь по семантике оно должно было соответствовать скорее массиву. И тем не менее.
Стандарт X.690 определяет следующие правила кодирования структур данных, созданных в соответствии с ASN.1: BER (Basic Encoding Rules), CER (Canonical Encoding Rules), DER (Distinguished Encoding Rules). Есть даже XER (XML Encoding Rules), который на практике мне никогда не встречался.
Да, но для чего нужны сертификаты X.509, которые доставляют столько головной боли? Первая и основная функция сертификатов X.509 — служить хранилищем открытого или публичного ключа PKI (public key infrastructure). К этой функции нареканий нет, а вот со второй не все так однозначно.
Вторая функция сертификатов X.509 заключается в том, чтобы предъявитель сего был принят человеком, либо программой в качестве истинного владельца некоего цифрового актива: доменного имени, веб сайта и пр. Это получается по-разному, далеко не все сертификаты имеют высокую ликвидность, если пользоваться финансовой терминологией.
Список записей хранилища
Чтобы вывести список записей в хранилище ключей, вы можете использовать команду list. Ниже представлен формат для команды list. Разрывы строк предназначены только для упрощения чтения. Удалите разрывы строк перед выполнением команды:
-list
-alias alias
-storetype storetype
-keystore keystore
-storepass storepass
-providerName provider_name
-providerClass provider_class_name
-providerArg provider_arg
-v
-rfc
-protected
-Jjavaoption
Вот пример команды list. Не забудьте удалить разрывы строк!
"C:\Program FilesJavajdk1.8.0_111binkeytool"
-list
-storetype JKS
-keystore keystore.jks
-storepass abcdef
Эта команда выведет список всех записей в данном хранилище ключей. Результат выполнения будет выглядеть примерно так:
Keystore type: JKS
Keystore provider: SUN
Your keystore contains 1 entry
testkey, 19-Dec-2021, PrivateKeyEntry,
Certificate fingerprint (SHA1): 4F:4C:E2:C5:DA:36:E6:A9:93:6F:10:36:9E:E5:E8:5A:6E:F2:11:16
Если вы включите аргумент alias в команду list, в список попадет только запись, соответствующая данному псевдониму. Вот пример команды list с аргументом alias:
"C:\Program FilesJavajdk1.8.0_111binkeytool"
-list
-alias testkey
-storetype JKS
-keystore keystore.jks
-storepass abcdef
Результат выполнения вышеупомянутой команды:
testkey, 15-Dec-2021, PrivateKeyEntry,
Certificate fingerprint (SHA1): 71:B0:6E:F1:E9:5A:E7:F5:5E:78:71:DC:08:80:47:E9:5F:F8:6D:25
Сценарий №1 — найти следующего в связке
Связка сертификатов — Объединение нескольких X.509 сертификатов в один файл, чаще всего в формате PEM. Связка передается по сети в момент протокола рукопожатия SSL/TLS.
Самый сок начинается, когда имеете дело со связкой сертификатов, a. k. a certificate chain. Часто просматривая лапшу в связке ключей jks непросто понять как найти родительский сертификат, когда там россыпь новых и старых сертификатов на несколько доменных имен.
Удаление записи хранилища ключей
Так же в в утилите keytool имеется команда, которая может удалить запись из хранилища ключей: delete. Вот формат этой команды:
-delete
-alias alias
-storetype storetype
-keystore keystore
-storepass storepass
-providerName provider_name
-providerClass provider_class_name
-providerArg provider_arg
-v
-protected
-Jjavaoption
Вот пример вызова команды delete. Не забудьте удалить разрывы строк перед запуском!
"C:\Program FilesJavajdk1.8.0_111binkeytool"
-delete
-alias testkey
-storetype JKS
-keystore keystore.jks
-storepass abcdef
Эта команда удаляет запись хранилища с псевдонимом testkey хранящегося в файле keystore.jks.
Як підписати документ через портал “дія”?
1. Перейдіть за посиланням sign.diia.gov.ua.
2. Виберіть тип носія особистого ключа, введіть пароль та натисніть “Зчитати ключ”.
3. Виберіть документ для підписання та натисніть “Продовжити”.
4. Перевірте назву документа та натисніть “Підписати файл”.
5. Все готово! Зберігання підписаного документа розпочнеться автоматично. Якщо цього не сталося, натисніть кнопку “Зберегти файл”.
Радимо звернути увагу на поради, про які писав Cybercalm, а саме:
Як подати документ через сервіс центрального засвідчувального органу?
Сервіс підтримує особисті ключі та сертифікати відкритих ключів усіх кваліфікованих надавачів електронних довірчих послуг. Для створення кваліфікованого електронного підпису або печатки необхідно мати чинні особисті ключі та сертифікати, видані кваліфікованим надавачем електронних довірчих послуг.
Выводы
Зарегистрироваться на сервисе “Дія” действительно стоит того. Это можно сделать очень быстро и удобно. При этом функционал портала позволяет раз и навсегда забыть о сидении в очередях и прочих нюансах бюрократизма. Вне зависимости от выбранного способа регистрации, это не займет много времени.
Так, пройти регистрацию можно либо с помощью электронной цифровой подписи, либо, используя Bank ID. Как на официальном сайте сервисе, так и в мобильном приложении есть подсказки, которые помогут сориентироваться в процедуре регистрации, если возникнет в этом необходимость.
Сразу после регистрации, можно полноценно использовать функционал приложения. С этим не возникнет каких-либо проблем. Основные данные уже будут указаны в “Дія”. Понадобится только загрузить недостающую информацию и добавить копии требуемых документов. Все это подтверждает, что использовать “Дія” стоит каждому.