Rutoken + openVPN

Сделал все по статье

http://habrahabr.ru/company/aktiv-company/blog/137306/

в итоге конечно заработало. Рутокен ЭЦП. Правда времени потратил почти целый день и все из-за своей невнимательности - согласно статье на windows клиенте OpenVPN надо запускать из командной строки, а я запускал через OpenVPNGui. А он видите-ли не умеет запрашивать пин-код от токена (хотя пароль от зашифрованного ключа запрашивать умеет). Вычислил, включив лог на уровень 9 (verb 9) - лог завершался "Calling pin_prompt hook for Rutoken ECP". Но не сразу понял что проблема в gui, думал несовместимость с драйверами рутокена.

Зато уяснил следующее:
1. Никакой специальной версии клиента OpenVPN сейчас не требуется, начиная с версии 2.2 OpenVPN под Windows поддерживает работу с PKSC#11
2. После установки доп. софта Linux (использовал Ubuntu 12.10) надо перезагрузить, иначе токен он не видит.
3. В расширениях сертификата в текущей версии XCA надо отмечать не Microsoft Server/Client (такого вообще нет), а TLS WEB Server/Client Autentification

Кроме того, пока разбирался, попробовал использовать существующую пару (сертификат + ключ), созданную без рутокена. Под windows с помощью openssl из комплекта openvpn объединил файлы сертификата .crt и закрытого ключа пользователя .key в один файл .p12
Этот файл .p12 c помощью "Панели управления рутокен" записал на рутокен. И openvpn c ним тоже нормально работает, только что вместо rtPKSC11ECP.dll пришлось использовать rtPKCS11.dll.
А вот что интересно - так то, что "Панель управления рутокен" (равно как и "Браузер сертификатов") не видит сертификата/ключа, записанного под линуксом с помощью XCA, а XCA не видит сертификата/ключа, записанного через "Панель управления рутокен". Хотя эти две пары одновременно существуют на токене. (Токен не форматировал никак - т.е. формат тот, что идет с завода).

Теперь собственно вопросы. (Основное что мне надо от рутокена - неизвлекаемость закрытого ключа даже при условии знания PIN.)

1. В варианте с генерацией ключей сразу на токене через XCA ключик отображаетсЯ на вкладке Private Keys и кнопочка Export доступна. Хотя при нажатии заголовок выглядит как Public Key Export (для остальных ключей пишет Key Export). Это и означает что закрытый ключа нельзя извлечь и шифрование осуществляется в токене ?

2. В варианте с записью существующих ключей "панель управления рутокен" пишет, что "ключевая пара не является экспортируемой". Это и означает что закрытый ключ нельзя извлечь и шифрование осуществляется в токене ? И еще вопрос - вариант с записью ключей в плане безопасности чем-то хуже первого ? (То что закрытый ключ на компьютере временно присутствует в виде файла - это понятно, но интересует именно то, что в итоге получается на токене).

3. Есть ли программа которая может показать все, что записано на токене (т.к. описанные выше показывают только то что записали сами.) ?

Re: Rutoken + openVPN

Спасибо за подробный фидбэк :)

Кроме того, пока разбирался, попробовал использовать существующую пару (сертификат + ключ), созданную без рутокена. Под windows с помощью openssl из комплекта openvpn объединил файлы сертификата .crt и закрытого ключа пользователя .key в один файл .p12
Этот файл .p12 c помощью "Панели управления рутокен" записал на рутокен. И openvpn c ним тоже нормально работает, только что вместо rtPKSC11ECP.dll пришлось использовать rtPKCS11.dll.

К сожалению наши библиотеки rtPKSC11ECP.dl и rtPKCS11.dll  несовместимы. Поэтому вы не сможете использовать токен под Linux и Mac OS в силу того, что rtPKCS11.dll  не является кроссплатформенной. Реализация совместимости в процессе.

А вот что интересно - так то, что "Панель управления рутокен" (равно как и "Браузер сертификатов") не видит сертификата/ключа, записанного под линуксом с помощью XCA, а XCA не видит сертификата/ключа, записанного через "Панель управления рутокен". Хотя эти две пары одновременно существуют на токене. (Токен не форматировал никак - т.е. формат тот, что идет с завода).

