Назад | Перейти на главную страницу

Можно подключиться только к httpd на 443 с IP-адресом, квитирование SSL имени хоста не удается

Я столкнулся с очень странной проблемой. На нашем сервере мы запускаем Solaris 10 с httpd 2.2.19 и openssl 1.0.0d. У нас всего один виртуальный хост:

<VirtualHost _default_:443> ServerName hostname.example.com:443

Конечно, с именем хоста, которое является правильным. Когда мы переходим на сайт, используя имя хоста, соединение не устанавливается, и я вижу в error_log, что начинается квитирование SSL, отображается дамп BIO, а затем говорится:

[отладка] ssl_engine_kernel.c (1884): OpenSSL:> Запись: SSLv3 читает клиенту привет C

[отладка] ssl_engine_kernel.c (1903): OpenSSL: Exit: ошибка в ошибке

[отладка] ssl_engine_kernel.c (1903): OpenSSL: Exit: ошибка в ошибке

[информация] [клиент 1x.x.x.x] Ошибка библиотеки SSL 1 при рукопожатии (имя хоста сервера.example.com:443)

[info] Ошибка библиотеки SSL: 336204149 ошибка: 140A1175: Подпрограммы SSL: SSL_BYTES_TO_CIPHER_LIST: недопустимый откат

[информация] [клиент x.x.x.x] Соединение с дочерним элементом 0 закрыто с аварийным завершением работы (имя хоста сервера.example.com:443)

[примечание] дочерний pid 28997 сигнал выхода Ошибка сегментации (11), возможный дамп памяти в / usr / local / apache2 / logs

Кто-нибудь знает, в чем может быть проблема? Я не могу, хоть убей, подумать, почему имя хоста будет обрабатываться иначе, чем IP. У нас отключен протокол SSL3 в конфигурации и включен длинный список шифров, которые работают на других серверах.

Итак, я нашел способ исправить это, но я не уверен на 100%, почему это помогло. Я изменил ServerName с hostname.subdomain.domain: 443 на hostname.domain: 443. Правильное имя сервера - hostname.subdomain.domain, но я заметил в файле hosts, что IP для этого сервера имеет:

*IP* hostname hostname.domain

Может быть, это почему? Почему от этого SSL будет так плохо?

У вас не должно быть номера порта в ServerName.

Также вы используете виртуальный хостинг на основе имени? Если так, не используйте дефолт но вместо этого используйте *.

Итак, вместо этого:

<VirtualHost _default_:443>
    ServerName hostname.example.com:443
</VirtualHost>

есть это:

NameVirtualHost *:443
<VirtualHost *:443>
    ServerName hostname.example.com
</VirtualHost>

Согласно документации http://httpd.apache.org/docs/2.2/vhosts/examples.html#default:

По умолчанию виртуальный хост никогда не обслуживает запрос, который был отправлен на адрес / порт, который используется для виртуальных хостов на основе имен. Если запрос содержал неизвестный заголовок Host: или не содержал его, он всегда обслуживается первичным виртуальным хостом на основе имени (виртуальный хост для этого адреса / порта появляется первым в файле конфигурации).