Я пытаюсь установить SSL-соединение сошеломить. Какой-то SSL-прокси.
Конечная цель
Подключить только httpКЛИЕНТтолько httpsСЕРВЕР.
Мой план таков:
- КЛИЕНТ: изменить конечную точку наПРОКСИ
- ПРОКСИ: используйте Stunnel для получения запросов от КЛИЕНТА и пересылки их на СЕРВЕР
stunnel.conf
cert = /etc/stunnel/stunnel.pem
foreground = yes
chroot = /var/run/stunnel
setuid = stunnel
setgid = stunnel
pid = /stunnel.pid
debug = 7
[my_route]
accept = 7121
connect = SERVER:443
;connect = SERVER:443/somedata
Тест 1
$openssl s_client -connect SERVER:443
New, TLSv1/SSLv3, Server public key is 2048 bit
Тест 2
openssl s_client -connect PROXY:7121
New, TLSv1/SSLv3, Server public key is 2048 bit
Результат(подключение от КЛИЕНТА к СЕРВЕРУ через ПРОКСИ).
Service [my_route] accepted (FD=3) from 10.0.2.2:12345
Service [my_route] started
Service [my_route] accepted connection from 10.0.2.2:12345
SSL state (accept): before/accept initialization
SSL_accept: 1408F10B: error:1408F10B:SSL routines:SSL3_GET_RECORD:wrong version number
Connection reset: 0 byte(s) sent to SSL, 0 byte(s) sent to socket
Local socket (FD=3) closed
Service [my_route] finished (0 left)
Вопросы
Почему IP не совпадает с SERVER? Почему подключается к 10.0.2.2?
Означает ли это, что я подключаюсь не к тому серверу? Как это может быть?Что говорит эта ошибка? Этот удаленный сервер использует другую версию SSL, не так ли?
решение1
- Почему IP не совпадает с SERVER? Почему подключается к 10.0.2.2?
Поскольку этот IP-адрес не является адресомсерверон подключается, но адресклиентмашина, с которой он получает данные (запущена openssl s_client).
Означает ли это, что я подключаюсь не к тому серверу? Как это может быть?
Нет, это не имеет никакого отношения к серверу.
- Что говорит эта ошибка? Этот удаленный сервер использует другую версию SSL, не так ли?
Это означает, что ваш stunnel пытается говорить SSL с клиентом (openssl s_client) при подключении. Похоже, они не согласны с версией протокола SSL для использования.
Однако это совершенно неправильно. В конфигурации, которую вы хотите настроить, stunnel должен ждать HTTP-подключений и туннелировать эти соединения с HTTPS на SERVER. Поэтому вы не можете использовать openssl s_client для подключения к вашему stunnel, так как openssl s_client будет использовать SSL, а stunnel будет ждать не-SSL-подключений.
Чтобы решить эту проблему, вам понадобится дополнительная строка client = yes
в вашей конфигурации. Затем, вместо использования openssl s_client в качестве клиента для вашего stunnel, вам следует либо использовать telnet ( telnet server2 7121
), либо программу, способную общаться по HTTP с вашим сервером (например, веб-браузер или что-то подобное с URL, начинающимся как http://PROXY:7121/...
).
Кроме того, настоятельно рекомендуется использовать IP-адреса в файле конфигурации (вместо текстовых имен хостов).
Что-то вроде этого вам должно подойти:
[my_route]
client = yes
accept = 7121
connect = aaa.bbb.ccc.ddd:443
решение2
Кажется, эта проблема решенав этом ответе на Server Fault; выделенная жирным шрифтом часть кажется подходящей к вашему сценарию:
На
stunnel
сервере естьoptions = NO_SSLv3
, но клиент пытается подключиться с использованием SSLv3.Вам необходимо обновить клиент для поддержки более новой версии SSL или изменить конфигурацию Stunnel для принятия SSLv3.
решение3
достаточно добавить это в файл конфигурации.
sslversion = all
и вы могли упустить еще одну вещь. вам следует явно установить «client = yes», иначе по умолчанию будет «no».