(2016-03-29 19:50:39 отредактировано itsec)

Rutoken ЭЦП + CA на OpenSSL (RSA)

Добрый день!
Имеется ОС Linux Debian.
Поставил OpenSSL. Поставил все необходимые библиотеки и драйвера.
Система видит Рутокен ЭЦП, могу даже на него генерить ключи и импортировать сертификаты.
Но задачу у меня следующая. Закрытый ключ и самоподписанный корневой сертификат УЦ поместить на Рутокен ЭЦП и в дальнейшем все запросы на сертификаты подписывать закрытым ключом УЦ через Рутокен ЭЦП.
Никак не могу найти команду, чтобы я мог подписывать через Рутокен запросы.
Подскажите пожалуйста.

Сгенерил закрытый ключ для УЦ так

pkcs11-tool --module /usr/lib/librtpkcs11ecp.so --keypairgen --key-type rsa:2048 --label TEST --id 99 --login

Смотрю содержимое Рутокена

pkcs11-tool --module /usr/lib/librtpkcs11ecp.so  --list-objects --login

Вывод

Public Key Object; RSA 2048 bits
  label:      TEST
  ID:         99
  Usage:      encrypt, verify, wrap
Private Key Object; RSA 
  label:      TEST
  ID:         99
  Usage:      decrypt, sign, unwrap


Кстати почему создается публичный ключ (Public Key)?
Я ведь только закрытый ключ генерировал.

Как подписывать запрос не через Рутокен я знаю..

openssl ca -keyfile /home/user/key.pem -cert /home/user/ca.crt -in /home/user/test.csr -out /home/user/user-cert.pem

Re: Rutoken ЭЦП + CA на OpenSSL (RSA)

Как подписывать запросы через Рутокен ЭЦП?

Re: Rutoken ЭЦП + CA на OpenSSL (RSA)

добрый день, если кратко ответить, то нужно подключить к openssl engine_pkcs11 и библиотеку pkcs#11

Re: Rutoken ЭЦП + CA на OpenSSL (RSA)

Кирилл Мещеряков
Добрый день!
У меня все подключено.

engine -t dynamic -pre SO_PATH:/usr/lib/engines/engine_pkcs11.so -pre ID:pkcs11 -pre LIST_ADD:1 -pre LOAD -pre MODULE_PATH:/usr/lib/librtpkcs11ecp.so

Какой командой подписать запрос теперь? Ключи УЦ находятся на Рутокене ЭЦП c ID 99.

Re: Rutoken ЭЦП + CA на OpenSSL (RSA)

Так попробуйте:

openssl ca -engine pkcs11 -keyfile 99 -keyform engine -cert /home/user/ca.crt -in /home/user/test.csr -out /home/user/user-cert.pem

(2016-04-05 19:22:00 отредактировано itsec)

Re: Rutoken ЭЦП + CA на OpenSSL (RSA)

Виктор Ткаченко пишет:

Так попробуйте:

openssl ca -engine pkcs11 -keyfile 99 -keyform engine -cert /home/user/ca.crt -in /home/user/test.csr -out /home/user/user-cert.pem

Виктор спасибо, но я уже успел разобраться с командой =)

ca -engine pkcs11 -keyfile 99 -keyform engine -cert /etc/ssl/demoCA/ca.crt -in /etc/ssl/demoCA/request/matrix.csr -out /etc/ssl/demoCA/newcerts/matrix.crt

Re: Rutoken ЭЦП + CA на OpenSSL (RSA)

Все получилось?

(2016-04-05 19:33:25 отредактировано itsec)

Re: Rutoken ЭЦП + CA на OpenSSL (RSA)

Виктор Ткаченко пишет:

Все получилось?

Не совсем  =)

Сертификат УЦ делал так

OpenSSL> req -engine pkcs11 -x509 -new -key 99 -keyform engine -out /etc/ssl/demoCA/ca.crt
engine "pkcs11" set.
PKCS#11 token PIN: 
You are about to be asked to enter information that will be incorporated
into your certificate request.
What you are about to enter is what is called a Distinguished Name or a DN.
There are quite a few fields but you can leave some blank
For some fields there will be a default value,
If you enter '.', the field will be left blank.
-----
Country Name (2 letter code) [AU]:RU
State or Province Name (full name) [Some-State]:Russian
Locality Name (eg, city) []:Saratov
Organization Name (eg, company) [Internet Widgits Pty Ltd]:Libureg
Organizational Unit Name (eg, section) []:Lib
Common Name (e.g. server FQDN or YOUR name) []:
Email Address []:

Запрос на сертификат клиента

OpenSSL> req -engine pkcs11 -new -key 66 -keyform engine -out /etc/ssl/demoCA/request/matrix.csr
engine "pkcs11" set.
You are about to be asked to enter information that will be incorporated
into your certificate request.
What you are about to enter is what is called a Distinguished Name or a DN.
There are quite a few fields but you can leave some blank
For some fields there will be a default value,
If you enter '.', the field will be left blank.
-----
Country Name (2 letter code) [AU]:RU
State or Province Name (full name) [Some-State]:Russian
Locality Name (eg, city) []:Moscow
Organization Name (eg, company) [Internet Widgits Pty Ltd]:Cergont
Organizational Unit Name (eg, section) []:Cer
Common Name (e.g. server FQDN or YOUR name) []:
Email Address []:

Please enter the following 'extra' attributes
to be sent with your certificate request
A challenge password []:
An optional company name []:

При попытке подписать ругается

OpenSSL> ca -engine pkcs11 -keyfile 99 -keyform engine -cert /etc/ssl/demoCA/ca.crt -in /etc/ssl/demoCA/request/matrix.csr -out /etc/ssl/demoCA/newcerts/matrix.crt
Using configuration from /usr/lib/ssl/openssl.cnf
engine "pkcs11" set.
Check that the request matches the signature
Signature ok
The organizationName field needed to be the same in the
CA certificate (Libureg) and the request (Cergont)
error in ca

Что-то ему не нравится в структуре сертификатов.

В конфигурационном файле OpenSSL в секции [req] поправил значение string_mask на pkix.

Не помогло. Почему может возникать такая ошибка?

Re: Rutoken ЭЦП + CA на OpenSSL (RSA)

Название организации в корневом должно быть таким же, как в запросе.

Это где-то в конфиге задано.

(2016-04-05 19:47:04 отредактировано itsec)

Re: Rutoken ЭЦП + CA на OpenSSL (RSA)

Виктор Ткаченко пишет:

Название организации в корневом должно быть таким же, как в запросе.

Это где-то в конфиге задано.

В конфиге есть строка получается, которая требует чтобы имя организации в запросе было такое же что и в корневом сертификате?

Re: Rutoken ЭЦП + CA на OpenSSL (RSA)

Да

(2016-04-05 19:52:44 отредактировано itsec)

Re: Rutoken ЭЦП + CA на OpenSSL (RSA)

Виктор Ткаченко пишет:

Да

Виктор, спасибо! Пошел искать эту строку =)
Кстати не подскажите, я каждый раз когда запускаю openssl, то приходится руками подгружать движок и библиотеку

engine -t dynamic -pre SO_PATH:/usr/lib/engines/engine_pkcs11.so -pre ID:pkcs11 -pre LIST_ADD:1 -pre LOAD -pre MODULE_PATH:/usr/lib/librtpkcs11ecp.so

Как мне это в конфиге прописать, чтобы она автоматически при запуске подгружалась?

Re: Rutoken ЭЦП + CA на OpenSSL (RSA)

Что-то типа

[openssl_def]
engines = engine_section
 
[engine_section]
pkcs11 = pkcs11_section
 
 
[pkcs11_section]
engine_id = pkcs11
dynamic_path = /usr/lib/i386-linux-gnu/openssl-1.0.0/engines/engine_pkcs11.so
MODULE_PATH = /usr/lib/librtpkcs11ecp.so
init = 0

Нужно добавить в конфиг.

Re: Rutoken ЭЦП + CA на OpenSSL (RSA)

Виктор Ткаченко пишет:

Что-то типа

[openssl_def]
engines = engine_section
 
[engine_section]
pkcs11 = pkcs11_section
 
 
[pkcs11_section]
engine_id = pkcs11
dynamic_path = /usr/lib/i386-linux-gnu/openssl-1.0.0/engines/engine_pkcs11.so
MODULE_PATH = /usr/lib/librtpkcs11ecp.so
init = 0

Нужно добавить в конфиг.

Спасибо, помогло.
Еще в начале дописал строку

 openssl_conf = openssl_def

Re: Rutoken ЭЦП + CA на OpenSSL (RSA)

Виктор, а какой командой из под консоли мне отформатировать Рутокен ЭЦП?