Та самая несоместимость :(

В варианте с генерацией ключей сразу на токене через XCA ключик отображаетсЯ на вкладке Private Keys и кнопочка Export доступна. Хотя при нажатии заголовок выглядит как Public Key Export (для остальных ключей пишет Key Export). Это и означает что закрытый ключа нельзя извлечь и шифрование осуществляется в токене ?

Да

В варианте с записью существующих ключей "панель управления рутокен" пишет, что "ключевая пара не является экспортируемой". Это и означает что закрытый ключ нельзя извлечь и шифрование осуществляется в токене ? И еще вопрос - вариант с записью ключей в плане безопасности чем-то хуже первого ? (То что закрытый ключ на компьютере временно присутствует в виде файла - это понятно, но интересует именно то, что в итоге получается на токене).

Да, закрытый ключ неэкспортируемый. Хуже только тем, что ключ может быть украден перед импортом. 

Есть ли программа которая может показать все, что записано на токене (т.к. описанные выше показывают только то что записали сами.) ?

Можете взять pkcs11-tool из OpenSC и подсовывать ему разные библиотеки pkcs11

Re: Rutoken + openVPN

Добрый день!

Совместимость скоро появится.
Следите за обновлениями!

Re: Rutoken + openVPN

Спасибо за ответы.
Что касается несовместимости, то она меня не очень волнует, благо токен используется на каком-то одном компьютере и там или Windows (в основном) или Linux (реально сейчас таких у меня нет) (а на крайний случай можно и два сертификата записать.
А есть ли аналог XCA под Windows ? (Т.е. программа котороая может генерировать ключи прямо на токене) ?

Что касается

ключ украден

Тогда уж надо видимо начинать с того, что сначала заводить  отдельный токен под ключ центра сертификации и генерировать ключ центра сертификации на нем.
и только после этого генерировать и подписывать ключ на токене клиента. А иначе могут украсть ключик центра сертификации.

Можете взять pkcs11-tool из OpenSC и подсовывать ему разные библиотеки pkcs11

Так с разными то библиотеками и OpenVPN показывает, но хотелось бы просматривать все одной командой.

Re: Rutoken + openVPN

Да, вы можете сгенерировать ключи центра сертификации на токене и хранить их там безопасно и неизвлекаемо.
Однако, для этого нужно будет где-то хранить пин-код, Вы же наверняка не будете бегать к серверу для ввода пин-кода каждый раз когда захотите выписать сертификат пользователю. А в конфиг-файле хранить его небезопасно, ведь всякий кто получит к нему доступ нагенерирует левых сертификатов и подпишет вашим ключом, даже если он на токене.

ХСA есть под Windows, Linux и MacOS X.
Кроме того, можно использовать openssl в режиме командной строки.

pkcs11tool покажет все, что записано на токен в формате, совместимым c той библиотекой, которую Вы используете.

Просмотреть содержимое токена на более низком уровне невозможно.

Re: Rutoken + openVPN

nafa пишет:

Сделал все по статье

http://habrahabr.ru/company/aktiv-company/blog/137306/

в итоге конечно заработало. Рутокен ЭЦП. Правда времени потратил почти целый день и все из-за своей невнимательности - согласно статье на windows клиенте OpenVPN надо запускать из командной строки, а я запускал через OpenVPNGui. А он видите-ли не умеет запрашивать пин-код от токена (хотя пароль от зашифрованного ключа запрашивать умеет). Вычислил, включив лог на уровень 9 (verb 9) - лог завершался "Calling pin_prompt hook for Rutoken ECP". Но не сразу понял что проблема в gui, думал несовместимость с драйверами рутокена.

?

А как быть с вводом пин-кода, не заставлять же пользователя каждый раз запускать из командной строки клиента openvpn.
Есть варианты как можно упростить процесс подключения с вводом пин-кода?

Re: Rutoken + openVPN

Скрипт написать, который бы запускал openvpn и запрашивал pin-код. Или посмотреть в направлении openvpn-gui. Возможно, он уже умеет запрашивать pin-код.

Re: Rutoken + openVPN

andrbug пишет:

А как быть с вводом пин-кода, не заставлять же пользователя каждый раз запускать из командной строки клиента openvpn.
Есть варианты как можно упростить процесс подключения с вводом пин-кода?

а если использовать cryptoapi http://nix-sa.blogspot.hu/2011/12/openv … ows-7.html ?
тогда пин запрашивается

Re: Rutoken + openVPN

Еесть ещё вот такой проект
OpenVPNManager (http://openvpn.jowisoftware.de/)
тихо  сидит в трее, по выпадающему меню подключается,  аккуратно выводит GUI окно для пароля либо PIN-а токена,
при подключении меняет цвет на зеленый. Никакой консоли.