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

Уведомление

Icon
Error

2 Страницы12>
Опции
К последнему сообщению К первому непрочитанному
Offline albertaino  
#1 Оставлено : 17 мая 2013 г. 16:38:00(UTC)
albertaino

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

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

Здравствуйте!

У меня задача реализовать прокси, который будет работать на локалхосте под iOS и обрабатывать запросы клиента, обращаясь к определенным сайтам по SSL с гостовыми алгоритмами.

Пока я разрабатываю и тестирую под Mac OS X - установил CryptoPro 3.6 для Mac OS.
В данный момент (с помощью примера WebClient.c) реализован клиент, которым прокси будет забирать урлы с гостовых сайтов и отдавать браузеру.

Теперь надо сделать следующее:

1) принять запрос (https://...) от клиента (например, обычного Safari, который ничего не знает про гостовые алгоритмы);
2) провести рукопожатие по обычному алгоритму. Для этого можно использовать самоподписанный сертификат, который клиент добавит в список доверяемых;
3) после рукопожатия на запрос "GET" проанализировать запрашиваемый URL, и если он принадлежит к определенному набору, заданному в настройках, перенаправить его на обычный HTTP с помощью 301 Moved Permanently.

То есть надо встроить в прокси серверную часть на СryptoPro, которая сможет сделать редирект клиенту Safari.

Возможно ли это под iOS ?

Заранее спасибо.
Offline Татьяна  
#2 Оставлено : 30 мая 2013 г. 21:40:32(UTC)
Татьяна

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

Группы: Участники
Зарегистрирован: 06.02.2008(UTC)
Сообщений: 1,491
Откуда: Крипто-Про

Поблагодарили: 40 раз в 37 постах
У нас есть stunnel, который делает что-то похожее, входит в число примеров, которые поставляются с фреймворком для ios. Примеры веб сервера и веб клиента из SDK также можно собрать для ios (изменения в файлах минимальные -- имена хидеров в #include поменять и т.п.), они работают так же как на других системах.
Татьяна
ООО Крипто-Про
Offline allocate  
#3 Оставлено : 4 июня 2013 г. 8:02:51(UTC)
allocate

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

Группы: Участники
Зарегистрирован: 04.06.2013(UTC)
Сообщений: 4
ОАЭ

А можно несколько подробнее про Вашу реализацию stunnel? Пример хорош, но не совсем понятно как он работает и readme не особо разговорчив.
Offline Татьяна  
#4 Оставлено : 4 июня 2013 г. 11:09:44(UTC)
Татьяна

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

Группы: Участники
Зарегистрирован: 06.02.2008(UTC)
Сообщений: 1,491
Откуда: Крипто-Про

Поблагодарили: 40 раз в 37 постах
Если вы не зададите более конкретных вопросов, я напишу что-то очень похожее на readme:)

Можно начать с readme:

Цитата:

Пример создания ssl-туннеля при помощи библиотеки stunnel.
Библиотека stunnel, которая поставляется вместе с примером, является модификацией
http://stunnel.org/ с добавленной поддержкой КриптоПро CSP.

Stunnel может работать навстречу обычному TLS-серверу, или другому экземпляру
stunnel, работающему в серверном режиме. Например, в качестве сервера может
выступать Microsoft ISA, Microsoft IIS, Apache + TrustedTLS, Apache с openssl на
ГОСТе или ещё что-нибудь.

Пример осуществляет запуск ssl-туннеля и может запустить примитивный браузер внутри
туннеля. Для работы браузера внутри туннеля необходимо настроить прокси на
localhost:<№ порта>. Туннель строится от localhost:<№ порта> до TMG, адрес которого
нужно внести в поле “Server URL”. Может быть установлено соединение с односторонней
или двухсторонней аутентификацией. Для двухсторонней аутентификации нужно выбрать
клиентский сертификат.

Браузер можно доработать или заменить на нужное Вам приложение. Также можно
модифицировать пример таким образом, чтобы он соединялся не с TMG, а непосредственно
с веб-сервером, к которому нужно получить доступ(например, если Вы строите туннель от
localhost:4444 до server, то при наборе в браузере адреса localhost:4444 вы будете
через туннель работать с server). В этом случае или в случае, если вашему приложению
можно будет задать адрес подключения(как rdp-клиенту), не нужно будет настраивать
прокси – надо будет только задать приложению адрес подключения, совпадающий с точкой
входа в туннель.

