Заключение: я считаю, что я несовместил версию 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 (*)