(2020-10-12 23:55:38 отредактировано albert)

Доступ на защищеный WEB сайт, требующий проверку польз. на уровне TLS

Добрый день!

Описание проблемы:
Не получается установить TLS соединение с WEB сервером, требующим проверку подлинности пользователя с помощью Рутокен плагин.
Ключ: Рутокен ЭЦП 2.0

В Вашей инструкции: https://dev.rutoken.ru/pages/viewpage.a … d=57149488
Пункт 6-7 - сертификат отображается там только в том случае если он с закрытым ключом (.pfx) иначе, если это просто сертификат пользователя (.cer), он там не отображается.
При переходе на защищенный сайт, окно ввода пин кода не выводится.

https://dev.rutoken.ru/pages/viewpage.a … d=66815770
- То же самое

Пробовал использовать в Windows 10: Установлен рутокен драйвер, плагин и адаптер.
Не работает в Internet Explorer, Chrome, Firefox.

Подготовил систему следующим образом:
C помощью openssl (на Linux Debian 10) создан:

  • CA ключ+сертификат

  • Ключ и подписаный сертификат сервера Apache
    X509v3 Extended Key Usage: TLS Web Server Authentication

  • Ключ и подписаный сертификат пользователя
    X509v3 Extended Key Usage: TLS Web Client Authentication, Microsoft Smartcardlogin

Записывал сертификат и закрытый ключ на компьютере c Debian 10 следующими командами:

pkcs11-tool --module /usr/lib/librtpkcs11ecp.so --pin 12345678 --id 01 --label user --type cert -w user.cer
pkcs11-tool --module /usr/lib/librtpkcs11ecp.so --pin 12345678 --id 01 --label user --type privkey -w user.der

Вывод команд:

Using slot 0 with a present token (0x0)
Created certificate:
Certificate Object; type = X.509 cert
  label:      user@test.test-domain.ru
  subject:    DN: C=RU, ST=Some oblast, L=City, O=Company, OU=People, CN=user/emailAddress=user@test.test-domain.ru
  ID:         01

Using slot 0 with a present token (0x0)
Created private key:
Private Key Object; RSA 
  label:      user@test.test-domain.ru
  ID:         01
  Usage:      decrypt, sign
  Access:     sensitive

С токеном/драйверами все в порядке: при переходе на тестовый сайт https://ra.rutoken.ru/devices/list, токен определяется, все функции работают
С сертификатами тоже все в порядке: при импорте сертификата с закрытым ключом (.pfx) в Личные сертификаты пользователя в системе - все работает.

Может еще что-то необходимо установить, кроме того что описано в инструкции?

С уважением,
Альберт

Re: Доступ на защищеный WEB сайт, требующий проверку польз. на уровне TLS

Здравствуйте, albert,

albert пишет:

Не работает в Internet Explorer, Chrome, Firefox.

Уточните пожалуйста какая возникает ошибка?
По возможности пришлите скриншоты получаемых ошибок.

Re: Доступ на защищеный WEB сайт, требующий проверку польз. на уровне TLS

Здравствуйте, Светлана,
Все описал в 1м посте.

Albert пишет:

В Вашей инструкции: https://dev.rutoken.ru/pages/viewpage.a … d=57149488
Пункт 6-7 - сертификат отображается там только в том случае если он с закрытым ключом (.pfx) иначе, если это просто сертификат пользователя (.cer), он там не отображается.
При переходе на защищенный сайт, окно ввода пин кода не выводится.

Ни какой ошибки не выводится, я бы прислал конечно, просто при переходе на защищенный сайт токен не опрашивается, окно ввода пин-кода не выводится.

Re: Доступ на защищеный WEB сайт, требующий проверку польз. на уровне TLS

Пришлите скриншот Панели управления Рутокен на вкладке Сертификаты.
Также уточните как именно вы устанавливаете ваш сертификат в Личные сертификаты в локальном хранилище? Через Импорт файла(.pfx) или через Панель управления Рутокен?
Пришлите скриншот Личные сертификаты как указано в статье п.6-7.

