Ошибка настройки сервера Stunnel: `SSL3_GET_CLIENT_HELLO: неверный номер версии`

9

Я настраиваю stunnelсервер в Windows XP, и я получаю эту ошибку, когда клиент пытается получить доступ:

2013.02.14 00:02:16 LOG7[8848:7664]: Service [https] accepted (FD=320) from 107.20.36.147:56160
2013.02.14 00:02:16 LOG7[8848:7664]: Creating a new thread
2013.02.14 00:02:16 LOG7[8848:7664]: New thread created
2013.02.14 00:02:16 LOG7[8848:9792]: Service [https] started
2013.02.14 00:02:16 LOG5[8848:9792]: Service [https] accepted connection from 107.20.36.147:56160
2013.02.14 00:02:16 LOG7[8848:9792]: SSL state (accept): before/accept initialization
2013.02.14 00:02:16 LOG7[8848:9792]: SSL alert (write): fatal: handshake failure
2013.02.14 00:02:16 LOG3[8848:9792]: SSL_accept: 1408A10B: error:1408A10B:SSL routines:SSL3_GET_CLIENT_HELLO:wrong version number
2013.02.14 00:02:16 LOG5[8848:9792]: Connection reset: 0 byte(s) sent to SSL, 0 byte(s) sent to socket
2013.02.14 00:02:16 LOG7[8848:9792]: Local socket (FD=320) closed
2013.02.14 00:02:16 LOG7[8848:9792]: Service [https] finished (0 left)

Есть идеи, что с этим делать? Я читал в Интернете, что это может означать, что мой сервер рекламирует, что он может общаться по SSL3, но на самом деле это не так. Если это правда, я хотел бы знать, как я могу это исправить. Я редактирую stunnel.confфайл, но не знаю, что в нем изменить, чтобы это исправить.

ОБНОВИТЬ:

Приведенное выше сообщение об ошибке отображается только тогда, когда клиент Twilio (то есть сервер Twilio) пытается получить доступ к моему серверу. Когда я пытаюсь получить доступ к своему серверу с одного из моих компьютеров, страница действительно появляется, но после того, как отображается содержимое, Chrome показывает страницу как «загружаемую» в течение примерно 30 секунд, в конце которой stunnelвыдается следующее сообщение:

transfer: s_poll_wait: TIMEOUTclose exceeded: closing

ОБНОВИТЬ:

Вот захват проволочной акулы: https://gist.github.com/cool-RR/4963477

Файл шапки: https://dl.dropbox.com/u/1927707/wireshark.cap

Обратите внимание, что сервер работает на порту 8088.

ОБНОВИТЬ:

Вот журнал с сервера (с debug = 7):

2013.02.17 17:06:52 LOG7[7636:2092]: No limit detected for the number of clients
2013.02.17 17:06:52 LOG5[7636:2092]: stunnel 4.54 on x86-pc-msvc-1500 platform
2013.02.17 17:06:52 LOG5[7636:2092]: Compiled/running with OpenSSL 1.0.1c-fips 10 May 2012
2013.02.17 17:06:52 LOG5[7636:2092]: Threading:WIN32 SSL:+ENGINE+OCSP+FIPS Auth:none Sockets:SELECT+IPv6
2013.02.17 17:06:52 LOG5[7636:2092]: Reading configuration from file stunnel.conf
2013.02.17 17:06:52 LOG5[7636:2092]: FIPS mode is enabled
2013.02.17 17:06:52 LOG7[7636:2092]: Compression not enabled
2013.02.17 17:06:52 LOG7[7636:2092]: Snagged 64 random bytes from C:\Documents and Settings\User/.rnd
2013.02.17 17:06:52 LOG7[7636:2092]: Wrote 1024 new random bytes to C:\Documents and Settings\User/.rnd
2013.02.17 17:06:52 LOG7[7636:2092]: PRNG seeded successfully
2013.02.17 17:06:52 LOG6[7636:2092]: Initializing service [https]
2013.02.17 17:06:52 LOG7[7636:2092]: Certificate: G:\Dropbox\StartSSL\SSL Cert.pem
2013.02.17 17:06:52 LOG7[7636:2092]: Certificate loaded
2013.02.17 17:06:52 LOG7[7636:2092]: Key file: G:\Dropbox\StartSSL\SSL Cert.pem
2013.02.17 17:06:52 LOG7[7636:2092]: Private key loaded
2013.02.17 17:06:52 LOG7[7636:2092]: Could not load DH parameters from G:\Dropbox\StartSSL\SSL Cert.pem
2013.02.17 17:06:52 LOG7[7636:2092]: Using hardcoded DH parameters
2013.02.17 17:06:52 LOG7[7636:2092]: DH initialized with 2048-bit key
2013.02.17 17:06:52 LOG7[7636:2092]: ECDH initialized with curve prime256v1
2013.02.17 17:06:52 LOG7[7636:2092]: SSL options set: 0x03000004
2013.02.17 17:06:52 LOG5[7636:2092]: Configuration successful
2013.02.17 17:06:52 LOG7[7636:2092]: Service [https] (FD=268) bound to 0.0.0.0:8088
2013.02.17 17:07:08 LOG7[7636:2092]: Service [https] accepted (FD=320) from 54.242.25.199:45922
2013.02.17 17:07:08 LOG7[7636:2092]: Creating a new thread
2013.02.17 17:07:08 LOG7[7636:2092]: New thread created
2013.02.17 17:07:08 LOG7[7636:8004]: Service [https] started
2013.02.17 17:07:08 LOG5[7636:8004]: Service [https] accepted connection from 54.242.25.199:45922
2013.02.17 17:07:08 LOG7[7636:8004]: SSL state (accept): before/accept initialization
2013.02.17 17:07:08 LOG7[7636:8004]: SSL alert (write): fatal: handshake failure
2013.02.17 17:07:08 LOG3[7636:8004]: SSL_accept: 1408A10B: error:1408A10B:SSL routines:SSL3_GET_CLIENT_HELLO:wrong version number
2013.02.17 17:07:08 LOG5[7636:8004]: Connection reset: 0 byte(s) sent to SSL, 0 byte(s) sent to socket
2013.02.17 17:07:08 LOG7[7636:8004]: Local socket (FD=320) closed
2013.02.17 17:07:08 LOG7[7636:8004]: Service [https] finished (0 left)

