Re: Поддержка Рутокен ЭЦП в OpenSSL

Инициализировал я токен, пытаюсь сгенерировать закрытый ключ получаю:

root@tmis-pc:~# openssl genpkey -engine pkcs11_gost -algorithm GOST2001 -pkeyopt slot_key_id:50 -pkeyopt paramset:A -pkeyopt pin:12345678
engine "pkcs11_gost" set.
unable generate gost key
Error generating key
3077568664:error:80011030:Vendor defined:PKCS11_generate_key:Device error:p11_key.c:205:
3077568664:error:8107808E:lib(129):PKEY_GOST01CP_KEYGEN:error generate gost key:gost_sign_pkcs11.c:164:

При этом система поставлена пять минут назад

root@tmis-pc:~# cat /etc/lsb-release 
DISTRIB_ID=Ubuntu
DISTRIB_RELEASE=11.10
DISTRIB_CODENAME=oneiric
DISTRIB_DESCRIPTION="Ubuntu 11.10"

Далее генерим закрытый ключи пользователя и СА на Fedora 17

[root@fedora tls]# openssl genpkey -engine pkcs11_gost -algorithm GOST2001 -pkeyopt slot_key_id:50 -pkeyopt paramset:A -pkeyopt pin:12345678
engine "pkcs11_gost" set.
Error writing key
3075877420:error:0D0A30A7:asn1 encoding routines:i2d_PrivateKey:unsupported public key type:i2d_pr.c:77:
3075877420:error:0906900D:PEM routines:PEM_ASN1_write_bio:ASN1 lib:pem_lib.c:357:
[root@fedora tls]# openssl genpkey -engine pkcs11_gost -algorithm GOST2001 -pkeyopt slot_key_id:100 -pkeyopt paramset:A -pkeyopt pin:12345678
engine "pkcs11_gost" set.
Error writing key
3076315692:error:0D0A30A7:asn1 encoding routines:i2d_PrivateKey:unsupported public key type:i2d_pr.c:77:
3076315692:error:0906900D:PEM routines:PEM_ASN1_write_bio:ASN1 lib:pem_lib.c:357:

Переходим в Ubuntu 11.10

