Ключевое слово в защите информации
КЛЮЧЕВОЕ СЛОВО
в защите информации
Получить ГОСТ TLS-сертификат для домена (SSL-сертификат)
Добро пожаловать, Гость! Чтобы использовать все возможности Вход или Регистрация.

Уведомление

Icon
Error

Опции
К последнему сообщению К первому непрочитанному
Offline Scex  
#1 Оставлено : 19 июня 2019 г. 20:13:52(UTC)
Scex

Статус: Новичок

Группы: Участники
Зарегистрирован: 03.08.2014(UTC)
Сообщений: 5

Добрый день!

Собственно проблема: требуется качать GET запросами страницы https://lkul.nalog.ru/ (вставьте любой другой сайт с русскими шифрами - налог взят для примера).
Для загрузки может использоваться любое ПО, в том числе и самописное: скрипты python, Go, Rust.
Все данные языки имеют возможность использовать стандартные сервисы шифрования (stunnel, openssl, nss) выбор которых зависит от ОС для которой пишется код.

Я решил по упражняться на MacOS и для начала хотел бы настроить базовую возможность стандартного сервиса шифрования общаться на шифрах которые используются на сайтах по типу приведенного в примере.

Т.е. моя цель сейчас - заставить работать тот же curl мака, так он смог сделать GET запрос по SSL до налога и вернуть в ответ стандартную страницу ресурса.
Затем я переберусь в сторону кода на яп.

Подскажите, как вообще это реализовать и что для этого надо?
Offline two_oceans  
#2 Оставлено : 20 июня 2019 г. 5:17:38(UTC)
two_oceans

Статус: Эксперт

Группы: Участники
Зарегистрирован: 05.03.2015(UTC)
Сообщений: 1,602
Российская Федерация
Откуда: Иркутская область

Сказал(а) «Спасибо»: 110 раз
Поблагодарили: 394 раз в 366 постах
Налоговая наверно не очень удачный пример, так как требуется предоставить пользовательский сертификат, что усложняет задачу. Если речь идет о stunnel, openssl, то нужен модуль (engine) c поддержкой алгоритмов гост. Есть индивидуальные отличия по версиям openssl, в некоторых 1.1.0 модули загружаются не в том порядке и гост не добавляется в список алгоритмов. Для гост-2001 есть старинный модуль с поддержкой гост, пожертвованный проекту openssl 1.0.0 от компании криптокомом. Гост-2012 и изменения архитектуры openssl 1.1.0 модуль не поддерживает, поэтому был выкинут из стандартной поставки openssl. Тем не менее на гитхабе есть его доработки до госта-2012 и госта-2015.

Есть и аналогичные новые модули других отечественных криптопровайдеров. Тут всплывает небольшая проблемка, что если заменить только модуль - работать будет частично (обычно отваливается поддержка самых новых версий tls, 1.0 работает, 1.2 и 1.3 не работают), видения отечественных криптопровайдеров и основного проекта openssl немного отличаются, договорится о включении патча не удалось. С другой стороны, если важен вопрос сертифицированности, то стандартная версия openssl несертифицирована. Поэтому как правило если нужен полный функционал, дело кончается полным удалением стандартной версии и замены на версию допиленную отечественным криптопровайдером с пробросом ссылок на допиленную версию.

Раз уж задаете на форуме КриптоПро, то у криптоПро есть модули gost_capi (гост-94, гост-2001 openssl 1.0.x, требует КриптоПро 3.6) и gostengy (гост-2001, гост-2012, openssl 1.1.x, требует КриптоПро 4.0). Подробная инструкция есть на форуме в разделе "Другие продукты". Прочитать нужно обязательно, так как у КриптоПро другой подход чем у старых инструкций по модулю криптокома, которых тьма в рунете. Присутствует такая же проблема поддержкой tls 1.2 на стандартной ветке openssl, есть патч, сертифицированной пропатченной версии openssl нет. Похоже на какой-то версии 1.1.x работает tls 1.2 и без патча, но я не проверял и точной информации не видел.

