<?xml version="1.0" encoding="utf-8"?>
<feed xmlns="http://www.w3.org/2005/Atom">
	<title type="html"><![CDATA[Форум Рутокен &mdash; Шифрование и подпись с помощью Рутокен ЭЦП]]></title>
	<link rel="self" href="https://forum.rutoken.ru/feed/atom/topic/2125/" />
	<updated>2014-09-23T11:00:31Z</updated>
	<generator>PunBB</generator>
	<id>https://forum.rutoken.ru/topic/2125/</id>
		<entry>
			<title type="html"><![CDATA[Re: Шифрование и подпись с помощью Рутокен ЭЦП]]></title>
			<link rel="alternate" href="https://forum.rutoken.ru/post/7547/#p7547" />
			<content type="html"><![CDATA[<p>Хорошо.<br />Спасибо за репорт. <br />Мы посмотрим что там не так.</p>]]></content>
			<author>
				<name><![CDATA[Кирилл Мещеряков]]></name>
				<uri>https://forum.rutoken.ru/user/6786/</uri>
			</author>
			<updated>2014-09-23T11:00:31Z</updated>
			<id>https://forum.rutoken.ru/post/7547/#p7547</id>
		</entry>
		<entry>
			<title type="html"><![CDATA[Re: Шифрование и подпись с помощью Рутокен ЭЦП]]></title>
			<link rel="alternate" href="https://forum.rutoken.ru/post/7546/#p7546" />
			<content type="html"><![CDATA[<p>Проблема не в том, что не видно объекты. Разницу в использовании библиотек мы поняли быстро :)<br />Нужно реализовать подпись и расшифровку файлов ключем из рутокена.<br />Подпись делали командой<br /></p><div class="codebox"><pre><code>$ echo &quot;engine -t dynamic -pre SO_PATH:/usr/lib64/openssl/engines/engine_pkcs11.so -pre ID:pkcs11 -pre LIST_ADD:1 -pre LOAD -pre MODULE_PATH:/usr/lib64/opensc-pkcs11.so
rsautl -engine pkcs11 -keyform engine -inkey slot_1-id_6e65776b6579736574 -sign -in init_cs.sh -out init_cs.sh.sig&quot;|openssl</code></pre></div><p>Она почему-то валится с ошибкой RSA Operation error.</p><p>В итоге кучи экспериментов выяснили причину: rsautl не работает с файлами больше 245 байт (проверяли на операции sign). Возможно, это связано с особенностями самого токена, возможно — нет. Проблема решена.<br />Спасибо за понимание.</p>]]></content>
			<author>
				<name><![CDATA[dkostousov]]></name>
				<uri>https://forum.rutoken.ru/user/9339/</uri>
			</author>
			<updated>2014-09-23T10:57:55Z</updated>
			<id>https://forum.rutoken.ru/post/7546/#p7546</id>
		</entry>
		<entry>
			<title type="html"><![CDATA[Re: Шифрование и подпись с помощью Рутокен ЭЦП]]></title>
			<link rel="alternate" href="https://forum.rutoken.ru/post/7545/#p7545" />
			<content type="html"><![CDATA[<div class="quotebox"><cite>dkostousov пишет:</cite><blockquote><p>По факту, мы используем штатную библиотеку. Как нам запустить шифрование и подпись?</p></blockquote></div><p>Ваш вопрос слишком общий, не могли бы поконкретнее пояснить? Что именно хотите сделать?<br />Я попытался ответить на вопрос в вашем последнем сообщении (почему не видно объекты). Это помогло?</p>]]></content>
			<author>
				<name><![CDATA[Кирилл Мещеряков]]></name>
				<uri>https://forum.rutoken.ru/user/6786/</uri>
			</author>
			<updated>2014-09-23T10:36:03Z</updated>
			<id>https://forum.rutoken.ru/post/7545/#p7545</id>
		</entry>
		<entry>
			<title type="html"><![CDATA[Re: Шифрование и подпись с помощью Рутокен ЭЦП]]></title>
			<link rel="alternate" href="https://forum.rutoken.ru/post/7544/#p7544" />
			<content type="html"><![CDATA[<p>По факту, мы используем штатную библиотеку. Как нам запустить шифрование и подпись?</p>]]></content>
			<author>
				<name><![CDATA[dkostousov]]></name>
				<uri>https://forum.rutoken.ru/user/9339/</uri>
			</author>
			<updated>2014-09-23T09:15:15Z</updated>
			<id>https://forum.rutoken.ru/post/7544/#p7544</id>
		</entry>
		<entry>
			<title type="html"><![CDATA[Re: Шифрование и подпись с помощью Рутокен ЭЦП]]></title>
			<link rel="alternate" href="https://forum.rutoken.ru/post/7543/#p7543" />
			<content type="html"><![CDATA[<p>Добрый день.</p><p>Если вы используете библиотеку librtpkcs11ecp то Вам следует сначала отформатировать токен в Windows через панель управления, а затем пересоздать ключи с помощью pkcs11-tool опять же скормив ему библиотеку librtpkcs11ecp.<br />Библиотека opensc несовместима по форматам данных.</p>]]></content>
			<author>
				<name><![CDATA[Кирилл Мещеряков]]></name>
				<uri>https://forum.rutoken.ru/user/6786/</uri>
			</author>
			<updated>2014-09-23T08:26:28Z</updated>
			<id>https://forum.rutoken.ru/post/7543/#p7543</id>
		</entry>
		<entry>
			<title type="html"><![CDATA[Re: Шифрование и подпись с помощью Рутокен ЭЦП]]></title>
			<link rel="alternate" href="https://forum.rutoken.ru/post/7540/#p7540" />
			<content type="html"><![CDATA[<p>В ходе экспериментов выяснилось, что нельзя опираться на вывод утилиты p11tool. Она говорит другие номера слотов.<br />Для получения номера слота нужно использовать pkcs11-tool с тем же модулем, что и для openssl:<br /></p><div class="codebox"><pre><code>$ pkcs11-tool --module /usr/lib64/opensc-pkcs11.so -L
Available slots:
Slot 0 (0xffffffffffffffff): Virtual hotplug slot
  (empty)
Slot 1 (0x1): Aktiv Rutoken ECP 00 00
  token label        : Rutoken ECP (User PIN)
  token manufacturer : Aktiv Co.
  token model        : PKCS#15
  token flags        : rng, login required, PIN initialized, token initialized
  hardware version   : 0.0
  firmware version   : 0.0
  serial num         : 00000000303E60D0</code></pre></div><p>Номер слота rutoken — 1. Если запускать с ключиком -T, то слот будет 0.<br />Запускаем openssl с соответствующими аргументами, слот 1:<br /></p><div class="codebox"><pre><code>$ echo &quot;engine -t dynamic -pre SO_PATH:/usr/lib64/openssl/engines/engine_pkcs11.so -pre ID:pkcs11 -pre LIST_ADD:1 -pre LOAD -pre MODULE_PATH:/usr/lib64/opensc-pkcs11.so
rsautl -engine pkcs11 -keyform engine -inkey slot_1-id_6e65776b6579736574 -sign -in init_cs.sh -out init_cs.sh.sig&quot;|openssl</code></pre></div><p>Запрос ПИНа есть, но результат отрицательный<br /></p><div class="codebox"><pre><code>OpenSSL&gt; (dynamic) Dynamic engine loading support
[Success]: SO_PATH:/usr/lib64/openssl/engines/engine_pkcs11.so
[Success]: ID:pkcs11
[Success]: LIST_ADD:1
[Success]: LOAD
[Success]: MODULE_PATH:/usr/lib64/opensc-pkcs11.so
Loaded: (pkcs11) pkcs11 engine
     [ available ]
140240801535872:error:25066067:DSO support routines:DLFCN_LOAD:could not load the shared library:dso_dlfcn.c:187:filename(/usr/lib64/openssl/engines/libgost.so): /usr/lib64/openssl/engines/libgost.so: cannot open shared object file: No such file or directory
140240801535872:error:25070067:DSO support routines:DSO_load:could not load the shared library:dso_lib.c:244:
140240801535872:error:260B6084:engine routines:DYNAMIC_LOAD:dso not found:eng_dyn.c:450:
140240801535872:error:2606A074:engine routines:ENGINE_by_id:no such engine:eng_list.c:419:id=gost
140240801535872:error:25066067:DSO support routines:DLFCN_LOAD:could not load the shared library:dso_dlfcn.c:187:filename(libgost.so): libgost.so: cannot open shared object file: No such file or directory
140240801535872:error:25070067:DSO support routines:DSO_load:could not load the shared library:dso_lib.c:244:
140240801535872:error:260B6084:engine routines:DYNAMIC_LOAD:dso not found:eng_dyn.c:450:
OpenSSL&gt; engine &quot;pkcs11&quot; set.
PKCS#11 token PIN: 
RSA operation error
error in rsautl
OpenSSL&gt;</code></pre></div><p>Сразу скажу, ПИН правильный. В случае неправильного — openssl кричит среди прочего &quot;unable to load Private Key&quot;.<br />Если запустить со слотом 0 — пин не спрашивает, кричит среди прочего &quot;unable to load Private Key&quot;</p><p>Используем библиотеку rutoken:<br /></p><div class="codebox"><pre><code>$ pkcs11-tool --module /usr/lib64/librtpkcs11ecp.so -L
Available slots:
Slot 0 (0x0): Aktiv Rutoken ECP 00 00
  token label        : Rutoken ECP &lt;no label&gt;
  token manufacturer : Aktiv Co.
  token model        : Rutoken ECP
  token flags        : rng, login required, PIN initialized, token initialized
  hardware version   : 20.4
  firmware version   : 18.0
  serial num         : 303e60d0
Slot 1 (0x1): 
  (empty)</code></pre></div><p>Номер слота — 0. Openssl говорит, что не нашла ключ:<br /></p><div class="codebox"><pre><code>echo &quot;engine -t dynamic -pre SO_PATH:/usr/lib64/openssl/engines/engine_pkcs11.so -pre ID:pkcs11 -pre LIST_ADD:1 -pre LOAD -pre MODULE_PATH:/opt/aktivco/rutokenecp/x86_64/librtpkcs11ecp.so
rsautl -engine pkcs11 -keyform engine -inkey slot_0-id_6e65776b6579736574 -sign -in init_cs.sh -out init_cs.sh.sig&quot;|openssl
OpenSSL&gt; (dynamic) Dynamic engine loading support
[Success]: SO_PATH:/usr/lib64/openssl/engines/engine_pkcs11.so
[Success]: ID:pkcs11
[Success]: LIST_ADD:1
[Success]: LOAD
[Success]: MODULE_PATH:/opt/aktivco/rutokenecp/x86_64/librtpkcs11ecp.so
Loaded: (pkcs11) pkcs11 engine
     [ available ]
OpenSSL&gt; engine &quot;pkcs11&quot; set.
PKCS#11 token PIN: 
No keys found.
PKCS11_get_private_key returned NULL
cannot load Private Key from engine
140060670044032:error:26096080:engine routines:ENGINE_load_private_key:failed loading private key:eng_pkey.c:126:
unable to load Private Key
error in rsautl
OpenSSL</code></pre></div><p>Судя по ответу — не может найти ключ.</p><p>Еще интересно:<br /></p><div class="codebox"><pre><code> pkcs11-tool --module /usr/lib64/librtpkcs11ecp.so -Ol
Using slot 0 with a present token (0x0)
Logging in to &quot;Rutoken ECP &lt;no label&gt;&quot;.
Please enter User PIN: </code></pre></div><p>Ничего не находит.</p><div class="codebox"><pre><code>$ pkcs11-tool --module /usr/lib64/opensc-pkcs11.so -Ol 
Using slot 1 with a present token (0x1)
Logging in to &quot;Rutoken ECP (User PIN)&quot;.
Please enter User PIN: 
Private Key Object; RSA 
  label:      Certificate
  ID:         6e65776b6579736574
  Usage:      decrypt, sign, unwrap
Public Key Object; RSA 2048 bits
  label:      kostousov-ds-ra
  ID:         6e65776b6579736574
  Usage:      encrypt, verify, wrap
Certificate Object, type = X.509 cert
  label:      Certificate
  ID:         6e65776b6579736574</code></pre></div><p>Есть и сертификат, и ключ. Т.е. потенциально через штатную библиотеку работать должно. Но не работает. Видимо где-то ошибка. Вопрос - где?</p><p>Да, /usr/lib64/librtpkcs11ecp.so — это симлинк:<br /></p><div class="codebox"><pre><code>$ ls -l /usr/lib64/librtpkcs11ecp.so
lrwxrwxrwx 1 root root 48 сен 23 10:53 /usr/lib64/librtpkcs11ecp.so -&gt; /opt/aktivco/rutokenecp/x86_64/librtpkcs11ecp.so</code></pre></div>]]></content>
			<author>
				<name><![CDATA[dkostousov]]></name>
				<uri>https://forum.rutoken.ru/user/9339/</uri>
			</author>
			<updated>2014-09-23T06:56:20Z</updated>
			<id>https://forum.rutoken.ru/post/7540/#p7540</id>
		</entry>
		<entry>
			<title type="html"><![CDATA[Шифрование и подпись с помощью Рутокен ЭЦП]]></title>
			<link rel="alternate" href="https://forum.rutoken.ru/post/7539/#p7539" />
			<content type="html"><![CDATA[<p>токен инициализировали так:<br /></p><div class="codebox"><pre><code>pkcs15-init --erase-card -p rutoken_ecp
pkcs15-init --create-pkcs15 --so-pin &quot;1234567890&quot; --so-puk &quot;&quot;
pkcs15-init --store-pin --label &quot;User PIN&quot; --auth-id 02 --pin &quot;0987654321&quot; --puk &quot;&quot; --so-pin &quot;1234567890&quot; --finalize
pkcs11-tool --module /usr/lib64/opensc-pkcs11.so --keypairgen --key-type rsa:2048 --login -p 0987654321 --label &quot;user&quot; 
--id 6e65776b6579736574</code></pre></div><p>Теперь необходимо подписать файл. Вариант раз, без использования библиотеки rutoken:<br /></p><div class="codebox"><pre><code>echo &quot;engine -t dynamic -pre SO_PATH:/usr/lib64/openssl/engines/engine_pkcs11.so -pre ID:pkcs11 -pre LIST_ADD:1 -pre LOAD -pre MODULE_PATH:/usr/lib64/opensc-pkcs11.so
rsautl -engine pkcs11 -keyform engine -inkey slot_2-id_6e65776b6579736574 -sign -in init_cs.sh -out init_cs.sh.sig&quot;|openssl</code></pre></div><p>В ответ openssl ругается<br /></p><div class="codebox"><pre><code>OpenSSL&gt; (dynamic) Dynamic engine loading support
[Success]: SO_PATH:/usr/lib64/openssl/engines/engine_pkcs11.so
[Success]: ID:pkcs11
[Success]: LIST_ADD:1
[Success]: LOAD
[Success]: MODULE_PATH:/usr/lib64/opensc-pkcs11.so
Loaded: (pkcs11) pkcs11 engine
     [ available ]
139943002773376:error:25066067:DSO support routines:DLFCN_LOAD:could not load the shared library:dso_dlfcn.c:187:filename(/usr/lib64/openssl/engines/libgost.so): /usr/lib64/openssl/engines/libgost.so: cannot open shared object file: No such file or directory
139943002773376:error:25070067:DSO support routines:DSO_load:could not load the shared library:dso_lib.c:244:
139943002773376:error:260B6084:engine routines:DYNAMIC_LOAD:dso not found:eng_dyn.c:450:
139943002773376:error:2606A074:engine routines:ENGINE_by_id:no such engine:eng_list.c:419:id=gost
139943002773376:error:25066067:DSO support routines:DLFCN_LOAD:could not load the shared library:dso_dlfcn.c:187:filename(libgost.so): libgost.so: cannot open shared object file: No such file or directory
139943002773376:error:25070067:DSO support routines:DSO_load:could not load the shared library:dso_lib.c:244:
139943002773376:error:260B6084:engine routines:DYNAMIC_LOAD:dso not found:eng_dyn.c:450:
OpenSSL&gt; engine &quot;pkcs11&quot; set.
Invalid slot number: 2
PKCS11_get_private_key returned NULL
cannot load Private Key from engine
139943002773376:error:25066067:DSO support routines:DLFCN_LOAD:could not load the shared library:dso_dlfcn.c:187:filename(/usr/lib64/openssl/engines/libgost.so): /usr/lib64/openssl/engines/libgost.so: cannot open shared object file: No such file or directory
139943002773376:error:25070067:DSO support routines:DSO_load:could not load the shared library:dso_lib.c:244:
139943002773376:error:260B6084:engine routines:DYNAMIC_LOAD:dso not found:eng_dyn.c:450:
139943002773376:error:2606A074:engine routines:ENGINE_by_id:no such engine:eng_list.c:419:id=gost
139943002773376:error:25066067:DSO support routines:DLFCN_LOAD:could not load the shared library:dso_dlfcn.c:187:filename(libgost.so): libgost.so: cannot open shared object file: No such file or directory
139943002773376:error:25070067:DSO support routines:DSO_load:could not load the shared library:dso_lib.c:244:
139943002773376:error:260B6084:engine routines:DYNAMIC_LOAD:dso not found:eng_dyn.c:450:
139943002773376:error:26096080:engine routines:ENGINE_load_private_key:failed loading private key:eng_pkey.c:126:
unable to load Private Key
error in rsautl
OpenSSL&gt;</code></pre></div><p>Думается проблема в том, что модуль собран с gost&#039;ом, а openssl - нет.</p><p>Вариант два, с использованием библиотеки рутокен:<br /></p><div class="codebox"><pre><code>echo &quot;engine -t dynamic -pre SO_PATH:/usr/lib64/openssl/engines/engine_pkcs11.so -pre ID:pkcs11 -pre LIST_ADD:1 -pre LOAD -pre MODULE_PATH:/opt/aktivco/rutokenecp/x86_64/librtpkcs11ecp.so
rsautl -engine pkcs11 -keyform engine -inkey slot_2-id_6e65776b6579736574 -sign -in init_cs.sh -out init_cs.sh.sig&quot;|openssl</code></pre></div><p>Ответ получаем другого содержания<br /></p><div class="codebox"><pre><code>OpenSSL&gt; (dynamic) Dynamic engine loading support
[Success]: SO_PATH:/usr/lib64/openssl/engines/engine_pkcs11.so
[Success]: ID:pkcs11
[Success]: LIST_ADD:1
[Success]: LOAD
[Success]: MODULE_PATH:/opt/aktivco/rutokenecp/x86_64/librtpkcs11ecp.so
Loaded: (pkcs11) pkcs11 engine
     [ available ]
OpenSSL&gt; engine &quot;pkcs11&quot; set.
Found empty token; 
PKCS11_get_private_key returned NULL
cannot load Private Key from engine
140095143139200:error:26096080:engine routines:ENGINE_load_private_key:failed loading private key:eng_pkey.c:126:
unable to load Private Key
error in rsautl
OpenSSL&gt;</code></pre></div><p>Судя по ответу — модуль подгрузился, но работать не захотел, ПИН не спросил.</p><p>Вывод различных утилит:<br /></p><div class="codebox"><pre><code>$ pkcs15-tool -D
Using reader with a card: Aktiv Rutoken ECP 00 00
PKCS#15 Card [Rutoken ECP]:
        Version        : 0
        Serial number  : 00000000303E60D0
        Manufacturer ID: Aktiv Co.
        Last update    : 20140717055504Z
        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 (0x01)
        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 (0x02)
        Type           : ascii-numeric

Private RSA Key [Certificate]
        Object Flags   : [0x3], private, modifiable
        Usage          : [0x2E], decrypt, sign, signRecover, unwrap
        Access Flags   : [0x0]
        ModLength      : 2048
        Key ref        : 1 (0x1)
        Native         : yes
        Path           : 3f001000100060020001
        Auth ID        : 02
        ID             : 6e65776b6579736574
        GUID           : {1c623536-406f-01c7-cfc0-4aab6ecb8b79}

Public RSA Key [kostousov-ds-ra]
        Object Flags   : [0x2], modifiable
        Usage          : [0xD1], encrypt, wrap, verify, verifyRecover
        Access Flags   : [0x0]
        ModLength      : 2048
        Key ref        : 0 (0x0)
        Native         : no
        Path           : 3f0050000200
        ID             : 6e65776b6579736574
        DirectValue    : &lt;absent&gt;

X.509 Certificate [Certificate]
        Object Flags   : [0x2], modifiable
        Authority      : no
        Path           : 3f0050000300
        ID             : 6e65776b6579736574
        GUID           : {1c623536-406f-01c7-cfc0-4aab6ecb8b79}
        Encoded serial : 02 08 700D69305EEA7F8E</code></pre></div><div class="codebox"><pre><code>$ p11tool --list-tokens
Token 0:
        URL: pkcs11:model=p11-kit-trust;manufacturer=PKCS%2311%20Kit;serial=1;token=System%20Trust
        Label: System Trust
        Manufacturer: PKCS#11 Kit
        Model: p11-kit-trust
        Serial: 1


Token 1:
        URL: pkcs11:model=p11-kit-trust;manufacturer=PKCS%2311%20Kit;serial=1;token=Default%20Trust
        Label: Default Trust
        Manufacturer: PKCS#11 Kit
        Model: p11-kit-trust
        Serial: 1


Token 2:
        URL: pkcs11:model=PKCS%2315;manufacturer=Aktiv%20Co.;serial=00000000303E60D0;token=Rutoken%20ECP%20%28User%20PIN%29
        Label: Rutoken ECP (User PIN)
        Manufacturer: Aktiv Co.
        Model: PKCS#15
        Serial: 00000000303E60D0</code></pre></div><p>Как правильно производить подпись или шифрования средствами rutoken?</p><br /><br /><p>Операционная система Fedora 20 x86_64<br />opensc-0.13.0-11.fc20.x86_64<br />pkcs11-helper-1.10-2.fc20.x86_64<br />pcsc-tools-1.4.17-8.fc20.x86_64<br />pcsc-lite-ccid-1.4.13-1.fc20.x86_64<br />pcsc-lite-libs-1.8.10-2.fc20.x86_64<br />pcsc-perl-1.4.12-8.fc20.x86_64<br />pcsc-lite-1.8.10-2.fc20.x86_64<br />openssl-libs-1.0.1e-39.fc20.x86_64<br />openssl-1.0.1e-39.fc20.x86_64<br />librtpkcs11ecp-1.1.5-1.x86_64</p>]]></content>
			<author>
				<name><![CDATA[dkostousov]]></name>
				<uri>https://forum.rutoken.ru/user/9339/</uri>
			</author>
			<updated>2014-09-23T06:05:01Z</updated>
			<id>https://forum.rutoken.ru/post/7539/#p7539</id>
		</entry>
</feed>