То, как осуществляется запуск туннеля, можно посмотреть в файле
iStunnelViewController.mm. Ключевые моменты снабжены комментариями.

Сборка примера осуществляется в соответствии с инструкцией по сборке примеров из
состава фреймворка.
Единственное дополнительное действие, которое потребуется -- свойствах проекта в
«Library Search Paths» исправить путь к папке, в которой лежит библиотека libcspstunnel.

Пример предоставляется бесплатно.
Авторские права на пример принадлежат ООО КРИПТО-ПРО.


и уточнить что именно нужно пояснить подробнее.
Про stunnel и механизм его работы можно почитать на сайте stunnel: https://www.stunnel.org/index.html , конфиги стандартные.
В коде есть комментарии.
Татьяна
ООО Крипто-Про
Offline allocate  
#5 Оставлено : 5 июня 2013 г. 7:49:08(UTC)
allocate

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

Группы: Участники
Зарегистрирован: 04.06.2013(UTC)
Сообщений: 4
ОАЭ

Татьяна, как, например, установить соединение через stunnel с Вашим сайтом с односторонней аутентификацией? Т.е. между stunnel и обычным TLS сервером.

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

Offline Татьяна  
#6 Оставлено : 5 июня 2013 г. 11:02:07(UTC)
Татьяна

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

Группы: Участники
Зарегистрирован: 06.02.2008(UTC)
Сообщений: 1,491
Откуда: Крипто-Про

Поблагодарили: 40 раз в 37 постах
если Вы строите туннель от localhost:4444 до server, то при наборе в браузере адреса localhost:4444 вы будете через туннель работать с server

чтобы построить туннель от localhost:4444 до server нужно в конфиге stunnel в поле accept написать localhost:4444 , а в поле connect написать server

конфиг stunnel формируется в функции connect в iStunnelViewController, вот тут:

NSString *content = [NSString stringWithFormat: @"pid = %@/../Library/Caches/cprocsp/tmp/stunnel.pid\n\
output = %@/../Library/Caches/cprocsp/tmp/stunnel.log\nsocket = a:SO_REUSEADDR=1\n\
foreground = yes\ndebug = 7\nsocket = l:TCP_NODELAY=1\nsocket = r:TCP_NODELAY=1\n\
[test]\nclient = yes\naccept = %s:%d\nconnect = %s:%s\n%@",
documentsDirectory, documentsDirectory,httpProxy,port,
serverURL.c_str(),server_port_number,auth];

есть два варианта применения:
1) сложный вариант -- если вам нужен туннель до TMG-сервера и вам нужно весь трафик загнать в этот туннель, тогда нужно настраивать прокси чтобы трафик попадал на вход туннеля
2) простой вариант -- если нужно соединение с одним сайтом, в этом случае вы просто пишите в браузере адрес входа в туннель (или пишите нормальный адрес, а потом в gotoAddress подменяете его), в этом случае с прокси заморачиваться не надо

в примере реализован сложный вариант, если вам нужна работа с одним сайтом и не нужны прокси -- удалите проверку настроек прокси и впишите в accept и connect нужные адреса
Татьяна
ООО Крипто-Про
Offline allocate  
#7 Оставлено : 5 июня 2013 г. 16:18:02(UTC)
allocate

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

Группы: Участники
Зарегистрирован: 04.06.2013(UTC)
Сообщений: 4
ОАЭ

пробежимся по проблемам :)
В простейшем случае не удается подключиться даже через вашу реализацию stunnel для windows. При попытке подключиться к зашифрованном TLS-серверу, допустим это ваш сайт, получается ошибка untrusted_connection. Хорошо, пытаемся подкллючить клиентский сертификат и оно вываливает новую ошибку CertFindCertificateInStore. С которой вообще не ясно как бороться. Значение я понимаю, но, в таком разе, как добавить сертификат в хранилище, которое не известно где взять? Административная панель cryptopro csp не дает такой возможности. У вас в документации есть инструкция, как создать хранлище в crypto pro, даже с картинкой окошка. Одна беда - пути до окошка не ясны.
Про реализацию для iOS я, пожалуй, пока помолчу. Описанный Вами вариант прост как карандаш, но он не работает :) Если вы мне дадите пару подсказок по stunnel для win, может я пойму как запустить это чудо для iOS, потому что ошибки странные и не ясно как с ними бороться. Еще могу сказать, что оригинальный stunnel чудесно пробрасывается под win на тот же google.ru
Ах да, доступа к TLS-серверу, увы и ах, не имею :)
Offline Татьяна  
#8 Оставлено : 5 июня 2013 г. 16:57:34(UTC)
Татьяна

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

