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

В чем разница между «Using-Default-VirtualHost» и «Using-Correctly-Named-VirtualHost»?

Заключение: я считаю, что я несовместил версию openssl, когда скомпилировал apache. Теперь это работает; и я перекомпилировал его с помощью openssl, который уже установлен. Спасибо за вашу помощь, Неверующий.

Дополнительная информация: я выяснил другие связанные настройки из server.xml в разъеме tomcat. Итак, когда домен неверен, tomcat обрабатывает все части, а домен не является неправильным, tomcat и apache обрабатываются одновременно, и это может быть проблемой с другой версией openssl.

...или не.


Вопрос довольно странный, я знаю, но не могу представить, что есть разница.


Основная информация:

Сервер корректно работает в http: // соединении. (домен: test.domain.com) (Apache 2.2.31 (скомпилирован с openssl 1.0.1u), Tomcat (6.0.35, уже установлен ранее)

У меня уже есть сертификат * .domain.com для соединения https: //, и я уже использовал его в 'service.domain.com', поэтому https: // service.domain.com работает на другом сервере / машине / IP

И, наконец, я попытался установить SSL на «test.domain.com», чтобы разрешить соединение https: //.


Проблема:

И я нашел ..

Если я неправильно установил '.conf',

#Wrong.conf
<VirtualHost *:443>
    ServerName testy.domain.com #whatever, but not 'test.domain.com' 
    ....
</VirtualHost *:443>

работает, когда я подключаюсь к https: // test.domain.com. (и он будет использовать VirtualHost по умолчанию; есть только один *: 443, и когда я удалил этот виртуальный хост, у меня возникла ошибка, и я не смог подключиться.) Нет проблем, и я получаю идеальное соединение и сертификацию, и я могу читать веб-страницу, что хочу.

Однако, если я установил '.conf' "правильно"

#Correct.conf
<VirtualHost *:443>
    ServerName test.domain.com
    ...
</VirtualHost *:443>

и я НЕ МОГУ подключиться к https: // test.domain.com.

Подробная информация, когда я проверял другие инструменты, такие как curl -verbose,

когда я использую curl с # Wrong.conf

* TLSv1.2 (OUT), TLS handshake, Client hello (1)
* TLSv1.2 (IN), TLS handshake, Server hello (2)
* TLSv1.2 (IN), TLS handshake, Certificate ....
....
(and succeed)

и когда я использую curl с # Correct.conf

* TLSv1.2 (OUT), TLS handshake, Client hello (1)
* Unknown SSL protocol error in connection to test.domain.com:443
* Curl_http_done: called premature == 1
0  0  0  0  0  0  0  0  --:--:-- --:--:-- --:--:--  0
* Closing connection 0
curl: (35) Unknown SSL protocol error in connection to test.domain.com:443

Другие части, такие как «IP», «TCP_NODELAY», даже выбор Cipher и CAfile точно такие же (дважды проверено, и я не менял)


Итак, вернемся к первому вопросу,

Есть ли разница между использованием «Виртуального хоста по умолчанию» и «Виртуального хоста с правильным именем»?

И какие-нибудь предложения?


Обновить:

Приносим извинения за неудобства.

Когда это работает; Неправильно.conf apachectl -S показывает ...

VirtualHost configuration:
wildcard NameVirtualHosts and _default_ servers:
*:80     is a NameVirtualHost
    default server what.test.domain.com (/holy/apache/conf/httpd.conf:573)
    port 80 namevhost what.test.domain.com (/holy/apache/conf/httpd.conf:573)
    port 80 namevhost whatever.test.domain.com (/holy/apache/conf/httpd.conf:580)
    ...
    port 80 namvevhost test.domain.com (/holy/apache/conf/httpd.conf:615)
*:443    is a NameVirtualHost
    default server testy.domain.com (/holy/apache/conf/httpd.conf:541)
    port 443 namevhost testy.domain.com (/holy/apache/conf/httpd.conf:541) 
Syntax OK

Когда это не работает; Верный.conf apachectl -S показывает ...

VirtualHost configuration:
wildcard NameVirtualHosts and _default_ servers:
*:80     is a NameVirtualHost
    default server what.test.domain.com (/holy/apache/conf/httpd.conf:573)
    port 80 namevhost what.test.domain.com (/holy/apache/conf/httpd.conf:573)
    port 80 namevhost whatever.test.domain.com (/holy/apache/conf/httpd.conf:580)
    ...
    port 80 namvevhost test.domain.com (/holy/apache/conf/httpd.conf:615)
*:443    is a NameVirtualHost
    default server test.domain.com (/holy/apache/conf/httpd.conf:541)
    port 443 namevhost test.domain.com (/holy/apache/conf/httpd.conf:541) 
Syntax OK

Я не делал для этого два .conf, а просто вручную изменил ServerName (так что в остальной части разницы нет).


Обновление: журналы

Извините за опоздание. Наконец, я получил некоторые отличия от этой проблемы. Спасибо, Неверующий.

В «рабочем сценарии» я вижу то, что представлял себе

[debug] ssl_engine_kernel.c(1961): [client (**My IP**)] No matching SSL virtual host for servername test.domain.com found (using default/first virtual host)
[debug] ssl_engine_kernel.c(1842): OpenSSL: Loop: SSLv3 read client hello A
[debug] ssl_engine_kernel.c(1842): OpenSSL: Loop: SSLv3 write server hello A
[debug] ssl_engine_kernel.c(1842): OpenSSL: Loop: SSLv3 write change cipher spec A
[debug] ssl_engine_kernel.c(1842): OpenSSL: Loop: SSLv3 write finished A
[debug] ssl_engine_kernel.c(1842): OpenSSL: Loop: SSLv3 flush data

...

[debug] ssl_engine_kernel.c(1842): OpenSSL: Loop: SSLv3 read finished A
[debug] ssl_engine_kernel.c(1838): OpenSSL: Handshake: done
[info] Connection: Client IP: (**My IP**), Protocol: TLSv1.2, Cipher: ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)

Но в «неработающем сценарии» я обнаружил довольно подозрительные места.

1) Начните с двойного рукопожатия.

[info] [client (**My IP**)] Connection to child 0 established (server test.domain.com:443)
[info] [client (**My IP**)] Connection to child 1 established (server test.domain.com:443)
[info] Seeding PRNG with 144 bytes of entropy
[info] Seeding PRNG with 144 bytes of entropy
[debug] ssl_engine_kernel.c(1834): OpenSSL: Handshake: start
[debug] ssl_engine_kernel.c(1842): OpenSSL: Loop: before/accept initialization
[debug] ssl_engine_kernel.c(1834): OpenSSL: Handshake: start
[debug] ssl_engine_kernel.c(1842): OpenSSL: Loop: before/accept initialization

2) нет часть этого успешного квитирования (этот журнал из рабочего сценария)

[debug] ssl_engine_kernel.c(1961): [client (**My IP**)] No matching SSL virtual host for servername test.domain.com found (using default/first virtual host)
[debug] ssl_engine_kernel.c(1842): OpenSSL: Loop: SSLv3 read client hello A
[debug] ssl_engine_kernel.c(1842): OpenSSL: Loop: SSLv3 write server hello A
[debug] ssl_engine_kernel.c(1842): OpenSSL: Loop: SSLv3 write change cipher spec A
[debug] ssl_engine_kernel.c(1842): OpenSSL: Loop: SSLv3 write finished A
[debug] ssl_engine_kernel.c(1842): OpenSSL: Loop: SSLv3 flush data
[info] [client (**My IP**)] Connection to child 4 established (server **testy**.domain.com:443)

3) много ошибок сегментации

[notice] child pid 4683 exit signal Segmentation fault (11)
[notice] child pid 4684 exit signal Segmentation fault (11)
[notice] child pid 4685 exit signal Segmentation fault (11)
[notice] child pid 4686 exit signal Segmentation fault (11)
[notice] child pid 4687 exit signal Segmentation fault (11)

4) Журнал прокси

[debug] proxy_util.c(1901): proxy: grabbed scoreboard slot 0 in child 4727 for worker proxy:reverse
[debug] proxy_util.c(1921): proxy: worker proxy:reverse already initialized
[debug] proxy_util.c(2017): proxy: initialized single connection worker 0 in child 4727 for (*)
[info] [client (**My IP**)] Connection to child 5 established (server test.domain.com:443)
[info] Seeding PRNG with 144 bytes of entropy
[debug] proxy_util.c(1901): proxy: grabbed scoreboard slot 0 in child 4728 for worker proxy:reverse
[debug] proxy_util.c(1921): proxy: worker proxy:reverse already initialized
[debug] proxy_util.c(2017): proxy: initialized single connection worker 0 in child 4728 for (*)
[notice] child pid 4727 exit signal Segmentation fault (11)
[debug] proxy_util.c(1901): proxy: grabbed scoreboard slot 0 in child 4729 for worker proxy:reverse
[debug] proxy_util.c(1921): proxy: worker proxy:reverse already initialized
[debug] proxy_util.c(2017): proxy: initialized single connection worker 0 in child 4729 for (*)