root@tmis-pc:~/dd# openssl req -engine pkcs11_gost -new -key 50 -keyform engine -out req.csr -subj "/C=RU/ST=Moscow/L=Moscow/O=KORUS/OU=IT/CN=Sergey Safarov/emailAddress=s.safarov@mail.com"
engine "pkcs11_gost" set.
PKCS#11 token PIN: 
root@tmis-pc:~/dd# cat req.csr 
-----BEGIN CERTIFICATE REQUEST-----
MIIBRzCB9QIBADCBiDELMAkGA1UEBhMCUlUxDzANBgNVBAgTBk1vc2NvdzEPMA0G
A1UEBxMGTW9zY293MQ4wDAYDVQQKEwVLT1JVUzELMAkGA1UECxMCSVQxFzAVBgNV
BAMTDlNlcmdleSBTYWZhcm92MSEwHwYJKoZIhvcNAQkBFhJzLnNhZmFyb3ZAbWFp
bC5jb20wYzAcBgYqhQMCAhMwEgYHKoUDAgIjAQYHKoUDAgIeAQNDAARAg03vSjQv
2M7UJV4SY+Rwgcd8RE7w/XQo2SkAkw6Dmgae71eegKfXQXMW/MXehShYp1xgw+ub
guwvhUbu7C9li6AAMAoGBiqFAwICAwUAA0EAKKZfcFZImqpZHIQrxCJcXFmqP1+f
0Kolbbj29effNBMSzqnflGpHjZbXhRklno4PDqyMPwAfRlNTZt9GVd3nzQ==
-----END CERTIFICATE REQUEST-----
root@tmis-pc:~/dd# openssl req -engine pkcs11_gost -x509 -new -key 100 -keyform engine -out ca.crt -subj "/C=RU/ST=Moscow/L=Moscow/O=KORUS/OU=IT/CN=TEST CA/emailAddress=TESTCA@korusconsulting"
engine "pkcs11_gost" set.
PKCS#11 token PIN: 
root@tmis-pc:~/dd# cat ca.crt
-----BEGIN CERTIFICATE-----
MIIB/zCCAawCCQDimW6kzCrF6DAKBgYqhQMCAgMFADCBhTELMAkGA1UEBhMCUlUx
DzANBgNVBAgTBk1vc2NvdzEPMA0GA1UEBxMGTW9zY293MQ4wDAYDVQQKEwVLT1JV
UzELMAkGA1UECxMCSVQxEDAOBgNVBAMTB1RFU1QgQ0ExJTAjBgkqhkiG9w0BCQEW
FlRFU1RDQUBrb3J1c2NvbnN1bHRpbmcwHhcNMTIxMTEyMTcwMzQ4WhcNMTIxMjEy
MTcwMzQ4WjCBhTELMAkGA1UEBhMCUlUxDzANBgNVBAgTBk1vc2NvdzEPMA0GA1UE
BxMGTW9zY293MQ4wDAYDVQQKEwVLT1JVUzELMAkGA1UECxMCSVQxEDAOBgNVBAMT
B1RFU1QgQ0ExJTAjBgkqhkiG9w0BCQEWFlRFU1RDQUBrb3J1c2NvbnN1bHRpbmcw
YzAcBgYqhQMCAhMwEgYHKoUDAgIjAQYHKoUDAgIeAQNDAARAypPXVY6VuPOeAgQ7
v/rtlQPejsNQc+u/zX7B4SJnRGXuSGpSuD82kROmUl+MJ53D5rI8Ls+cM7DOZhgx
9Oxk8DAKBgYqhQMCAgMFAANBADqZGmTey1wC6ZkycMI3/tGVzFsaCbX/lG6KH0ge
abBJUUkMpbHzor5qWD0ZiHIQoqf7SdhpkoOY3FA6WYrC034=
-----END CERTIFICATE-----
root@tmis-pc:~/dd# openssl ca -engine pkcs11_gost -keyfile 100 -keyform engine -cert ca.crt -in req.csr -out tester.crt
Using configuration from /usr/lib/ssl/openssl.cnf
engine "pkcs11_gost" set.
PKCS#11 token PIN: 
Check that the request matches the signature
Signature ok
Certificate Details:
        Serial Number: 1 (0x1)
        Validity
            Not Before: Nov 12 17:05:48 2012 GMT
            Not After : Nov 12 17:05:48 2013 GMT
        Subject: C=RU, ST=Moscow, O=KORUS, OU=IT, CN=Sergey Safarov
Certificate is to be certified until Nov 12 17:05:48 2013 GMT (365 days)
Sign the certificate? [y/n]:y


1 out of 1 certificate requests certified, commit? [y/n]y
Write out database with 1 new entries
Data Base Updated
root@tmis-pc:~/dd# cat tester.crt
Certificate:
    Data:
        Version: 1 (0x0)
        Serial Number: 1 (0x1)
        Signature Algorithm: GOST R 34.11-94 with GOST R 34.10-2001
        Issuer: C=RU, ST=Moscow, L=Moscow, O=KORUS, OU=IT, CN=TEST CA/emailAddress=TESTCA@korusconsulting
        Validity
            Not Before: Nov 12 17:05:48 2012 GMT
            Not After : Nov 12 17:05:48 2013 GMT
        Subject: C=RU, ST=Moscow, O=KORUS, OU=IT, CN=Sergey Safarov
        Subject Public Key Info:
            Public Key Algorithm: GOST R 34.10-2001
                Public key:
                   X:69A830E930029D92874FDF04E447CC78170E463125E25D4CED82F344AEF4D83
                   Y:8B652FECEE46852FEC829BEBC3605CA7582885DEC5FC167341D7A7809E57EF9E
                Parameter set: id-GostR3410-2001-CryptoPro-A-ParamSet
    Signature Algorithm: GOST R 34.11-94 with GOST R 34.10-2001
        ea:6c:96:5f:b3:28:04:67:9f:b3:5a:de:2c:d5:db:62:95:8e:
        df:01:d7:6a:19:15:73:5f:f4:c4:47:d0:8a:2e:30:30:0c:09:
        db:fb:65:aa:6e:69:9c:4e:bc:13:2f:7f:98:06:47:bf:11:dd:
        33:5b:14:39:f5:07:f3:68:eb:c7
