Microsoft – Портал документации Рутокен – Сервер документации Рутокен

Rutoken, openssl и локальный уц для подписи сообщений

Настраиваем «наш» openssl.cnf:

а) Добавляем в начало файла директивы для подключения движка токена:

openssl_conf = openssl_def
[ openssl_def ]
engines = engine_section

[ engine_section ]
rtengine = gost_section

[ gost_section ]
dynamic_path = /path/to/rutoken/openssl/connector/librtengine.so
MODULE_PATH = /path/to/rutoken/pkcs11/librtpkcs11ecp.so
RAND_TOKEN = pkcs11:manufacturer=Aktiv Co.;model=Rutoken ECP
default_algorithms = CIPHERS, DIGEST, PKEY, RAND


б) раскомментируйте строку

# req_extensions = v3_req # The extensions to add to a certificate request


в) в секции [ v3_req ] укажите следующие параметры:

subjectSignTool = ASN1:FORMAT:UTF8,UTF8String:Наш Рутокен ЭЦП
extendedKeyUsage=emailProtection
keyUsage=digitalSignature,nonRepudiation,keyEncipherment,dataEncipherment


г) в секции [ v3_ca ] надо убрать опцию critical из параметра basicConstraints:

basicConstraints = CA:true

Для чего? Честный ответ: не знаю. Однако все примеры корневых сертификатов, которые я скачивал в процессе попыток разобраться в теме, были без признака critical. Адресую вопрос «для чего?» более опытным в вопросе коллегам.

д) опционально устанавливаем значения по умолчанию, которые будут предлагаться при выпуске самоподписанных сертификатов и генерации запросов на выпуск клиентских сертификатов. Эти параметры находятся в секции [ req_distinguished_name ]

Параметр с постфиксом _default — то самое значение по умолчанию. Пример:

countryName			= Country Name (2 letter code)
countryName_default		= AU
countryName_min		= 2
countryName_max		= 2


Когда система попросит ввести параметр countryName, то в квадратных скобочках укажет, что по умолчанию оставит значение AU.

На этом настройка конфига OpenSSL завершена. Осталось указать OpenSSL, что использовать надо именно его. Для этого устанавливаем переменную окружения OPENSSL_CONF:

export OPENSSL_CONF=/path/to/your/openssl.cnf

Опционально форматируем наш токен, используя утилиту rtAdminТеперь все готово к развертыванию УЦ.

Алгоритм действий в общих чертах прост:

а) выпускаем корневой сертификат удостоверяющего центра, используя алгоритм ГОСТ:

б) на каждом из USB-токенов
Ниже приведена реализация этого алгоритма для одного токена:

Читайте также:  Договор с тензор эцп

Генерация закрытого ключа для сертификата CA (используем алгоритм ГОСТ):

openssl genpkey -algorithm gost2022_256 -pkeyopt paramset:A -outform PEM -out demoCA/private/cakey.pem


Выпускаем самоподписанный сертификат CA:

<b>openssl req -new -x509 -key demoCA/private/cakey.pem -out demoCA/certs/cacert.pem -extensions v3_ca -days  3650 -outform PEM 

Обратите внимание: мы указали в командной строке, что необходимо использовать расширения v3_ca из конфига openssl_cnf. Именно там прописано, что это наш CA. Срок действия 10 лет. Обычное дело для CA. Но можно и больше.

В процессе выпуска сертификата система попросит ввести значения параметров, которые находятся в секции [ req_distinguished_name ] нашего файла openssl.cnf

Теперь приступаем к операциям с токеном. Если токен новый, либо отформатированный со значениями по умолчанию, то PIN пользователя на нем 12345678. Я исхожу из предположения, что это именно так. Иначе необходимо указать корректный PIN пользователя и вообще стараться, чтобы в приведенных ниже примерах имена уже существующих на токене объектов не пересекались с вводимыми.

Первым делом сгенерируем ключевую пару. OpenSSL не умеет выполнять эту операцию на Рутокене, поэтому воспользуемся утилитой pkcs11-tool из пакета OpenSC:

pkcs11-tool --module /path/to/your/librtpkcs11ecp.so --login --pin 12345678 --keypairgen  --key-type GOSTR3410:A --id 303030303031 --label 'client01'


Важное замечание: мы указали id 303030303031. Каждые две цифры этого id ни что иное как ASCII-код символов «0» и «1» соответственно. При операциях с OpenSSL это будет выглядеть как «id=000001»

Генерируем запрос на сертификат:

openssl req -utf8 -new -keyform engine -key 'pkcs11:id=000001' -engine rtengine -out demoCA/newcerts/client01.csr


Если все было сделано верно, то система

Используя этот запрос, подписываем клиентский сертификат (в примере срок действия сертификата составляет 1825 дней. Важно, чтобы этот срок не превышал срок действия вашего корневого сертификата):

Читайте также:  RSA шифрование в PHP (openssl), Android/Java, JavaScript и Go / Хабр

openssl ca -utf8 -days  1825 -keyfile demoCA/private/cakey.pem -cert demoCA/certs/cacert.pem -in demoCA/newcerts/client01.csr -outdir demoCA/newcerts -out demoCA/certs/client01.pem


Система отобразит сертификат, спросит о решении подписать его (отвечаем «y»), и о решении сохранить новый сертификат (снова отвечаем «y»).

Сохраняем полученный сертификат на токен:

pkcs11-tool --module /path/to/your/librtpkcs11ecp.so --login --pin 12345678 --id=303030303031 -w demoCA/certs/client01.pem -y cert


Все.

Тестируем созданное «чудо». Для этого подписываем и проверяем подпись фразы «Hello, world!»:

echo Hello,world! | openssl cms -nodetach -sign -signer demoCA/certs/client01.pem -keyform engine -inkey "pkcs11:id=000001" -engine rtengine -binary -noattr -outform PEM | openssl cms -verify -CAfile demoCA/certs/cacert.pem -inform PEM


Если все сделано верно, то система запросит PIN, подпишет сообщение, затем проверит подпись и в случае успеха выведет на экран исходное сообщение и результат проверки («успех»)

Замечание. Возвращаясь к титульной задаче и подписи средствами плагина, необходимо отметить, что по умолчанию результат подписания плагин отдает не в формате PEM, а в формате DER, закодировав в base64. Поэтому для проверки подписи необходимо сначала декодировать из base64, а при проверке указывать входной формат DER.

Успехов!

Вкладка удостоверяющие центры

На этой вкладке задаются Microsoft CA, с которыми будет работать Рутокен KeyBox.

Чтобы добавить удостоверяющий центр расположенный в домене, в котором находятся пользователи Рутокен KeyBox:

  1. Нажмите Добавить УЦ.
    Microsoft - Портал документации Рутокен - Сервер документации Рутокен
  2. В поле Адрес введите адрес удостоверяющего центра.
  3. В полях Имя пользователя и Пароль введите имя и пароль сервисной учетной записи, обладающей сертификатом Агент регистрации.

  4. В раскрывающемся списке Сертификат агента регистрации выберите название сертификата.
  5. Нажмите Добавить. В результате удостоверяющий центр будет добавлен.

Чтобы добавить удостоверяющий центр, расположенных за пределами домена, в котором находятся пользователи Рутокен KeyBox:

Читайте также:  Какие требования к рабочему месту для работы с электронной подписью? — Удостоверяющий центр СКБ Контур

Вкладка шаблоны

На этой вкладке задаются шаблоны, в соответствии с которыми будут выпускаться сертификаты пользователям.

Чтобы создать шаблон сертификата:

  1. Нажмите Создать шаблон сертификата.
  2. Задайте все необходимые параметры.
  3. Нажмите Создать.

Чтобы редактировать шаблон:

  1. В строке с шаблоном щелкните по значку Microsoft - Портал документации Рутокен - Сервер документации Рутокен.
  2. Измените все необходимые параметры.
  3. Нажмите Сохранить. В результате шаблон будет изменен.

Чтобы удалить шаблон:

  1. В строке с шаблоном щелкните по значку Microsoft - Портал документации Рутокен - Сервер документации Рутокен.
  2. Для подтверждения действия нажмите Удалить. В результате шаблон будет удален.
Оцените статью
ЭЦП Эксперт
Добавить комментарий

Adblock
detector