...
Возможные компоненты идентификатора пути:
manufacturer:
ID производителя токена
model:
модель токена
serial:
серийный номер токена
token:
метка токена(
поле "label")
object:
имя объекта(CKA_LABEL)
id:
идентификатор объекта (CKA_ID)
Пример идентификатора ключевой пары на токене:
pkcs11:manufacturer=Aktiv%20Co.;model=Rutoken%20ECP;serial=2adc8d87;object=my%20label;id=%aa%bb%cc%dd?pin-value=12345678
Если подключен только один Рутокен с единственной ключевой парой:
...
Генерация ключевой пары ГОСТ-2012 (256) 2001 на Рутокене
pkcs11-tool.exe --module rtPKCS11ECP.dll --login --pin 12345678 --keypairgen --key-type GOSTR3410:A --id 3132 --usage-derive
pin
: PIN-код Рутокенаid
: идентификатор объекта (CKA_ID) в виде двузначных номеров символов в hex из таблицы ASCII.
Чтобы использовать этот id через OpenSSL надо использовать символы, соответствующие этим кодам. Например: для ‘--id 3132
’ в OpenSSL надо указывать "pkcs11:id=12
".
Есть удобный онлайн-сервис конвертации строки в ASCII-коды
usage-derive
: флаг указывающей, что на сгенерированном ключе можно вырабатывать общий симметричный ключ, который может использоваться, например, для расшифрования cms сообщений.
Если вы не планируйте шифровать сообщения на генерируемой ключевой паре, то этот флаг можно убрать.
GOSTR3410:A
: ‘A’ - парамсет, может быть так же B или С
Генерация ключевой пары ГОСТ-2012 на Рутокене
Info |
---|
Собирайте ветку pkcs11-tool с поддержкой ГОСТ-2012, или используйте релиз OpenSC 0.20.0 или новее |
pkcs11-tool.exe --module rtPKCS11ECP.dll --login --pin 12345678 --keypairgen --key-type GOSTR3410-2012-256:B --id 3132 --usage-derive
pin
: PIN-код Рутокена
id
: идентификатор объекта (CKA_ID) в виде двузначных номеров символов в hex из таблицы ASCII.
Чтобы использовать этот id через OpenSSL надо использовать символы, соответствующие этим кодам.
Например: для ‘--id 3132
’ в OpenSSL надо указывать "pkcs11:id=12
".
Для удобства, можно воспользоваться онлайн-сервисом конвертации ACSII-кодов в строку.
usage-derive
: флаг указывающей, что на сгенерированном ключе можно вырабатывать общий симметричный ключ, который может использоваться, например, для расшифрования cms сообщений.
Если вы не планируйте шифровать сообщения на генерируемой ключевой паре, то этот флаг можно убрать.
GOSTR3410-2012-512:A
: ‘A’ - парамсет, может быть так же B или С,
GOSTR3410-2012-256:B
: ‘B’ - парамсет, может быть так же C или D
или
используйте веб-сервис "Центр регистрации Рутокен"
Для просмотра объектов на токене:
...
State or Province []: Moscow
Locality []: RU
Organization Name []: Aktiv Company
Organizational Unit Name []: development
Common Name []: tester
Email []: tester@rutoken tester@rutoken.ru
Набор вводимой информации при формировании запроса определяется конфигурационным файлом openssl.cnf
.
...
Для создания CMS подписи необходимо иметь сертификат. В тестовых целях в папке sdk\openssl\rtengine\samples\tool\
предоставлены настройки удостоверяющего центра OpenSSL, который позволяет выпускать сертификаты.
Скопируйте папке папку sdk\openssl\rtengine\samples\tool\demoCA
и конфигурационный файл openssl.cnf
в папку с OpenSSL и выполните:
...
openssl dgst -keyform engine -verify "pkcs11:your_pkcs11_uri" -engine rtengine -signature signature test_data
Шифрование в формате CMS
Info | ||
---|---|---|
| ||
При расшифровании сообщения вырабатывается общий симметричный ключ, который непосредственно и используется при расшифровке. Рутокен позволяет генерировать такой общий ключ только на не извлекаемых закрытых ключах с опцией 'derive' в поле key usage. Для того чтобы указать эту опцию, при генерации ключа используйте флаг --usage-derive. Например:
|
openssl openssl cms -encrypt -binary -<gost28147-paramset_a-cfb xxx-alg> -in test_data -out encrypted_cms -outform PEM respondent.cer
respondent.cer:
сертификат адресата, для которого шифруется сообщение.
Где gost28147-xxx-alg:
gost28147-paramset_a-cfb :
единственный доступный (для rtengine 0.7):
алгоритм, работает в режиме гаммирования с обратной связью с набором параметров А.
gost28147-cfb (для rtengine новее 0.7):
алгоритм, работает в режиме гаммирования с обратной связью с набором параметров Z.
Расшифрование на стороне адресата:
Используя ключ в файле:
openssl cms -decrypt -binary -in encrypted_cms -inform PEM -recip respondent.cer -inkey seckey.pem -out decrypted_cms_data
...
openssl cms -decrypt -binary -in encrypted_cms -inform PEM -recip respondent.cer -keyform engine -inkey "pkcs11:your_pkcs11_uri" -engine rtengine -out decrypted_cms_data
Запуск SSL/TLS сервера/клиента
Сервер, ключ в файле:
openssl s_server -key demoCA/private/cakey.pem -cert demoCA/cacert.pem -Verify 7 -CAfile demoCA/cacert.pem -accept 44330 -WWW -purpose any -4
Сервер, ключ на токене:
openssl s_server -keyform engine -key "pkcs11:server_key_pkcs11_uri" -engine rtengine -cert demoCA/cacert.pem -Verify 7 -CAfile demoCA/cacert.pem -accept 44330 -WWW -purpose any -4
Клиент, ключ в файле:
openssl s_client -host 127.0.0.1 -port 44330 -cert cert.cer -key seckey.pem
Клиент, ключ на токене:
openssl s_client -host 127.0.0.1 -port 44330 -cert cert.cer -keyform engine -key "pkcs11:client_key_pkcs11_uri" -engine rtengine