-----BEGIN CERTIFICATE-----
MIIBxTCCAXICAQEwCgYGKoUDAgIDBQAwgYUxCzAJBgNVBAYTAlJVMQ8wDQYDVQQI
EwZNb3Njb3cxDzANBgNVBAcTBk1vc2NvdzEOMAwGA1UEChMFS09SVVMxCzAJBgNV
BAsTAklUMRAwDgYDVQQDEwdURVNUIENBMSUwIwYJKoZIhvcNAQkBFhZURVNUQ0FA
a29ydXNjb25zdWx0aW5nMB4XDTEyMTExMjE3MDU0OFoXDTEzMTExMjE3MDU0OFow
VDELMAkGA1UEBhMCUlUxDzANBgNVBAgTBk1vc2NvdzEOMAwGA1UEChMFS09SVVMx
CzAJBgNVBAsTAklUMRcwFQYDVQQDEw5TZXJnZXkgU2FmYXJvdjBjMBwGBiqFAwIC
EzASBgcqhQMCAiMBBgcqhQMCAh4BA0MABECDTe9KNC/YztQlXhJj5HCBx3xETvD9
dCjZKQCTDoOaBp7vV56Ap9dBcxb8xd6FKFinXGDD65uC7C+FRu7sL2WLMAoGBiqF
AwICAwUAA0EA6myWX7MoBGefs1reLNXbYpWO3wHXahkVc1/0xEfQii4wMAwJ2/tl
qm5pnE68Ey9/mAZHvxHdM1sUOfUH82jrxw==
-----END CERTIFICATE-----

Скажите почему на Ubuntu 11.10 openssl отказался генерировать закрытые ключи?

Re: Поддержка Рутокен ЭЦП в OpenSSL

А как вы инициализировали токен? Его нжуно инициализировать через Панель управления (которая входит в виндовые драйвера), а не через OpenSC. С Убунтой 11.10 могут быть проблемы такого рода https://forum.rutoken.ru/post/4426/#p4426.

Re: Поддержка Рутокен ЭЦП в OpenSSL

На базе OpenSSL сделан мультиплатформенный и мультибраузерный плагин, который поддерживает работу с сертификатами X.509, подписанные сообщения CMS, запросы на сертификаты PKCS#10 - с использованием российских криптоалгоритмов.

Демо-площадку решения можно посмотреть по ссылке http://pki.rutokenweb.ru

Re: Поддержка Рутокен ЭЦП в OpenSSL

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

А как вы инициализировали токен?

Следующими командами

$ pkcs15-init --erase-card -p rutoken
$ pkcs15-init --create-pkcs15 --so-pin "87654321" --so-puk ""
$ pkcs15-init --store-pin --label "User PIN" --auth-id 02 --pin "12345678" --puk "" --so-pin "87654321" --finalize
Виктор Ткаченко пишет:

Его нужно инициализировать через Панель управления (которая входит в виндовые драйвера)

То есть для того чтобы мне пользоваться rutoken под Linux нужно еще купить лицензию на Windows?

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

С Убунтой 11.10 могут быть проблемы такого рода https://forum.rutoken.ru/post/4426/#p4426. Внизу дан рецепт их решения.

У меня этих сложностей не возникло.
Кстате может возможно будет подготовить эталонное решение (эталонную инструкцию) которое будет стабильно работать? А то получается здесь хочу работать, а здесь не хочу.

