Рутокен ЭЦП 3.0 для авторизации по ключу при ssh соединении win>linux

Господа, перерыл все ваши доки, но получить должного результата так и не вышло.

Имеем руктокен эцп 3.0, на котором есть выданный налоговой сертификат в неизвлекаемом виде (ключевая пара сгенерена рутокеном), клиентскую машину win10 в которую можем вставить рутокен, сервер на убунту на котором крутится sshd.

Задачи следующие.

1. На клиентской машине windows 10 cгенерировать средствами рутокена (неизвлекаемый закрытый ключ) RSA ключевую пару и затем самоподписной сертификат. На машине стоят драйвера рутокена, панель управления, крипто про итд.
2. Получить из сертификата открытый ключ rsa, загрузить его на ubuntu
3. Используя встроенную ssh утилиту из под powershell c с клиентской машины с windows 10 соединится с убунтой и авторизоваться по ключу, введя соответственно по дороге пин-код пользователя токена. Как вариант использовать какой-то иной ssh терминал - TeraTerm или что-то иное.

4. Влючить на ubunte поддержку ГОСТ шифрования для ssh
5. Получить открытый ключ из сертификата выданной налоговой на клиентской windows 10 машине.
6. Загрузить открытый ключ гост на ubuntu
7. Используя встроенную ssh утилиту из под powershell c с клиентской машины с windows 10 соединится с убунтой и авторизоваться по ключу от налоговой, введя соответственно по дороге пин-код пользователя токена. Как вариант использовать какой-то иной ssh терминал - TeraTerm или что-то иное.

Прошу опубликвать подробную инструкцию, я уверен она будет полезна многим рядовым пользователям Рутокен ЭЦП 3.0.

С чем уже столкнулся изучая ваши инструкции:

- не получается сгенерить rsa ключевую пару и самоподписной сертификат средствами Панели Управления Рутокен (получилось решить с помощью плагина и ra.rutoken.ru). Решение не подходит - нужно решение через ПУР или команды консоли windows 10 без всяких браузеров.
- PuttySC взятое по сслыке из вашей статьи, которое вроде должно через pkcs11 получать доступ к ключу, представляет собой консольную утилиту, а не с графическим интерфейсом, как в вашей статье.

Re: Рутокен ЭЦП 3.0 для авторизации по ключу при ssh соединении win>linux

Gleb, добрый день.
Нам не известно, как можно настроить SSH соединение по ГОСТ ключам.
Можем предложить ознакомиться с решением Stunnel от КриптоПро:
https://habr.com/ru/companies/aktiv-com … es/477650/


Для генерации RSA ключей на Windows 10 можно использовать openssl.
Для его установки можно в командной строке ввести: winget install openssl. Либо скачать с сайта https://slproweb.com/products/Win32OpenSSL.html.
В качестве инструкции по установке и настройке openssl можно воспользоваться следующей статьёй - https://think.unblog.ch/en/how-to-insta … ows-10-11/

Теперь можно сгенерировать ключи через командную строку cmd (рекомендуется запустить от имени администратора).
1) Генерируем ключевую пару:
openssl genrsa -out keys.pem 2048

2) Создаём самоподписанный сертификат:
openssl req -new -key keys.pem -out cert.csr
openssl x509 -req -days 700 -in cert.csr -signkey keys.pem -out cert.cert

3) Конвертируем ключ в формат PFX.
openssl pkcs12 -export -in "C:\Путь_до_сертификата\cert.cert" -inkey "C:\Путь_до_ключа\keys.pem" -out "C:\Путь_сохранения_pfx\keys.pfx"

4) Импортируем PFX на Рутокен.
В Панели управления Рутокен, во вкладке Сертификаты нажимаем кнопку Импортировать и выбираем созданный нами PFX файл.

5) Конвертируем открытый ключ на Рутокен в формат ssh.
В ПУР, во складке Сертификаты должен отобразиться новый сертификат. Открываем его свойства, во вкладке Состав находим строчку Серийный номер. Копируем его для дальнейшей команды.

