Статус: Участник
Группы: Участники
Зарегистрирован: 27.06.2017(UTC) Сообщений: 17 Откуда: РФ
|
Нужна помощь, не могу подружить python и сайты с SSL по ГОСТу. Настроил сайт с SSL и сертификатом КриптоПРО. Сконфигурировал openssl для работы с ГОСТом В питоне подправил ssl-библиотеку, чтобы грузила openssl с нужным конфигом. В итоге, openssl выдаёт такое: openssl s_client -connect Адрес:443 Цитата: CONNECTED(00000240) --- Certificate chain 0 s:/1.2.643.2.2.44.5=... i:/1.2.643.100.1=... 1 s:/1.2.643.100.1=... i:/1.2.643.3.131.1.1=... 2 s:/1.2.643.3.131.1.1=... i:/emailAddress=... --- Server certificate -----BEGIN CERTIFICATE----- ... -----END CERTIFICATE----- subject=/1.2.643.2.2.44.5=... issuer=/1.2.643.100.1=... --- No client certificate CA names sent --- SSL handshake has read 6215 bytes and written 529 bytes --- New, TLSv1/SSLv3, Cipher is GOST2001-GOST89-GOST89 Server public key is 512 bit Secure Renegotiation IS supported Compression: NONE Expansion: NONE No ALPN negotiated SSL-Session: Protocol : TLSv1.2 Cipher : GOST2001-GOST89-GOST89 Session-ID: 45E054BB8AC08D09F2F46E86B95F2E7EB0018BF30F5C4D9F6DE31FC2DDAF3F41 Session-ID-ctx: Master-Key: 427749E531149F1A3397B6F3A4150D74C48B12582A55834775E7712FD692F41382FEB39A5D6D60B7B888478990D98468 Key-Arg : None PSK identity: None PSK identity hint: None SRP username: None Start Time: 1516799226 Timeout : 300 (sec) Verify return code: 20 (unable to get local issuer certificate)
python также ругается >>> import ssl >>> import urllib2 >>> print urllib2.urlopen("https://site").read() Цитата: Traceback (most recent call last): File "<stdin>", line 1, in <module> File "C:\Python27\lib\urllib2.py", line 154, in urlopen return opener.open(url, data, timeout) File "C:\Python27\lib\urllib2.py", line 429, in open response = self._open(req, data) File "C:\Python27\lib\urllib2.py", line 447, in _open '_open', req) File "C:\Python27\lib\urllib2.py", line 407, in _call_chain result = func(*args) File "C:\Python27\lib\urllib2.py", line 1241, in https_open context=self._context) File "C:\Python27\lib\urllib2.py", line 1198, in do_open raise URLError(err) urllib2.URLError: <urlopen error [SSL: WRONG_CERTIFICATE_TYPE] wrong certificate type (_ssl.c:662)> >>>
Что я ещё забыл настроить?
|
|
|
|
Статус: Сотрудник
Группы: Администраторы
Зарегистрирован: 16.09.2010(UTC) Сообщений: 1,442 Откуда: КРИПТО-ПРО
Сказал(а) «Спасибо»: 31 раз Поблагодарили: 412 раз в 306 постах
|
Автор: kychanov_sa В итоге, openssl выдаёт такое: openssl s_client -connect Адрес:443 <...> Verify return code: 20 (unable to get local issuer certificate) <...>
Всё хорошо. Если смущает ошибка на verify, указывайте CApath или CAfile. Автор: kychanov_sa python также ругается <...> urllib2.URLError: <urlopen error [SSL: WRONG_CERTIFICATE_TYPE] wrong certificate type (_ssl.c:662)> <...> Что я ещё забыл настроить?
Как инициализируется openssl в python нам неизвестно, ошибку выдает библиотека urllib2, это не часть openssl, поэтому вряд ли поможем. С большой вероятностью, urllib2 инициализирует конфигурацию openssl без поддержки ГОСТ или в самом urllib2 нет поддержки ГОСТ. |
|
|
|
|
Статус: Участник
Группы: Участники
Зарегистрирован: 27.06.2017(UTC) Сообщений: 17 Откуда: РФ
|
Цитата: Как инициализируется openssl в python нам неизвестно, ошибку выдает библиотека urllib2, это не часть openssl, поэтому вряд ли поможем. С большой вероятностью, urllib2 инициализирует конфигурацию openssl без поддержки ГОСТ или в самом urllib2 нет поддержки ГОСТ.
по большей части разобрался с проблемой. Для urllib2 нужно было создать SSLContext. В целом оно заработало, но возникла другая проблема, теперь не работает "не ГОСТ" :) У нас приложение-прокси, поднимает https сервер для приёма запросов от клиента, и отправляет запросы по https на сервер. Взаимодействие с сервером идёт через ГОСТ SSL, с клиентом RSA видимо. Если в настройках openssl отключить gost движок, то работает первая половина (принимаются запросы по https от клиента), если включить gost движок в openssl, то работает вторая половина (запросы отправляются на сервер, но от клиентов теперь не приходят). Я не достаточно хорошо ориентируюсь в настройках openssl, но похоже, что подключая gost движок, я отключаю остальные?
|
|
|
|
Статус: Участник
Группы: Участники
Зарегистрирован: 27.06.2017(UTC) Сообщений: 17 Откуда: РФ
|
Да, настраивал openssl как написано во многих статьях тут и на тостере: добавил в начало: openssl_conf = openssl_def и в конец: [openssl_def] engines = engine_section
[engine_section] gost_capi = gost_section
[gost_section] soft_load = 1 engine_id = gost_capi dynamic_path = ./gost_capi.dll default_algorithms = ALL
|
|
|
|
Статус: Сотрудник
Группы: Администраторы
Зарегистрирован: 16.09.2010(UTC) Сообщений: 1,442 Откуда: КРИПТО-ПРО
Сказал(а) «Спасибо»: 31 раз Поблагодарили: 412 раз в 306 постах
|
Автор: kychanov_sa default_algorithms = ALL У нас в доках везде: default_algorithms = CIPHERS, DIGESTS, PKEY, PKEY_CRYPTO, PKEY_ASN1 При включение ГОСТ движка, оригинальный функционал openssl не отключается, должен работать в полном объёме + ГОСТ. И проверьте как вы создаёте SSLContext, ведь контекст содержит настройки, включая разрешённые шифры, возможно вы запрещаете всё кроме ГОСТ. |
|
|
|
|
Статус: Участник
Группы: Участники
Зарегистрирован: 27.06.2017(UTC) Сообщений: 17 Откуда: РФ
|
Цитата:У нас в доках везде: default_algorithms = CIPHERS, DIGESTS, PKEY, PKEY_CRYPTO, PKEY_ASN1
это помогло. Спасибо. Правда возникла другая довольно странная проблема. Есть страница сайта, открытая в IE по GOST HTTPS (TLS1.0) с неё я пытаюсь выполнить ajax-запрос по HTTPS (не ГОСТ), запрос падает. Причём на закладке network запрос не отображается, т.е. он как будто даже браузер не покинул.
|
|
|
|
Статус: Участник
Группы: Участники
Зарегистрирован: 27.06.2017(UTC) Сообщений: 17 Откуда: РФ
|
Пример запроса: $.ajax(( { type: 'GET', url: 'https://localhost:9654', data: {method: 'PING'} }));
В IE на странице, открытой по ГОСТ SSL получаю "Error: Отказано в доступе." Со страницы, открытой по RSA SSL то же запрос выполняется корректно.
|
|
|
|
Статус: Участник
Группы: Участники
Зарегистрирован: 27.06.2017(UTC) Сообщений: 17 Откуда: РФ
|
Свойства первой страницы TLS 1.0, GOST 28147-89 с 256 разрядным шифрованием (Высокий); GOST DH 34.10-2001 с 512 разрядным обменом На второй TLS 1.2, AES с 128 разрядным шифрованием (Высокий); RSA с 4096 разрядным обменом По пробовал со страницы третьего сайта TLS 1.2, GOST 28147-89 с 256 разрядным шифрованием (Высокий); GOST DH 34.10-2001 с 512 разрядным обменом тоже самое, что и с первого. Т.е. я не могу со страницы, полученной через ГОСТ TLS выполнить запрос на другой HTTP или HTTPS сайт. Отредактировано пользователем 29 января 2018 г. 18:26:01(UTC)
| Причина: Не указана
|
|
|
|
Статус: Сотрудник
Группы: Администраторы
Зарегистрирован: 16.09.2010(UTC) Сообщений: 1,442 Откуда: КРИПТО-ПРО
Сказал(а) «Спасибо»: 31 раз Поблагодарили: 412 раз в 306 постах
|
Автор: kychanov_sa Свойства первой страницы TLS 1.0, GOST 28147-89 с 256 разрядным шифрованием (Высокий); GOST DH 34.10-2001 с 512 разрядным обменом На второй TLS 1.2, AES с 128 разрядным шифрованием (Высокий); RSA с 4096 разрядным обменом По пробовал со страницы третьего сайта TLS 1.2, GOST 28147-89 с 256 разрядным шифрованием (Высокий); GOST DH 34.10-2001 с 512 разрядным обменом тоже самое, что и с первого. Т.е. я не могу со страницы, полученной через ГОСТ TLS выполнить запрос на другой HTTP или HTTPS сайт. Интересно, может какая-то политика безопасности, а может и баг. Localhost тоже смущает, реальный адрес пробовали, что говорит дамп трафика? Соединение TCP устанавливается? Может в журналах windows ошибка какая-то есть? |
|
|
|
|
Статус: Участник
Группы: Участники
Зарегистрирован: 27.06.2017(UTC) Сообщений: 17 Откуда: РФ
|
Цитата:Localhost тоже смущает, реальный адрес пробовали, что говорит дамп трафика? Соединение TCP устанавливается?
адрес реальный, у нас страница в браузере общается по https с локальным приложением, которое на localhost открыло соединение. ошибок в журнале нет, но вот что странно, запрос на 127.0.0.1 вместо localhost нормально прошёл. Запрос отправил из консоли браузера, последний при этом запросил подтверждение системы безопасности (сертификат доверенный, но выдан на localhost, а я к 127.0.0.1). Запрос кстати пришёл в приложение до того, как я подтвердил в браузере сертификат. Прям детектив получается :)
|
|
|
|
Быстрый переход
Вы не можете создавать новые темы в этом форуме.
Вы не можете отвечать в этом форуме.
Вы не можете удалять Ваши сообщения в этом форуме.
Вы не можете редактировать Ваши сообщения в этом форуме.
Вы не можете создавать опросы в этом форуме.
Вы не можете голосовать в этом форуме.
Important Information:
The Форум КриптоПро uses cookies. By continuing to browse this site, you are agreeing to our use of cookies.
More Details
Close