我们在安装 Apache 时遇到了一个相当奇怪的问题。下面是简短的摘要:
目前,我正在使用 https 和服务器证书设置 Apache。这相当简单,开箱即用 - 正如预期的那样。这是此设置的配置:
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] [客户端:43357] AH01998:与子进程 86 的连接已关闭,并导致中止关闭([2012 年 10 月 11 日星期四 09:27:36.221876] [ssl:debug] [pid 9530:tid 25] ssl_engine_io.c(1171):(70014)找到文件结束:[客户端 10.235.128.55:45846] AH02007:SSL 握手被系统中断[提示:浏览器中按下了停止按钮?!]
这只会发送大量日志。这是怎么回事?我可以看到此配置在我的本地机器上运行正常,但在我们的某台服务器上却无法运行。服务器之间没有配置差异,只有应用程序方面的微小变化。
我尝试了以下操作:1)删除 CA 证书检查(有效)2)为整个网站添加所需的 CA 证书(有效)3)添加“SSLVerifyClient 可选”不起作用 4)++
服务器/应用程序信息
当地的:
-OpenSSL v.1.0.1x -Apache 2.4.3 -Ubuntu -mpm:事件 - 每个配置都应打开
(失败)服务器:
-OpenSSL 0.9.8e -Apache 2.4.2 -SunOS -mpm: worker -每个配置都应打开
如果需要更多信息,请告诉我,我会立即提供。
简要总结:
- 运行 apache 2.4 - 服务器证书工作正常 - 某些 /Locations 的客户端证书不起作用,失败并出现错误
附言:
这可能与 OpenSSL 版本以及与 TLS/SSLv3 相关的“重新协商”内容有关吗?
答案1
看起来我们使用的针对 Sun OS 编译的 apache 版本有问题。解释如下:-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 的问题已在那里得到解决。
资源: