ruToken под Linux. подпись запросов на сертификат.

засасываем приватный ключ

nikl@ak49:~$ /usr/bin/pkcs15-init --store-private-key keys/ca.key --auth-id 02 --id 47 --label 'CA-KEY' --key-usage sign
Using reader with a card: Aktiv Rutoken S 00 00
User PIN required.
Please enter User PIN: 

засасываем сертификат

nikl@ak49:~$ /usr/bin/pkcs15-init --store-certificate keys/ca.crt --authority --auth-id 02 --id 47 --label 'CA-CERT'
Using reader with a card: Aktiv Rutoken S 00 00
User PIN required.
Please enter User PIN: 

Смотрим результат:

nikl@ak49:~$ pkcs11-tool --module /usr/local/lib/opensc-pkcs11.so --list-objects --login
Using slot 1 with a present token (0x1)
Logging in to "Rutoken S (User PIN)".
Please enter User PIN: 
Private Key Object; RSA 
  label:      CA-KEY
  ID:         47
  Usage:      sign
Public Key Object; RSA 2048 bits
  label:      CA-KEY
  ID:         47
  Usage:      none
Certificate Object, type = X.509 cert
  label:      CA-CERT
  ID:         47

Вроде все правильно, хотя смущает Usage: none у Public Key

Настраиваем openssl для работы с токеном через pkcs11 (openssl.conf)

[ engine_section ]
#
# If you are using PKCS#11
# Install engine_pkcs11 of opensc (www.opensc.org)
# And uncomment the following
# verify that dynamic_path points to the correct location
#
pkcs11 = pkcs11_section

[ pkcs11_section ]
engine_id = pkcs11
dynamic_path = /usr/lib/engines/engine_pkcs11.so
MODULE_PATH=/usr/local/lib/opensc-pkcs11.so
PIN = 12345678
init = 0

пробуем подписать какой-то пользовательский запрос на сертификат:

nikl@ak49:~$ openssl ca -config openssl.cnf -engine pkcs11 -key slot_1-id_47 -in user.csr -out user.crt
Using configuration from openssl.cnf
engine "pkcs11" set.
Check that the request matches the signature
Signature ok
The Subject's Distinguished Name is as follows
countryName           :PRINTABLE:'RU'
stateOrProvinceName   :ASN.1 12:'none'
localityName          :ASN.1 12:'City'
organizationName      :ASN.1 12:'Firma'
organizationalUnitName:ASN.1 12:'IT'
commonName            :ASN.1 12:'user'
emailAddress          :IA5STRING:'user@domain.com'
Certificate is to be certified until Jan  7 13:29:29 2022 GMT (3650 days)
Sign the certificate? [y/n]:y
3523:error:0D0C3006:asn1 encoding routines:ASN1_item_sign:EVP lib:a_sign.c:281:

В последнем шаге токен моргает, но сразу после 'y' вываливается с ошибкой, видимо, где-то в дебрях openssl


Куда еще посмотреть?

Re: ruToken под Linux. подпись запросов на сертификат.

У меня получалось подписывать запросы такой командой:

openssl ca -config openssl.cnf -engine pkcs11 -keyfile 100 -keyform engine -cert ca.crt -in user.csr -out user.crt

Может быть вам будет полезной вот эта тема
https://forum.rutoken.ru/topic/1639/?

Re: ruToken под Linux. подпись запросов на сертификат.

что такое в этом случае -keyfile 100 ?

Re: ruToken под Linux. подпись запросов на сертификат.

id ключа

в вашем случае slot_1-id_47

Re: ruToken под Linux. подпись запросов на сертификат.

огого...

nikl@ak49:~$ openssl ca -config openssl.cnf -engine pkcs11 -keyform engine -keyfile slot_1-id_47 -in user.csr -out user.crt
Using configuration from openssl.cnf
engine "pkcs11" set.
CA certificate and CA private key do not match
4046:error:0B080074:x509 certificate routines:X509_check_private_key:key values mismatch:x509_cmp.c:406:

Re: ruToken под Linux. подпись запросов на сертификат.

выкинул cert из токена, оставил только private key.

nikl@ak49:~$ openssl ca -config openssl.cnf -engine pkcs11 -keyform engine -keyfile slot_1-id_47 -cert keys/ca.crt -in user.csr -out user.crt
Using configuration from openssl.cnf
engine "pkcs11" set.
Check that the request matches the signature
Signature ok
The Subject's Distinguished Name is as follows
countryName           :PRINTABLE:'RU'
stateOrProvinceName   :ASN.1 12:'xxxx'
localityName          :ASN.1 12:'xxxx'
organizationName      :ASN.1 12:'xxxx'
organizationalUnitName:ASN.1 12:'IT'
commonName            :ASN.1 12:'xxxx'
emailAddress          :IA5STRING:'xxxx@xxxx'
Certificate is to be certified until Jan  7 14:45:49 2022 GMT (3650 days)
Sign the certificate? [y/n]:y
4082:error:8000A070:PKCS11 library:PKCS11_rsa_sign:Mechanism invalid:p11_ops.c:131:
4082:error:0D0C3006:asn1 encoding routines:ASN1_item_sign:EVP lib:a_sign.c:281:

Re: ruToken под Linux. подпись запросов на сертификат.

Может все потому, что у меня ruToken S, а не ruToken ECP ?

Re: ruToken под Linux. подпись запросов на сертификат.

nkrasnoyarsky пишет:

Может все потому, что у меня ruToken S, а не ruToken ECP ?

В общем да.

А вы какую задачу хотите решить в конечном итоге?

Re: ruToken под Linux. подпись запросов на сертификат.

задачу простую:
развернуть УЦ с хранением ключа корневого сертификата на токене и подписывать этим ключем пользовательские запросы на сертификаты (которые они генерят где-то там у себя через openssl).

Re: ruToken под Linux. подпись запросов на сертификат.

А какую вы использовали версию opensc-pkcs11.so?

Re: ruToken под Linux. подпись запросов на сертификат.

0.11.13

Re: ruToken под Linux. подпись запросов на сертификат.

а может мне еще openssl обновить? сейчас OpenSSL 0.9.8k 25 Mar 2009

Re: ruToken под Linux. подпись запросов на сертификат.

nkrasnoyarsky пишет:

0.11.13

не, наврал. с этой версией у меня openssl через opensc-pkcs11 вообще не может прочитать содержимое токена:

Using configuration from openssl.cnf
engine "pkcs11" set.
Found empty token; 
PKCS11_get_private_key returned NULL
unable to load CA private key
8447:error:26096080:engine routines:ENGINE_load_private_key:failed loading private key:eng_pkey.c:126:

Если ставить 0.12.2, то читает, но:

Certificate is to be certified until Jan  8 09:42:29 2022 GMT (3650 days)
Sign the certificate? [y/n]:y
9287:error:8000A070:PKCS11 library:PKCS11_rsa_sign:Mechanism invalid:p11_ops.c:131:
9287:error:0D0C3006:asn1 encoding routines:ASN1_item_sign:EVP lib:a_sign.c:281:

Re: ruToken под Linux. подпись запросов на сертификат.

Ну в общем то как написано в этой ветке https://forum.rutoken.ru/topic/1488/ в версии 0.12 алгоритмы RSA для Рутокена S выключены

На версии 0.11.13 у Вас pkcs11-tool --list-objects отрабатывает?

Re: ruToken под Linux. подпись запросов на сертификат.

Кирилл Мещеряков пишет:

Ну в общем то как написано в этой ветке https://forum.rutoken.ru/topic/1488/ в версии 0.12 алгоритмы RSA для Рутокена S выключены

я так предполагал, что засосать RSA в токен я смогу, используя 0.12, а читать неважно чем?

Кирилл Мещеряков пишет:

На версии 0.11.13 у Вас pkcs11-tool --list-objects отрабатывает?

сейчас проверю