Re: Доступ на защищеный WEB сайт, требующий проверку польз. на уровне TLS

Добрый день.
Для работы с такими ключами в браузере Firefox необходимо добавить нашу библиотеку rtpkcs11ecp.dll в устройства защиты.
Подробнее вот тут написано https://habr.com/ru/company/aktiv-company/blog/457886/

(2020-10-12 23:56:49 отредактировано albert)

Re: Доступ на защищеный WEB сайт, требующий проверку польз. на уровне TLS

Фатеева Светлана пишет:

Пришлите скриншот Панели управления Рутокен на вкладке Сертификаты.

Я обнаружил что в этой вкладке сертификат отображается как "Сертификат без ключевой пары", что натолкнуло на мысль, что команда записи закрытого ключа на токен не отрабатывает как ожидалось, хоть и не выдает ошибки:

pkcs11-tool --module /usr/lib/librtpkcs11ecp.so --pin 12345678 --id 01 --label user --type privkey -w user.der

- пробовал записать на linux Debian 10.
Решил сделать по другому: Сгенерировал ключевую пару на токене:

pkcs11-tool --module /usr/lib/librtpkcs11ecp.so --id 02 --pin "12345678" --keypairgen --key-type rsa:2048 -l

Создал запрос на сертификат:

openssl
    engine dynamic -pre SO_PATH:/usr/lib/x86_64-linux-gnu/engines-1.1/pkcs11.so -pre ID:pkcs11 -pre LIST_ADD:1 -pre LOAD -pre MODULE_PATH:librtpkcs11ecp.so
    req -passin pass:12345678 -engine pkcs11 -new -key 02 -keyform engine -out user2.req -outform PEM -subj "/C=RU/ST=Some Oblast/L=City/O=Company/OU=People/CN=user2/emailAddress=user2@test.test-domain.ru"

Подписал запрос своим CA.
Записал получений сертификат на токен:

pkcs11-tool --module /usr/lib/librtpkcs11ecp.so --pin 12345678 -l -y cert -w ./user2.crt.pem --id 02

Теперь в панели сертификат для пользователя user2 отображается как "Сертификат с неэкспортируемой ключевой парой" - как и ожидалось. Высылаю скриншот:
http://forum.rutoken.ru/uploads/images/2020/10/cfd044baa288797eec11dfd21bce8dc2.jpg
Но это не помогло, проблема все та же.

Фатеева Светлана пишет:

Также уточните как именно вы устанавливаете ваш сертификат в Личные сертификаты в локальном хранилище?

Двойным щелчком по файлу user.cer -> Следуя мастеру импорта выбираю "Текущий пользователь" -> "Личное". то же самое можно сделать из настроек браузера и из панели управления сертификатами "certmgr.msc"

Фатеева Светлана пишет:

Через Импорт файла (.pfx) или через Панель управления Рутокен?

Через импорт .pfx все работает, я же написал в первом посте. А через панель Рутокен разве можно добавить в локальное хранилище?

Фатеева Светлана пишет:

Пришлите скриншот Личные сертификаты как указано в статье п.6-7.

http://forum.rutoken.ru/uploads/images/2020/10/a9c9e5e62a08d5fa3da456e94f5bccc7.jpg
В системном менеджере сертификатов "certmgr.msc" они видятся:
http://forum.rutoken.ru/uploads/images/2020/10/00128f8803645e3f56ee9ac26aee2856.jpg

(2020-10-13 00:06:15 отредактировано albert)

Re: Доступ на защищеный WEB сайт, требующий проверку польз. на уровне TLS

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

Добрый день.
Для работы с такими ключами в браузере Firefox необходимо добавить нашу библиотеку rtpkcs11ecp.dll в устройства защиты.
Подробнее вот тут написано https://habr.com/ru/company/aktiv-company/blog/457886/