Группы: Участники
Зарегистрирован: 06.02.2008(UTC)
Сообщений: 1,491
Откуда: Крипто-Про

Поблагодарили: 40 раз в 37 постах
1) "Хорошо, пытаемся подкллючить клиентский сертификат и оно вываливает новую ошибку CertFindCertificateInStore" -- чтобы использовать клиентский сертификат, он должен у вас быть. Скорее всего, ошибка untrusted_connection означает, что нужно установить корневой сертификат.

2) В общем случае, Сертификат в храналище устанавливают функцией CertAddCertificateContextToStore. Про "хранилище, которое не известно где взять" тоже не поняла -- хранилища стандартные для всех операционных систем (и для windows и для linux и для ios) -- my для личных сертификатов, root для корневых, ca для промежуточных и для crl. Для iOS мы предоставляем библиотеку, которую вы можете встроить в своё приложение и пользоваться её API. Если вы не планируете пользоваться API и не хотите знать как работает API, то получить какой-то результат будет тяжело.

3) "Административная панель cryptopro csp не дает такой возможности. У вас в документации есть инструкция, как создать хранлище в crypto pro, даже с картинкой окошка. Одна беда - пути до окошка не ясны."
Вы можете как-то объяснить что вам нужно? Никакой инструкции по созданию хранилища у нас нет, вы видимо запутались в понятиях и я плохо понимаю чего вы хотите. Можете, например, поставить корневой сертификат нашего тестового УЦ кнопокой "установить корневой" из панели и подключаться к этому же серверу для тестов (адрес указан в строке URL УЦ в панели). У нашего боевого сервера сертификат выдан другим удостоверяющим центром. Не ясно как нужно было организовать в панели функцию "поставить корневой сертификат удостоверяющего центра, который выдал сертификат тому серверу, к которому allocate решил подключиться через stunnel".

4) Про stunnel для windows у нас есть руководство http://www.cryptopro.ru/...guidestunnel_windows.pdf то, что там написано, не работает? Если не работает, то покажите что в логах stunnel, там обычно довольно информативно описаны проблемы.
Татьяна
ООО Крипто-Про
Offline allocate  
#9 Оставлено : 6 июня 2013 г. 6:43:23(UTC)
allocate

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

Группы: Участники
Зарегистрирован: 04.06.2013(UTC)
Сообщений: 4
ОАЭ

Давайте разберемся сначала с версией для windows
4)

Так, это я решил. Теперь пытаюсь авторизироваться на другом TLS сервере. Соединение установлено через одиночную аутентификацию. Просто хочу засабмитить форму с логином и паролем. Получаю BAD cookie. Rejecting your session cookies. Сталкивались с такой проблемой?

UP
Собрал Ваш пример для iOS добавил в конфиг mutual_auth=no; При попытке подключиться к 127.0.01:4322 пример падает с ошибкой thread_kill
Полный конфиг
Код:
	
client = yes
mutual_auth=no
foreground = yes
debug = 7
verify=0
socket = l:TCP_NODELAY=1
socket = a:SO_REUSEADDR=1
socket = r:TCP_NODELAY=1
	[client]
accept = 127.0.0.1:4322
connect = site:443

Отредактировано пользователем 6 июня 2013 г. 10:10:33(UTC)  | Причина: Не указана

Offline Татьяна  
#10 Оставлено : 6 июня 2013 г. 10:55:06(UTC)
Татьяна

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

Группы: Участники
Зарегистрирован: 06.02.2008(UTC)
Сообщений: 1,491
Откуда: Крипто-Про

Поблагодарили: 40 раз в 37 постах
"При попытке подключиться к 127.0.01:4322 пример падает с ошибкой thread_kill" -- пришлите стек.
Татьяна
ООО Крипто-Про
RSS Лента  Atom Лента
Пользователи, просматривающие эту тему
2 Страницы12>
Быстрый переход  
Вы не можете создавать новые темы в этом форуме.
Вы не можете отвечать в этом форуме.
Вы не можете удалять Ваши сообщения в этом форуме.
Вы не можете редактировать Ваши сообщения в этом форуме.
Вы не можете создавать опросы в этом форуме.
Вы не можете голосовать в этом форуме.