Основное отличие модулей КриптоПро - ключ генерируется только средствами КриптоПро и хранится только в контейнере КриптоПро. Соответственно невозможно работать с контейнером КриптоПро без установленного КриптоПро CSP. Модуль вместо реального закрытого ключа возвращает в openssl дескриптор ключа (как я понимаю каждый раз разный даже для одного ключа) и принимает только ранее выданный и еще не закрытый дескриптор. То есть ни экспортировать закрытый ключ в pem файл, ни импортировать pem файл, ни использовать pem файл невозможно, зато можно указать "c:"+имя контейнера КриптоПро вместо pem файла в поддерживаемой команде openssl, где требуется обращение к открытому или закрытому ключу. Сами операции будут проведены в КриптоПро CSP, запрошен пин-код в окне КриптоПро, через модуль результат будет возвращен в openssl. Да, все верно, некоторые команды (как генерация ключа genpkey, например) не поддерживаются вообще и выдадут что гост им незнаком.

Если копнуть поглубже, то помимо указания имени контейнера также возможно указание отпечатка или CN сертификата, но такой сертификат должен быть установлен в хранилище сертификатов со ссылкой на контейнер КриптоПро.

Для stunnel есть две версии с уже встроенной поддержкой такого функционала, в конфиге можно указывать как файл сертификата, так и его отпечаток или контейнер криптопро. А через stunnel подключиться к гост сайту curl ом очень легко - curl или браузер без поддержки гост соединяются на адрес туннеля по http, туннель предъявляет сайту прописанный в конфиге сертификат по гост https. Есть однако проблема с тем, что некоторые сайты (госзакупки, егиссо, госуслуги) любят редиректить по абсолютным ссылкам и выпадают из туннеля. Это уже можно решить через двойной прокси (первый прокси прописывается в браузере и собирает ссылки на один порт как "родительский прокси", которым является туннель, туннель меняет протокол на защищенный соединяется со вторым прокси, второй прокси корректирует прокси-версию протокола на обычую. Скорость режется в несколько раз, но работает. Либо можно без прокси разнести схему на 2 места и исправить hosts чтобы абсолютные ссылки вели на туннель.

Отредактировано пользователем 20 июня 2019 г. 5:50:50(UTC)  | Причина: Не указана

Offline Русев Андрей  
#3 Оставлено : 21 июня 2019 г. 21:17:53(UTC)
Русев Андрей

Статус: Сотрудник

Группы: Администраторы, Участники
Зарегистрирован: 16.04.2008(UTC)
Сообщений: 1,271

Сказал(а) «Спасибо»: 22 раз
Поблагодарили: 446 раз в 325 постах
В состав КриптоПро CSP для всех unix-систем входит пакет cprocsp-curl, содержащий библиотеку и приложение curl, которые умеют работать по ГОСТ TLS и сертифицированы к использованию (как и stunnel, но в отличие от openssl). Удобней всего использовать КриптоПро CSP 5.0, потому что только здесь есть поддержка не только ГОСТ TLS, но и TLS с зарубежными алгоритмами.
Официальная техподдержка. Официальная база знаний.
Offline Scex  
#4 Оставлено : 22 июня 2019 г. 11:15:07(UTC)
Scex

Статус: Новичок

Группы: Участники
Зарегистрирован: 03.08.2014(UTC)
Сообщений: 5

Автор: two_oceans Перейти к цитате
Налоговая наверно не очень удачный пример, так как требуется предоставить пользовательский сертификат, что усложняет задачу. Если речь идет о stunnel, openssl, то нужен модуль (engine) c поддержкой алгоритмов гост. Есть индивидуальные отличия по версиям openssl, в некоторых 1.1.0 модули загружаются не в том порядке и гост не добавляется в список алгоритмов. Для гост-2001 есть старинный модуль с поддержкой гост, пожертвованный проекту openssl 1.0.0 от компании криптокомом. Гост-2012 и изменения архитектуры openssl 1.1.0 модуль не поддерживает, поэтому был выкинут из стандартной поставки openssl. Тем не менее на гитхабе есть его доработки до госта-2012 и госта-2015.

Есть и аналогичные новые модули других отечественных криптопровайдеров. Тут всплывает небольшая проблемка, что если заменить только модуль - работать будет частично (обычно отваливается поддержка самых новых версий tls, 1.0 работает, 1.2 и 1.3 не работают), видения отечественных криптопровайдеров и основного проекта openssl немного отличаются, договорится о включении патча не удалось. С другой стороны, если важен вопрос сертифицированности, то стандартная версия openssl несертифицирована. Поэтому как правило если нужен полный функционал, дело кончается полным удалением стандартной версии и замены на версию допиленную отечественным криптопровайдером с пробросом ссылок на допиленную версию.

Раз уж задаете на форуме КриптоПро, то у криптоПро есть модули gost_capi (гост-94, гост-2001 openssl 1.0.x, требует КриптоПро 3.6) и gostengy (гост-2001, гост-2012, openssl 1.1.x, требует КриптоПро 4.0). Подробная инструкция есть на форуме в разделе "Другие продукты". Прочитать нужно обязательно, так как у КриптоПро другой подход чем у старых инструкций по модулю криптокома, которых тьма в рунете. Присутствует такая же проблема поддержкой tls 1.2 на стандартной ветке openssl, есть патч, сертифицированной пропатченной версии openssl нет. Похоже на какой-то версии 1.1.x работает tls 1.2 и без патча, но я не проверял и точной информации не видел.

Основное отличие модулей КриптоПро - ключ генерируется только средствами КриптоПро и хранится только в контейнере КриптоПро. Соответственно невозможно работать с контейнером КриптоПро без установленного КриптоПро CSP. Модуль вместо реального закрытого ключа возвращает в openssl дескриптор ключа (как я понимаю каждый раз разный даже для одного ключа) и принимает только ранее выданный и еще не закрытый дескриптор. То есть ни экспортировать закрытый ключ в pem файл, ни импортировать pem файл, ни использовать pem файл невозможно, зато можно указать "c:"+имя контейнера КриптоПро вместо pem файла в поддерживаемой команде openssl, где требуется обращение к открытому или закрытому ключу. Сами операции будут проведены в КриптоПро CSP, запрошен пин-код в окне КриптоПро, через модуль результат будет возвращен в openssl. Да, все верно, некоторые команды (как генерация ключа genpkey, например) не поддерживаются вообще и выдадут что гост им незнаком.

Если копнуть поглубже, то помимо указания имени контейнера также возможно указание отпечатка или CN сертификата, но такой сертификат должен быть установлен в хранилище сертификатов со ссылкой на контейнер КриптоПро.

Для stunnel есть две версии с уже встроенной поддержкой такого функционала, в конфиге можно указывать как файл сертификата, так и его отпечаток или контейнер криптопро. А через stunnel подключиться к гост сайту curl ом очень легко - curl или браузер без поддержки гост соединяются на адрес туннеля по http, туннель предъявляет сайту прописанный в конфиге сертификат по гост https. Есть однако проблема с тем, что некоторые сайты (госзакупки, егиссо, госуслуги) любят редиректить по абсолютным ссылкам и выпадают из туннеля. Это уже можно решить через двойной прокси (первый прокси прописывается в браузере и собирает ссылки на один порт как "родительский прокси", которым является туннель, туннель меняет протокол на защищенный соединяется со вторым прокси, второй прокси корректирует прокси-версию протокола на обычую. Скорость режется в несколько раз, но работает. Либо можно без прокси разнести схему на 2 места и исправить hosts чтобы абсолютные ссылки вели на туннель.


В моем случае сертифицировано или нет - не играет роли: задача просто стянуть страницу. Целевая страница требует сертификата и судя по всему должна обрабатываться так же как налог. В прочем чего тут скрывать, это личный кабинет Финсерта: lk.fincert.cbr.ru. У них там есть API, но угадайте по какими алгоритмами шифруется соединение к API? Ну вы поняли - одного цвета задач. +API не полное и не реализует нужного мне функционала. Так же в данном случае не играет роли TLS 1.0, или 1.1, или 1.2.
В условиях данной задачи выходит, что последовательность действий в моем случае выглядит примерно так:
  1. если я хочу TLS 1.0, то: найти модуль (engine) криптокома с поддержкой ГОСТ на TLS 1.0, поставить его в систему где ведется разработка, проверить соединение
  2. если мне окажется необходим весь функционал, то: удалить стандартный openssl, накатить допиленный, пробросить ссылки, проверить соединение
  3. если я хочу TLS 1.2, то: найти модуль gostengy от КриптоПро, найти патч для openssl, накатить патч+модуль, проверить соединение

Посмотрите, верно ли я вас понял?

Автор: Русев Андрей Перейти к цитате
В состав КриптоПро CSP для всех unix-систем входит пакет cprocsp-curl, содержащий библиотеку и приложение curl, которые умеют работать по ГОСТ TLS и сертифицированы к использованию (как и stunnel, но в отличие от openssl). Удобней всего использовать КриптоПро CSP 5.0, потому что только здесь есть поддержка не только ГОСТ TLS, но и TLS с зарубежными алгоритмами.

Достойный ответ из которого стало ясно как жить дальше. Зачем вообще такие писать? Какая-то голимая отписка не решающая проблему - не более. Курл этот как я понял ставится отдельно от существующего. И если даже и ставится заместо существующего - проблему это не решает: код библиотек по старинке использует встроенные в ОС сервисы и они живут отдельной жизнью от данного решения так же не поддерживающей гост. В предыдущем посте хоть объяснили как сделать так, чтобы эти стандартные сервисы смогли работать с гостом: пропатчить/заменить. У вас же ответ звучит в стиле "ставьте CSP - будет вам счастье", так вот поставил я CSP - счастья нет. Ваш курл работает, мой из ОС - нет.

Отредактировано пользователем 22 июня 2019 г. 11:28:39(UTC)  | Причина: опечатка

Offline two_oceans  
#5 Оставлено : 24 июня 2019 г. 5:45:10(UTC)
two_oceans

Статус: Эксперт

Группы: Участники
Зарегистрирован: 05.03.2015(UTC)
Сообщений: 1,602
Российская Федерация
Откуда: Иркутская область

Сказал(а) «Спасибо»: 110 раз
Поблагодарили: 394 раз в 366 постах
Цитата:
если я хочу TLS 1.0, то: найти модуль (engine) криптокома с поддержкой ГОСТ на TLS 1.0, поставить его в систему где ведется разработка, проверить соединение

1. Да по большей части. Если нужен только гост-2001 и в системе старая версия openssl, то да, можно и старый криптокомовский - шел в комплекте во времена openssl 1.0.0, особо искать не придется. Либо есть продолжатели его модификации отдельно от основного проекта openssl, там уже предусмотрена поддержка новых версий openssl и новых алгоритмов гост.
Цитата:
если мне окажется необходим весь функционал, то: удалить стандартный openssl, накатить допиленный, пробросить ссылки, проверить соединение

2. Да по большей части. Опять же старый криптокомовский модуль вряд ли поддерживает весь современный функционал. Так как у Вас скорее всего уже новая версия openssl, этот вариант скорее для его модификаций и отечественных криптопровайдеров на основе новых версий openssl (это уже возможно потребует купить лицензию). Все-таки не стоит забывать, что API openssl существенно перемешали в 1.1.0 (изменили имена библиотек и в какой библиотеке какая функция) и будет проблематично (да и небезопасно) для использования старого модуля откатится даже на openssl 1.0.2 без перекомпиляции приличной части системы.

Цитата:
если я хочу TLS 1.2, то: найти модуль gostengy от КриптоПро, найти патч для openssl, накатить патч+модуль, проверить соединение

3. Верно, вариант с заменой openssl также возможен. Лучше сначала проверить не заработает ли TLS 1.2 на стандартной версии (как я понимаю, патч не приняли в основной проект, потому что запланировали решить проблему другим способом и если решили, то патч теоретически может все испортить). Искать тоже долго не придется - по ссылке ниже цифровые подпапки это номер версии модуля.
архив версий модулей gost_capi и gostengy
инструкция.
RSS Лента  Atom Лента
Пользователи, просматривающие эту тему
Guest
Быстрый переход  
Вы не можете создавать новые темы в этом форуме.
Вы не можете отвечать в этом форуме.
Вы не можете удалять Ваши сообщения в этом форуме.
Вы не можете редактировать Ваши сообщения в этом форуме.
Вы не можете создавать опросы в этом форуме.
Вы не можете голосовать в этом форуме.