Добрый день.
Спасибо за подсказку, а то в статье нет информации ни какие токены поддерживаются, ни что нужно добавить dll.
Теперь сертификаты видны в Firefox на вкладке "Ваши Сертификаты", пин запрашивается. Соединение все равно не удается. Хоть по статье, хоть из командной строки все действия выполнять. Секунды 4 мигает, потом Firefox выдает ошибку.
В линуксе:
http://forum.rutoken.ru/uploads/images/2020/10/aba5a49f1639115e847243481c8cb8a2.jpg

В виндоус:
http://forum.rutoken.ru/uploads/images/2020/10/b7eca94b78c28f479a8fadfdbcb59a3f.jpg


И еще вопрос, рутокен ЭЦП 2.0 работает только в Firefox (если работает)? Другие браузеры не поддерживаются?

Re: Доступ на защищеный WEB сайт, требующий проверку польз. на уровне TLS

Изначальная статья описывает подключение к защищенному веб-сайту через криптопровайдер и сертификаты, выписанные с помощью Microsoft CA в домене.
Firefox умеет работать напрямую с сертификатами через библиотеку PKCS11. Остальные браузеры работают только через криптопровайдеры системы.
Для работы через криптопровайдер можно попробовать сгенерировать ключ и записать сертификат в Windows с помощью команд:

pkcs11-tool.exe --module C:\windows\system32\rtpkcs11.dll --id 02 --pin "12345678" --keypairgen --key-type rsa:2048 -l
pkcs11-tool.exe --module C:\windows\system32\rtpkcs11.dll --pin 12345678 -l -y cert -w ./user2.crt.pem --id 02

После этого в Панели Управления Рутокен появится возможность зарегистрировать данный сертификат через системный криптопровайдер (Необходимо установить галку в поле Зарегистрирован).

В Firefox в Управлении сертификатам ваш сертификат на Рутокен виден?

(2020-10-13 13:56:32 отредактировано albert)

Re: Доступ на защищеный WEB сайт, требующий проверку польз. на уровне TLS

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

Изначальная статья описывает подключение к защищенному веб-сайту через криптопровайдер и сертификаты, выписанные с помощью Microsoft CA в домене.

Что Вы имеете в виду? Сертификаты выписанные по другому работать не будут?

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

Firefox умеет работать напрямую с сертификатами через библиотеку PKCS11. Остальные браузеры работают только через криптопровайдеры системы.
Для работы через криптопровайдер можно попробовать сгенерировать ключ и записать сертификат в Windows с помощью команд:

pkcs11-tool.exe --module C:\windows\system32\rtpkcs11.dll --id 02 --pin "12345678" --keypairgen --key-type rsa:2048 -l
pkcs11-tool.exe --module C:\windows\system32\rtpkcs11.dll --pin 12345678 -l -y cert -w ./user2.crt.pem --id 02

Так я ровно это и сделал, опция в опцию, только на linux.

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

После этого в Панели Управления Рутокен появится возможность зарегистрировать данный сертификат через системный криптопровайдер (Необходимо установить галку в поле Зарегистрирован).

Ничего подобного не вижу, ни какой галки.
То есть Вы предлагаете проделать то же самое только под Windows, и тогда галка появится?
Может сборка OpenSC какая то специфическая нужна, дайте ссылку тогда.

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

В Firefox в Управлении сертификатам ваш сертификат на Рутокен виден?

Да, писал выше, сертификат виден, его при первом подключении можно выбрать.

Re: Доступ на защищеный WEB сайт, требующий проверку польз. на уровне TLS

albert пишет:

Что Вы имеете в виду? Сертификаты выписанные по другому работать не будут?

Да, сертификаты, выписанные по-другому будут работать через другие механизмы.

albert пишет:

Так я ровно это и сделал, опция в опцию, только на linux.

На Windows есть библиотека rtpkcs11.dll. Для других ОС ее нет. Сертификаты и ключевые пары, выписанные через эту библиотека совместимы с криптопровайдером. И такой сертификат может быть зарегистрирован в Windows через штатный криптопровайдер для работы в IE и Chrome.