ОБНОВИТЬ:

Вот мой stunnel.confфайл.

Рам Рахум
источник
Файл dropbox кажется отсутствующим. Сервер возвращает HTTP / 404
Мирча Вутцовичи
@MirceaVutcovici Извините, исправлено.
Рам Рахум
Я увеличил награду за этот вопрос до 100 баллов.
Рам Rachum
1
Не могли бы вы также включить файл stunnel.conf? Потому что, похоже, ваш сервер отказывается от соединений SSLv3.0
Stephane
Включено сейчас
Рам Рахум

Ответы:

3

Вы должны сделать захват сети и понять, почему он был отклонен. Также проверьте журналы на обеих конечных точках. Увеличьте debugуровень в конф.

Вам необходимо выполнить сетевую трассировку, чтобы выяснить, какую версию протокола SSL поддерживает клиент. Затем убедитесь, что ваш сервер также поддерживает эту версию.

Клиент отправляет сообщение ClientHello с указанием самой высокой версии протокола TLS, которую он поддерживает, случайным числом, списком предлагаемых CipherSuites и предлагаемыми методами сжатия.

Источник

Обратите внимание, что протокол SSL был изменен несколько лет назад из-за ошибки безопасности при повторном согласовании. См. CVE-2009-3555 и эту страницу о пересмотре SSL

Сервер отвечает:

Secure Sockets Layer
    SSLv3 Record Layer: Alert (Level: Fatal, Description: Handshake Failure)
        Content Type: Alert (21)
        Version: SSL 3.0 (0x0300)
        Length: 2
        Alert Message
            Level: Fatal (2)
            Description: Handshake Failure (40)

Вы должны проверить журналы на сервере SSL, чтобы понять, почему он отказался от подключения. Попробуйте включить SSL отладки на Stunnel с: debug=7.

stunnelСервер имеет options = NO_SSLv3, но клиент пытается подключиться с помощью SSLv3. Вам необходимо обновить клиент для поддержки более новой версии SSL или изменить stunnelконфигурацию для принятия SSLv3.

Мирча Вуцовичи
источник
Я обновил вопрос с более подробной информацией. Вы все еще нуждаетесь во мне для захвата сети?
Рам Рахум
Да, чтобы узнать, какая версия поддерживается клиентом SSL.
Мирча Вутцовичи
Я сделал захват Wireshark и связался с ним в вопросе.
Рам Рахум
1
Хорошо, проблема в том, что у вас включен режим FIPS (он включен по умолчанию в stunnel, скомпилированном с FIPS) и что клиент пытается подключиться с использованием SSLv3 (я полагаю, вы должны подтвердить это из журналов или захвата сети). Но FIPS работает только с TLSv1 или новее.
Мирча Вутцовичи
1
У вас есть 2 решения: 1. обновить клиент SSL (Twilio). 2. отключите соответствие FIPS и fips = noпонизьте уровень безопасности, добавив в stunnel.conf
Мирча Вутковичи
0

Это может быть несоответствие версии SSL между клиентом и сервером. Убедитесь, что клиент настроен только для SSL3, отключив старые версии SSL на клиенте.

Даниил Т.
источник
Я понятия не имею, как это сделать.
Рам Рахум