Re: Поддержка Рутокен ЭЦП в OpenSSL

То есть для того чтобы мне пользоваться rutoken под Linux нужно еще купить лицензию на Windows?

Пока так. Делаем утилиту инициализации под другие платформы.

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

С Убунтой 11.10 могут быть проблемы такого рода https://forum.rutoken.ru/post/4426/#p4426. Внизу дан рецепт их решения.

У меня этих сложностей не возникло.

Очень похоже как раз на проблему с libusb. В Убунту 11.10 входит глючная версия libusb,  лаги которой как раз и могут вызывать нестабильность работы с токеном. Лучшее ее обновить.

Кстате может возможно будет подготовить эталонное решение (эталонную инструкцию) которое будет стабильно работать? А то
получается здесь хочу работать, а здесь не хочу.

На разных линухах - разные грабли :) По мере хождения по ним - обновляем информацию.

(2012-11-13 14:27:37 отредактировано safarov)

Re: Поддержка Рутокен ЭЦП в OpenSSL

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

На базе OpenSSL сделан мультиплатформенный и мультибраузерный плагин, который поддерживает работу с сертификатами X.509, подписанные сообщения CMS, запросы на сертификаты PKCS#10 - с использованием российских криптоалгоритмов.

Демо-площадку решения можно посмотреть по ссылке http://pki.rutokenweb.ru

Только что проверил работу на тестовой площадке с комьютера под управлением MacOS 10.8.2, браузер Google Chrome версии 23.0.1271.64, Rutoken ECP Flash 4G. Rutoken форматировал под Fedora 17 командами выше. На нем же также находятся сгенирированные вчера сертификаты и ключи.
Результат успешно получил сертификат.
Запрос

-----BEGIN CERTIFICATE REQUEST-----
MIIBmjCCAUcCAQAwFDESMBAGA1UEAxMJc3NhZmFyb3YyMGMwHAYGKoUDAgITMBIG
ByqFAwICIwEGByqFAwICHgEDQwAEQMaCdpuNNJkYtn2rL/IbPJvmmIZI/EmsXIn+
+zt0EIfKBQ01/PInmvEwlflVBQCHuvghi7u+uQxiOjn8uEA9n5+ggcYwgcMGCSqG
SIb3DQEJDjGBtTCBsjAMBgNVHQ8EBQMDB/+AMHUGA1UdJQEB/wRrMGkGCCsGAQUF
BwMEBggrBgEFBQcDAgYIKwYBBQUHAwEGCCsGAQUFBwMDBggrBgEFBQcDCAYKKwYB
BAGCNwIBFQYKKwYBBAGCNwIBFgYKKwYBBAGCNwoDAQYIKwYBBQUHAwkGByqFAwIC
IgYwKwYFKoUDZG8EIgwg0KHQmtCX0JggItCg0KPQotCe0JrQldCdINCt0KbQnyIw
CgYGKoUDAgIDBQADQQDTKHp5PGayE+Q5UzWP/CaPdxwVwJJuVnq214vAvQ/Ae3+1
pEys5s4F5iWoapXsTr+ZN71d1DZi+g0BaMj58DOv
-----END CERTIFICATE REQUEST-----

Сертификат

