У нас возникла довольно странная проблема с установкой Apache. Вот краткое изложение:
В настоящее время я настраиваю Apache с https и сертификатами сервера. Это довольно просто и работает прямо из коробки - как и ожидалось. Это конфигурация для этой установки:
Listen 443
SSLEngine on
SSLCertificateFile "/progs/apache/ssl/example-site.no.pem"
SSLCertificateKeyFile "/progs/apache/ssl/example-site.no.key"
SSLCACertificateFile "/progs/apache/ssl/ca/example_root.pem"
SSLCADNRequestFile "/progs/apache/ssl/ca/example_intermediate.pem"
SSLVerifyClient none
SSLVerifyDepth 3
SSLOptions +StdEnvVars +ExportCertData
RequestHeader set ssl-ClientCert-Subject-CN "%{SSL_CLIENT_S_DN}s"
RewriteEngine On
ProxyPreserveHost On
ProxyRequests On
SSLProxyEngine On
...
<LocationMatch /secureStuff/$>
SSLVerifyClient require
Order deny,allow
Allow from All
</LocationMatch>
...
<Proxy balancer://exBalancer>
Header add Set-Cookie "EX_ROUTE=EB.%{BALANCER_WORKER_ROUTE}e; path=/" env=BALANCER_ROUTE_CHANGED
BalancerMember http://10.0.0.1:7200 route=ee1 retry=300 flushpackets=off keepalive=on
BalancerMember http://10.0.0.2:7200 route=ee2 retry=300 flushpackets=off keepalive=on status=+H
ProxySet stickysession=EX_ROUTE scolonpathdelim=Off timeout=10 nofailover=off failonstatus=505 maxattempts=1 lbmethod=bybusyness
Order deny,allow
Allow from all
</Proxy>
RewriteCond %{REQUEST_URI} !^/index.html [NC]
RewriteRule ^/(.*)$ balancer://exBalancer/$1 [P,NC]
ProxyPassReverse / balancer://exBalancer/
Header edit Set-Cookie "(.*)" "$1;HttpsOnly"
...
Итак - все работает нормально и, как и ожидалось, для всех страниц, которые не являются частью директивы LocationMatch.
При запросе чего-то, что соответствует директиве LocationMatch, меня просят предоставить сертификат (отсюда и обязательный атрибут SSLVerifyClient) и получить все правильные сертификаты в моем браузере, основанные на корневой / промежуточной цепочке. После выбора сертификата и нажатия «ОК» в журналах apache появляется следующее:
[ssl: info] [pid 9530: tid 25] [client: 43357] AH01998: соединение с дочерним элементом 86 закрыто с аварийным завершением работы ([Thu Oct 11, 09: 27: 36.221876 2012] [ssl: debug] [pid 9530: tid 25 ] ssl_engine_io.c (1171): (70014) Конец найденного файла: [client 10.235.128.55:45846] AH02007: подтверждение связи SSL прервано системой [Подсказка: в браузере нажата кнопка Stop ?!]
И это просто спамит журналы. Что здесь происходит? Я вижу, что эта конфигурация работает на моем локальном компьютере, но не на одном из наших серверов. Между серверами нет различий в конфигурации, только незначительные изменения в приложениях.
Я пробовал следующее: 1) Удаление проверки CA-сертификата (работает) 2) Добавление необходимого CA-сертификата для всего сайта (работает) 3) Добавление «SSLVerifyClient optional» не работает 4) ++
Местный:
-OpenSSL v.1.0.1x -Apache 2.4.3 -Ubuntu -mpm: event - каждая конфигурация должна быть включена
(отказавший) сервер:
-OpenSSL 0.9.8e -Apache 2.4.2 -SunOS -mpm: worker -в каждой конфигурации должна быть включена
Пожалуйста, дайте мне знать, если потребуется дополнительная информация, я немедленно ее предоставлю.
Краткое содержание:
-Запуск apache 2.4 -серверные сертификаты работают нормально-клиентские сертификаты для некоторых / локаций не работают, не работают с ошибками
PS:
Может ли это быть связано с версией OpenSSL и «повторным согласованием», связанным с TLS / SSLv3?
Похоже, что есть проблема с версией apache, скомпилированной для ОС Sun, которую мы используем. Это объясняется здесь: -http://svn.apache.org/viewvc?view=revision&revision=1373439
В дополнение к этому мы только что обновили openssl v1.0.1c, в котором исправлены некоторые другие проблемы.
Подводя итог: если вы используете Sun OS и Apache 2.4.0, 2.4.1 или 2.4.2, вам необходимо выполнить обновление до версии 2.4.3, поскольку проблема с SSLCaching решена там.
Ресурсы: