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

Уведомление

Icon
Error

2 Страницы12>
Опции
К последнему сообщению К первому непрочитанному
Offline kychanov_sa  
#1 Оставлено : 24 января 2018 г. 16:13:20(UTC)
kychanov_sa

Статус: Участник

Группы: Участники
Зарегистрирован: 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)>
>>>


Что я ещё забыл настроить?
Offline Дмитрий Пичулин  
#2 Оставлено : 24 января 2018 г. 17:45:05(UTC)
pd

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

Группы: Администраторы
Зарегистрирован: 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 нет поддержки ГОСТ.

Знания в базе знаний, поддержка в техподдержке
Offline kychanov_sa  
#3 Оставлено : 29 января 2018 г. 14:47:54(UTC)
kychanov_sa

Статус: Участник

Группы: Участники
Зарегистрирован: 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 движок, я отключаю остальные?
Offline kychanov_sa  
#4 Оставлено : 29 января 2018 г. 14:49:00(UTC)
kychanov_sa

Статус: Участник

Группы: Участники
Зарегистрирован: 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
Offline Дмитрий Пичулин  
#5 Оставлено : 29 января 2018 г. 15:00:42(UTC)
pd

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

Группы: Администраторы
Зарегистрирован: 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, ведь контекст содержит настройки, включая разрешённые шифры, возможно вы запрещаете всё кроме ГОСТ.



Знания в базе знаний, поддержка в техподдержке
Offline kychanov_sa  
#6 Оставлено : 29 января 2018 г. 17:51:43(UTC)
kychanov_sa

Статус: Участник

Группы: Участники
Зарегистрирован: 27.06.2017(UTC)
Сообщений: 17
Откуда: РФ

Цитата:
У нас в доках везде: default_algorithms = CIPHERS, DIGESTS, PKEY, PKEY_CRYPTO, PKEY_ASN1

это помогло. Спасибо.
Правда возникла другая довольно странная проблема. Есть страница сайта, открытая в IE по GOST HTTPS (TLS1.0) с неё я пытаюсь выполнить ajax-запрос по HTTPS (не ГОСТ), запрос падает. Причём на закладке network запрос не отображается, т.е. он как будто даже браузер не покинул.
Offline kychanov_sa  
#7 Оставлено : 29 января 2018 г. 18:20:41(UTC)
kychanov_sa

Статус: Участник

Группы: Участники
Зарегистрирован: 27.06.2017(UTC)
Сообщений: 17
Откуда: РФ

Пример запроса:
$.ajax((
{
type: 'GET',
url: 'https://localhost:9654',
data: {method: 'PING'}
}));

В IE на странице, открытой по ГОСТ SSL получаю "Error: Отказано в доступе."
Со страницы, открытой по RSA SSL то же запрос выполняется корректно.
Offline kychanov_sa  
#8 Оставлено : 29 января 2018 г. 18:22:05(UTC)
kychanov_sa

Статус: Участник

Группы: Участники
Зарегистрирован: 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)  | Причина: Не указана

Offline Дмитрий Пичулин  
#9 Оставлено : 29 января 2018 г. 18:45:37(UTC)
pd

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

Группы: Администраторы
Зарегистрирован: 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 ошибка какая-то есть?


Знания в базе знаний, поддержка в техподдержке
Offline kychanov_sa  
#10 Оставлено : 30 января 2018 г. 9:34:04(UTC)
kychanov_sa

Статус: Участник

Группы: Участники
Зарегистрирован: 27.06.2017(UTC)
Сообщений: 17
Откуда: РФ

Цитата:
Localhost тоже смущает, реальный адрес пробовали, что говорит дамп трафика? Соединение TCP устанавливается?

адрес реальный, у нас страница в браузере общается по https с локальным приложением, которое на localhost открыло соединение.
ошибок в журнале нет, но вот что странно, запрос на 127.0.0.1 вместо localhost нормально прошёл.
Запрос отправил из консоли браузера, последний при этом запросил подтверждение системы безопасности (сертификат доверенный, но выдан на localhost, а я к 127.0.0.1).
Запрос кстати пришёл в приложение до того, как я подтвердил в браузере сертификат.
Прям детектив получается :)
RSS Лента  Atom Лента
Пользователи, просматривающие эту тему
2 Страницы12>
Быстрый переход  
Вы не можете создавать новые темы в этом форуме.
Вы не можете отвечать в этом форуме.
Вы не можете удалять Ваши сообщения в этом форуме.
Вы не можете редактировать Ваши сообщения в этом форуме.
Вы не можете создавать опросы в этом форуме.
Вы не можете голосовать в этом форуме.