albert пишет:

Да, писал выше, сертификат виден, его при первом подключении можно выбрать.

При выписывании сертификата какие поля добавляются в пользовательский сертификат? Есть доступ к логам сервера? Там никаких ошибок нет?

(2020-10-14 00:49:21 отредактировано albert)

Re: Доступ на защищеный WEB сайт, требующий проверку польз. на уровне TLS

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

При выписывании сертификата какие поля добавляются в пользовательский сертификат?

Все по статье на habr что Вы скинули, теми же методами с теми же полями слово в слово. Естественно CN сервера актуальный подставлен.
2й вариант - со своими данными, из командной строки.

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

Есть доступ к логам сервера? Там никаких ошибок нет?

Ошибок нет, информационное сообщение, везде одинаковое - разрыв соединения клиентом:
Connection closed to child #N with abortive shutdown
А должно быть:
Connection closed to child #N with standard shutdown

При подключении с Виндоус:

19:44:55.777791 ssl:trace4 ssl_engine_io.c(2214): [client x.x.x.x:x] OpenSSL: write 3456/3456 bytes to BIO#7faf34002ec0 [mem: 7faf34011ad0] 
19:44:56.492673 ssl:trace4 ssl_engine_io.c(2214): [client x.x.x.x:x] OpenSSL: read 5/5 bytes from BIO#7faf34002f80 [mem: 7faf3400c583] 
19:44:56.492731 ssl:trace4 ssl_engine_io.c(2214): [client x.x.x.x:x] OpenSSL: read 1/1 bytes from BIO#7faf34002f80 [mem: 7faf3400c588] 
19:44:56.492742 ssl:trace4 ssl_engine_io.c(2214): [client x.x.x.x:x] OpenSSL: read 5/5 bytes from BIO#7faf34002f80 [mem: 7faf3400c583] 
19:44:56.492750 ssl:trace4 ssl_engine_io.c(2214): [client x.x.x.x:x] OpenSSL: read 61/61 bytes from BIO#7faf34002f80 [mem: 7faf3400c588] 
19:44:56.492814 ssl:trace4 ssl_engine_io.c(2214): [client x.x.x.x:x] OpenSSL: write 24/24 bytes to BIO#7faf34002ec0 [mem: 7faf34011ad0] 
19:44:56.492884 ssl:info [client x.x.x.x:x] AH01998: Connection closed to child 83 with abortive shutdown (server web.test.ru:443)

При подключении с Мак - аналогично Виндоус (и в браузере та же ошибка. см в предыдущем посте):

19:58:10.219290 ssl:trace4 ssl_engine_io.c(2214): [client x.x.x.x:x] OpenSSL: write 3456/3456 bytes to BIO#7faf1c002c70 [mem: 7faf1c011880] 
19:58:15.354093 ssl:trace4 ssl_engine_io.c(2214): [client x.x.x.x:x] OpenSSL: read 5/5 bytes from BIO#7faf1c002d30 [mem: 7faf1c00c333] 
19:58:15.354201 ssl:trace4 ssl_engine_io.c(2214): [client x.x.x.x:x] OpenSSL: read 1/1 bytes from BIO#7faf1c002d30 [mem: 7faf1c00c338] 
19:58:15.354218 ssl:trace4 ssl_engine_io.c(2214): [client x.x.x.x:x] OpenSSL: read 5/5 bytes from BIO#7faf1c002d30 [mem: 7faf1c00c333] 
19:58:15.354227 ssl:trace4 ssl_engine_io.c(2214): [client x.x.x.x:x] OpenSSL: read 61/61 bytes from BIO#7faf1c002d30 [mem: 7faf1c00c338] 
19:58:15.354295 ssl:trace4 ssl_engine_io.c(2214): [client x.x.x.x:x] OpenSSL: write 24/24 bytes to BIO#7faf1c002c70 [mem: 7faf1c011880] 
19:58:15.354423 ssl:info [client x.x.x.x:x] AH01998: Connection closed to child 68 with abortive shutdown (server web.test.ru:443)