Certificate:
Data:
Version: 3 (0x2)
Serial Number: 1 (0x1)
Signature Algorithm: GOST R 34.11-94 with GOST R 34.10-2001
Issuer: C=RU,L=Moscow,O=OOO "Garant-Park-Telecom",CN=Test CA
Validity
Not Before: Nov 13 11:26:36 2012 GMT
Not After : Nov 13 11:26:36 2013 GMT
Subject: CN=ssafarov2
Subject Public Key Info:
Public Key Algorithm: GOST R 34.10-2001
Public key:
X:CA8710743BFBFE895CAC49FC488698E69B3C1BF22FAB7DB61899348D9B7682C6
Y:9F9F3D40B8FC393A620CB9BEBB8B21F8BA87000555F99530F19A27F2FC350D05
Parameter set: id-GostR3410-2001-CryptoPro-A-ParamSet
X509v3 extensions:
X509v3 Extended Key Usage: 
TLS Web Client Authentication, E-mail Protection
X509v3 Key Usage: 
Digital Signature, Key Encipherment, Certificate Sign
X509v3 Basic Constraints: critical
CA:FALSE
Signature Algorithm: GOST R 34.11-94 with GOST R 34.10-2001
a9:c7:cf:6a:46:cb:2a:54:c6:7a:54:38:e8:95:6d:ab:61:e2:
a5:b2:c2:91:c0:76:d8:da:f5:ad:0e:9f:1c:e9:3e:d7:54:93:
fb:b3:5c:2d:fb:18:1d:85:1b:33:a6:93:d2:c0:f5:b9:a7:00:
1b:84:27:00:1a:4c:20:cf:cc:12

Информация о текущей структуре pkcs15 ниже:

[root@fedora ~]#  pkcs15-tool -D
Using reader with a card: Aktiv Rutoken ECP 00 00
PKCS#15 Card [Rutoken ECP]:
    Version        : 0
    Serial number  : 000000002CDB7256
    Manufacturer ID: Aktiv Co.
    Last update    : 20121112163647Z
    Flags          : EID compliant

PIN [Security Officer PIN]
    Object Flags   : [0x3], private, modifiable
    ID             : 01
    Flags          : [0x99], case-sensitive, unblock-disabled, initialized, soPin
    Length         : min_len:8, max_len:32, stored_len:32
    Pad char       : 0x00
    Reference      : 1
    Type           : ascii-numeric

PIN [User PIN]
    Object Flags   : [0x3], private, modifiable
    ID             : 02
    Flags          : [0x19], case-sensitive, unblock-disabled, initialized
    Length         : min_len:4, max_len:32, stored_len:32
    Pad char       : 0x00
    Reference      : 2
    Type           : ascii-numeric

В работе я пользуюсь информацией с этой страницы.

Re: Поддержка Рутокен ЭЦП в OpenSSL

Еще раз хочу подчеркнуть - для совместимости с OpenSSL и плагином Рутокен ЭЦП должен быть отформатирован
посредством наших средств, которые не создают PKCS#15 - у нас свой формат хранения данных.

Re: Поддержка Рутокен ЭЦП в OpenSSL

safarov пишет:

То есть для того чтобы мне пользоваться rutoken под Linux нужно еще купить лицензию на Windows?

Лицензию покупать не нужно. Драйверы и софт для инициализации в свободном доступе.

Re: Поддержка Рутокен ЭЦП в OpenSSL

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

Очень похоже как раз на проблему с libusb. В Убунту 11.10 входит глючная версия libusb,  лаги которой как раз и могут вызывать нестабильность работы с токеном. Лучшее ее обновить.

Скомпилировал из исходников и поставил linusb 1.0.9. Под Ubuntu 11.10 ключи начали генерироваться. Может дополнить инструкцию в посте №3 пунктом установки libusb версии не ниже 1.0.9?

Re: Поддержка Рутокен ЭЦП в OpenSSL

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

Еще раз хочу подчеркнуть - для совместимости с OpenSSL и плагином Рутокен ЭЦП должен быть отформатирован
посредством наших средств, которые не создают PKCS#15 - у нас свой формат хранения данных.

Виктор отформатировал Rutoken под Windows  утилитами которые идут в соствае "rtDrivers.x86.v.2.86.00.0460.exe".
С работой Rutoken под Ubuntu разобрались.
Под Fedora 17 ключи создаю, но подписывать ими ничего не могу, "engine" не может работать с закрытым ключом.