ssh-keygen -D C:\Windows\System32\rtPKCS11ECP.dll -I 0:Серийный_номер >> key.pub

6) Копируем файл key.pub на сервер Ubuntu и выполняем следующую команду в терминале:
cat key.pub >> ~/.ssh/authorized_keys
(если нет папки .ssh, то создадим её командой mkdir ~/.ssh)

7) После этого достаточно будет в командной строке (или PowerShell) использовать команду для подключения:
ssh -I "C:\Windows\System32\rtPKCS11ECP.dll" <username>@<server>

Re: Рутокен ЭЦП 3.0 для авторизации по ключу при ssh соединении win>linux

Кирилл, спасибо!

Я правльно понимаю, что в представленном алгоритме ключевая пара генерируется средствами open-ssl и записанный потом на токен закрытый ключ является извлекаемым?

В моей задаче важно, чтоб ключевая пара генерировалась токеном, а закрытый ключ был неизвлекаемым.

Re: Рутокен ЭЦП 3.0 для авторизации по ключу при ssh соединении win>linux

Gleb, не совсем. Ключ, импортированный на токен, так же является неизвлекаемым. После импорта необходимо удалить закрытый ключ.
Как еще один вариант формирования ключей- сгенерировать ключевую пару RSA с помощью pkcs11-tool, входящей в состав программы opensc.
1. Создаем ключевую пару:
pkcs11-tool --module "C:\Windows\System32\rtPKCS11ECP.dll" --keypairgen --key-type rsa:2048 -l --id 45
2. Получаем открытый ключ
ssh-keygen -D C:\Windows\System32\rtPKCS11ECP.dll -I 0:45 >> key.pub

Re: Рутокен ЭЦП 3.0 для авторизации по ключу при ssh соединении win>linux

Аверченко Кирилл пишет:

Gleb, не совсем. Ключ, импортированный на токен, так же является неизвлекаемым. После импорта необходимо удалить закрытый ключ.
Как еще один вариант формирования ключей- сгенерировать ключевую пару RSA с помощью pkcs11-tool, входящей в состав программы opensc.
1. Создаем ключевую пару:
pkcs11-tool --module "C:\Windows\System32\rtPKCS11ECP.dll" --keypairgen --key-type rsa:2048 -l --id 45
2. Получаем открытый ключ
ssh-keygen -D C:\Windows\System32\rtPKCS11ECP.dll -I 0:45 >> key.pub

В целом все сработало, остается один вопрос - каким образом команда ssh -I "C:\Windows\System32\rtPKCS11ECP.dll" <username>@<server> понимает какой конкретно ей брать ключ? Судя по выводу она их перебирает, можно как-то указать конкретный ?

(2023-11-09 11:24:03 отредактировано Gleb)

Re: Рутокен ЭЦП 3.0 для авторизации по ключу при ssh соединении win>linux

Аверченко Кирилл пишет:

Gleb, не совсем. Ключ, импортированный на токен, так же является неизвлекаемым. После импорта необходимо удалить закрытый ключ.
Как еще один вариант формирования ключей- сгенерировать ключевую пару RSA с помощью pkcs11-tool, входящей в состав программы opensc.
1. Создаем ключевую пару:
pkcs11-tool --module "C:\Windows\System32\rtPKCS11ECP.dll" --keypairgen --key-type rsa:2048 -l --id 45
2. Получаем открытый ключ
ssh-keygen -D C:\Windows\System32\rtPKCS11ECP.dll -I 0:45 >> key.pub

Коллеги так-же попросили узнать, какую команду надо давать на MacOS чтоб он тоже использовал pkcs11 при соединении ? (коннектимся с макос на убунту)

Re: Рутокен ЭЦП 3.0 для авторизации по ключу при ssh соединении win>linux

Gleb, можно попробовать вот так:
ssh -I "pkcs11:id=%45?module-path=C:\Windows\System32\rtPKCS11ECP.dll" <username>@<server>
Где попробовать указать id ключа.