(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 отображается как "Сертификат с неэкспортируемой ключевой парой" - как и ожидалось. Высылаю скриншот:
https://forum.rutoken.ru/uploads/images/2020/10/cfd044baa288797eec11dfd21bce8dc2.jpg
Но это не помогло, проблема все та же.

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

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

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

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

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

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

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

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

https://forum.rutoken.ru/uploads/images/2020/10/a9c9e5e62a08d5fa3da456e94f5bccc7.jpg
В системном менеджере сертификатов "certmgr.msc" они видятся:
https://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 выдает ошибку.
В линуксе:
https://forum.rutoken.ru/uploads/images/2020/10/aba5a49f1639115e847243481c8cb8a2.jpg

В виндоус:
https://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 на сервере?

(2020-11-07 13:50:43 отредактировано albert)

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

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

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

Пробовал, не работает, как написал выше только в IE.

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

Можно использовать openssl для Windows.

Есть опыт установки? Нам не подходит конечно этот вариант по вышеописанному, но было бы интересно узнать как установить openssl на windows (c поддержкой PKCS11 разумеется)

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

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

openssl 1.1.1d-0+deb10u3 amd64

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

albert пишет:

Есть опыт установки? Нам не подходит конечно этот вариант по вышеописанному, но было бы интересно узнать как установить openssl на windows (c поддержкой PKCS11 разумеется)

Можно скачать наш СДК https://www.rutoken.ru/developers/sdk/
Там в папке sdk\openssl\openssl-tool-1.1 есть сборки под разные ОС.

albert пишет:

Пробовал, не работает, как написал выше только в IE.

А в Firefox добавляли сертификат CA?