[root@fedora ~]# openssl genpkey -engine pkcs11_gost -algorithm GOST2001 -pkeyopt slot_key_id:50 -pkeyopt paramset:A -pkeyopt pin:12345678
engine "pkcs11_gost" set.
Found empty token; 
Error generating key
3076196908:error:81091088:lib(129):PKCS11_FIND_LOGIN_TOKEN:found empty token:engine_pkcs11.c:490:
[root@fedora ~]# openssl req -engine pkcs11_gost -new -key 50 -keyform engine -out req.csr
engine "pkcs11_gost" set.
Found empty token; 
PKCS11_get_private_key returned NULL
cannot load Private Key from engine
3076110892:error:8108F088:lib(129):PKCS11_LOAD_KEY:found empty token:engine_pkcs11.c:991:
3076110892:error:26096080:engine routines:ENGINE_load_private_key:failed loading private key:eng_pkey.c:126:
unable to load Private Key

Виктор можете сказать лукарство в данном случае?

Re: Поддержка Рутокен ЭЦП в OpenSSL

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

Еще раз хочу подчеркнуть - для совместимости с OpenSSL и плагином Рутокен ЭЦП должен быть отформатирован
посредством наших средств, которые не создают PKCS#15 - у нас свой формат хранения данных.

Виктор отформатировал Rutoken под Windows  утилитами которые идут в соствае "rtDrivers.x86.v.2.86.00.0460.exe".
С работой Rutoken под Ubuntu разобрались.
Под Fedora 17 ключи создаю, но подписывать ими ничего не могу, "engine" не может работать с закрытым ключом.

[root@fedora ~]# openssl genpkey -engine pkcs11_gost -algorithm GOST2001 -pkeyopt slot_key_id:50 -pkeyopt paramset:A -pkeyopt pin:12345678
engine "pkcs11_gost" set.
Found empty token; 
Error generating key
3076196908:error:81091088:lib(129):PKCS11_FIND_LOGIN_TOKEN:found empty token:engine_pkcs11.c:490:
[root@fedora ~]# openssl req -engine pkcs11_gost -new -key 50 -keyform engine -out req.csr
engine "pkcs11_gost" set.
Found empty token; 
PKCS11_get_private_key returned NULL
cannot load Private Key from engine
3076110892:error:8108F088:lib(129):PKCS11_LOAD_KEY:found empty token:engine_pkcs11.c:991:
3076110892:error:26096080:engine routines:ENGINE_load_private_key:failed loading private key:eng_pkey.c:126:
unable to load Private Key

Виктор можете сказать лукарство в данном случае?

Я бы попробовал поиграться с номером слота (https://forum.rutoken.ru/post/4744/#p4744)

Re: Поддержка Рутокен ЭЦП в OpenSSL

а есть библиотеки (https://www.rutoken.ru/download/softwar … -4.2.0.zip) для win-64?

(2012-12-14 13:41:42 отредактировано ivan-t)

Re: Поддержка Рутокен ЭЦП в OpenSSL

Добрый день.

В сообщении https://forum.rutoken.ru/post/4742/#p4742 Виктор описал как при помощи ключа подписать файл.

Сгенерировать ключ на токене получилось, но как при помощи этого ключа подписать файл в формате PKCS#7 ?

Re: Поддержка Рутокен ЭЦП в OpenSSL

В конце этого сообщения описано https://forum.rutoken.ru/post/4273/#p4273

Re: Поддержка Рутокен ЭЦП в OpenSSL

Здравствуйте, Виктор.
Забыл сказать, система в которой работаю Ubuntu

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

В конце этого сообщения описано https://forum.rutoken.ru/post/4273/#p4273

- по этой инструкции делал всё как написано, но для того чтобы подписать файл, сперва нужно сгенерировать сертификат по заявке (как я понял), и на этом этапе у меня возникли проблемы:

$ openssl ca -engine pkcs11_gost -keyfile 100 -keyform engine -cert ca.crt -in req.csr -out tester.crt
Using configuration from /usr/lib/ssl/openssl.cnf
engine "pkcs11_gost" set.
PKCS#11 token PIN:
Invalid name options: "ca_defaultoption"

Может есть возможность подписать файл в формате PKCS#7  используя только ключ подписи ?