Почему мерзавец прекращал работать после того, как сервер отключил SSLv3?

Как большинство других, наш сервер репозитория должен отключить SSLv3 (и v2) как можно скорее.

Однако выполнение так, кажется, повреждает наших мерзавцев-клиенты - по крайней мере, на RHEL5 (соединения от моего рабочего стола FreeBSD хорошо работают). Даже новый мерзавец (2.1.2) сбои и библиотеки OpenSSL обновления к последнему от поставщика не помог.

Однако! Тот же мерзавец-клиент работает просто великолепно против github.com - и github.com уже имеет SSLv3, отключенный также. Методом проб и ошибок я установил наш сервер (Apache) конфигурация SSL для соответствия тому из GitHub:

SSLProtocol     ALL -SSLv2 -SSLv3
SSLHonorCipherOrder On
SSLCipherSuite  "AES128-SHA AES256-SHA RC4-SHA"

Путем выполнения sslscan против нашего сервера и GitHub, я получаю идентичный список шифров, принятых и отклоненных. Но мерзавец продолжает перестать работать:

    % git clone https://git.example.net/git/puppet-hiera
    Cloning into 'puppet-hiera'...
    * Couldn't find host git.example.net in the .netrc file, using defaults
    * About to connect() to git.example.net port 443
    *   Trying 10.89.8.27... * connected
    * Connected to git.example.net (10.89.8.27) port 443
    * successfully set certificate verify locations:
    *   CAfile: /etc/pki/tls/certs/ca-bundle.crt
      CApath: none
    * Unknown SSL protocol error in connection to git.example.net:443
    * Closing connection #0
    fatal: unable to access 'https://git.example.net/git/puppet-hiera/': Unknown SSL protocol error in connection to git.example.net:443

Теперь, единственное заметное различие, остающееся между SSL нашего сервера и GitHub, является этим sslscan может произвести детали сертификата GitHub, но не удается получить детали с нашего сервера.

Когда я соединяюсь с нашим сервером мерзавца от своего рабочего стола FreeBSD, того же git clone работы команды. Вместо сбоя, после вывода CApath: none, Я вижу:

      CApath: none
    * SSL connection using AES128-SHA
    * Server certificate:
             subject: C=US; postalCode= ............

и клонирование успешно выполняется. Как я настраиваю наш сервер так, чтобы мерзавец работал с ним даже от старых RHEL5-систем - как он делает против серверов GitHub?

Обновление: попытка получить доступ к нашему серверу только с curl, Я получил подобную ошибку по совместимости SSL. Однако я смог преодолеть его путем вызова завихрения с явным --tlsv1 опция (также известный как -1). Так, программное обеспечение в системах RHEL5 способно к необходимым протоколам и шифрам - как я заставляю его использовать их по умолчанию вместо того, чтобы пробовать старые и перестать работать?

5
задан 28 October 2014 в 22:59
2 ответа

Хорошо, вот сделка. Отключение SSLv3 в сегодняшнем Apache означает, что сервер даже не скажет клиенту, что он хочет использовать TLS. Если клиент не начинает диалог с TLS, клиент завершится ошибкой - даже если сможет говорить по TLS. Большое спасибо пользователю Крису С. , который проанализировал проблему и даже предложил патч для Apache mod_ssl , отвечая на вопрос, связанный с .

Посмотрев на патч Криса, разработчики Apache придумали более полный, который может даже стать частью следующего выпуска Apache. Он представляет новую опцию для директивы Apache SSLProtocols : ANY . Когда Apache встречает ANY , он сообщает подключающемуся клиенту (через SSLv2Hello), что он должен переключиться на TLS:

SSLProtocol ANY -SSLv2 -SSLv3

Я вставляю патч для тех, кто не может позволить себе ждать для Apache 2.4.11.

Index: modules/ssl/ssl_private.h
===================================================================
--- modules/ssl/ssl_private.h    (revision 1635012)
+++ modules/ssl/ssl_private.h    (working copy)
@@ -295,8 +295,10 @@ typedef int ssl_opt_t;
 #define SSL_PROTOCOL_TLSV1_2 (1<<4)
 #define SSL_PROTOCOL_ALL   (SSL_PROTOCOL_SSLV3|SSL_PROTOCOL_TLSV1| \
                 SSL_PROTOCOL_TLSV1_1|SSL_PROTOCOL_TLSV1_2)
+#define SSL_PROTOCOL_ANY   (1<<5)
 #else
 #define SSL_PROTOCOL_ALL   (SSL_PROTOCOL_SSLV3|SSL_PROTOCOL_TLSV1)
+#define SSL_PROTOCOL_ANY   (1<<3)
 #endif
 typedef int ssl_proto_t;

Index: modules/ssl/ssl_engine_init.c
===================================================================
--- modules/ssl/ssl_engine_init.c    (revision 1635012)
+++ modules/ssl/ssl_engine_init.c    (working copy)
@@ -490,6 +490,7 @@ static apr_status_t ssl_init_ctx_protocol(server_r
     }

     cp = apr_pstrcat(p,
+                     (protocol & SSL_PROTOCOL_ANY ? "SSLv23, " : ""),
              (protocol & SSL_PROTOCOL_SSLV3 ? "SSLv3, " : ""),
              (protocol & SSL_PROTOCOL_TLSV1 ? "TLSv1, " : ""),
 #ifdef HAVE_TLSV1_X
Index: modules/ssl/ssl_engine_config.c
===================================================================
--- modules/ssl/ssl_engine_config.c    (revision 1635012)
+++ modules/ssl/ssl_engine_config.c    (working copy)
@@ -1311,6 +1311,9 @@ static const char *ssl_cmd_protocol_parse(cmd_parm
     else if (strcEQ(w, "all")) {
         thisopt = SSL_PROTOCOL_ALL;
     }
+        else if (strcEQ(w, "any")) {
+            thisopt = SSL_PROTOCOL_ANY|SSL_PROTOCOL_ALL;
+        }
     else {
         return apr_pstrcat(parms->temp_pool,
                parms->cmd->name,
Index: modules/ssl/ssl_engine_io.c
===================================================================
--- modules/ssl/ssl_engine_io.c    (revision 1635012)
+++ modules/ssl/ssl_engine_io.c    (working copy)
@@ -1137,6 +1137,7 @@ static apr_status_t ssl_io_filter_handshake(ssl_fi
      * IPv4 and IPv6 addresses are not permitted".)
      */
     if (hostname_note &&
+            !(sc->proxy->protocol & SSL_PROTOCOL_ANY) &&
         sc->proxy->protocol != SSL_PROTOCOL_SSLV3 &&
         apr_ipsubnet_create(&ip, hostname_note, NULL,
                 c->pool) != APR_SUCCESS) {
6
ответ дан 3 December 2019 в 01:31

Мне нравится объяснение, которое вы дали, как сделать настройки на стороне сервера, чтобы заставить работать git-клиенты. Моя проблема заключалась в попытке подключиться к jazzhub, где у меня нет возможности изменить сервер. Я придумал это решение сегодня (и поздно вечером):

https://developer.ibm.com/answers/answers/164635/view.html

Если у вас есть отзывы, я бы с удовольствием послушал его.

-Майкл

.
0
ответ дан 3 December 2019 в 01:31

Теги

Похожие вопросы