При подключении с Linux:

19:45:45.620011 ssl:trace4 ssl_engine_io.c(2214): [client x.x.x.x:x] OpenSSL: write 3456/3456 bytes to BIO#7faf24002ec0 [mem: 7faf24011ad0] 
19:45:55.219439 ssl:trace4 ssl_engine_io.c(2214): [client x.x.x.x:x] OpenSSL: read 5/5 bytes from BIO#7faf24002f80 [mem: 7faf2400c583] 
19:45:55.219497 ssl:trace4 ssl_engine_io.c(2214): [client x.x.x.x:x] OpenSSL: read 19/19 bytes from BIO#7faf24002f80 [mem: 7faf2400c588] 
19:45:55.219544 ssl:info [client x.x.x.x:x] AH01998: Connection closed to child 87 with abortive shutdown (server web.test.ru:443)
Аверченко Кирилл пишет:

На Windows есть библиотека rtpkcs11.dll. Для других ОС ее нет. Сертификаты и ключевые пары, выписанные через эту библиотека совместимы с криптопровайдером. И такой сертификат может быть зарегистрирован в Windows через штатный криптопровайдер для работы в IE и Chrome.

Ясно. То есть сгенерировать ключевую пару и записать сертификат можно только в Windows.

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

Для работы через криптопровайдер можно попробовать сгенерировать ключ и записать сертификат в Windows с помощью команд:

pkcs11-tool.exe --module C:\windows\system32\rtpkcs11.dll --id 02 --pin "12345678" --keypairgen --key-type rsa:2048 -l
pkcs11-tool.exe --module C:\windows\system32\rtpkcs11.dll --pin 12345678 -l -y cert -w ./user2.crt.pem --id 02

После этого в Панели Управления Рутокен появится возможность зарегистрировать данный сертификат через системный криптопровайдер (Необходимо установить галку в поле Зарегистрирован).

Спасибо, это сработало, галка появилась, в IE сайт открылся. Но в других браузерах и ОС не открывается, только IE, для нас это не приемлемо к сожалению.
И второй тоже существенный недостаток этого подхода: Здесь Вы не указали что между этими командами нужно еще создать запрос на сертификат, и в Windows это делается  не тривиально на сколько я знаю (имею в виду скриптами), если вообще возможно. Получается, что последовательность такая:
1. Вставляем токен в компьютер с Windows,  генерируем ключ
2. Вставляем токен в компьютер с Linux, создаем запрос, отправляем на подпись, копируем сертификат на компьютер с Windows
3. Вставляем токен в компьютер с Windows,  записываем сертификат на токен
- С точки зрения автоматизации выписки ключей, не очень удобный вариант.

Создается впечатление, что на данный момент поддержка токена Рутокен ЭЦП 2.0 для web-аутентификации на TLS  сыровата.

Re: Доступ на защищеный WEB сайт, требующий проверку польз. на уровне TLS

albert пишет:

И второй тоже существенный недостаток этого подхода: Здесь Вы не указали что между этими командами нужно еще создать запрос на сертификат, и в Windows это делается  не тривиально на сколько я знаю (имею в виду скриптами), если вообще возможно. Получается, что последовательность такая:
1. Вставляем токен в компьютер с Windows,  генерируем ключ
2. Вставляем токен в компьютер с Linux, создаем запрос, отправляем на подпись, копируем сертификат на компьютер с Windows
3. Вставляем токен в компьютер с Windows,  записываем сертификат на токен
- С точки зрения автоматизации выписки ключей, не очень удобный вариант.

Можно использовать openssl для Windows. Этот вариант сертификата не пробовали использовать в Chrome? Там тоже есть возможность работы через криптопровайдер.

Можете сказать версию openssl на сервере?