Описание
Для работы подходят Рутокен семейства «ЭЦП». Если нужен только RSA — лучше всего брать «Рутокен ЭЦП PKI»
Компания-производитель предоставляет свой драйвер pkcs11.
Он более фунционален, чем «штатный» opensc-pkcs11
.
Рутокен можно использовать для неизвлекаемого хранения RSA-ключей и использования их для
- установки соединения средствами openconnect,
- входа по ключу через ssh,
- хранения сертификатов,
- формирования электронной подписи.
Подготовка к работе нового токена
Создание структуры pkcs15
pkcs15-init --create-pkcs15
В процессе можен быть запрошен пин-код администратора. Его стоит запомнить.
Запись пользовательского пин-кода
pkcs15-init --store-pin --label "User PIN" --auth-id 02 --finalize
Генерация ключа с использованием штатного драйвера
pkcs11-tool -l --keypairgen --key-type rsa:2048 -a OpenscTestKey
Генерация с использованием библиотеки Rutoken
pkcs11-tool --module /usr/lib64/librtpkcs11ecp.so -l --keypairgen --key-type rsa:2048 -a RutokenTestKey
Точное значение параметров командной строки можно посмотреть командой pkcs11-tool --help
При генерации можно задать id ключа. В этом случае необходимо иметь в виду, что id - это 16-ричное представление строчного идентификатора ключан. В некоторых случаях использования ключа в дальнейшем придется задавить именно строковое представление идентификатора. Поэтому стоит использовать только коды печатных символом.
ssh
Выгрузка публичного ключа для openssh
ssh-keygen -D /usr/lib64/opensc-pkcs11.so > some.key.pub
Для автоматического поиска ключа в токене необходимо добавить в ~/.ssh.config
PKCS11Provider /usr/lib64/opensc-pkcs11.so
openssl
Пример
openssl req -engine pkcs11 -new -key 'pkcs11:id=newkeyset' -keyform engine -out req.pem -text -x509 -subj "/CN=Andreas Jellinghaus"
openconnect
Пример
sudo openconnect -c "pkcs11:model=PKCS%2315;id=newkeyset" --script /etc/openconnect/vpnc-script
Необходимо обратить внимание на URI сертификата, используемого для
Полезные ссылки
- http://forum.rutoken.ru/topic/3011/
- https://habr.com/ru/company/aktiv-company/blog/461199
- https://github.com/OpenSC/libp11/issues/104