带有CA bundle的apache worker的问题(错误(20):无法获取本地颁发者证书)

时间:2012-09-20 15:59:23

标签: apache ssl-certificate httpd.conf pki

在我们的设置中,我们有几千名用户使用apache(httpd-2.2.3-65.el5_8,mod_ssl-2.2.3-65.el5_8)敲击运行rhel 5.8的linux服务器。我们的用户使用PKI登录系统。服务器上有5个CA.当我们使用apache prefork模型时,一切正常。但是,当我们切换到工作模型时,大多数请求都很顺利,但我们在ssl_error_log文件中遇到了很多错误,如下所示:

“[错误]证书验证:错误(20):无法获得本地颁发者证书”

如果我们使用单个CA运行工作模型,则不会出现此错误。使用prefork模型时不会发生此错误。使用worker ThreadsPerChild=1的CA捆绑包不会发生这种情况。只有worker(ThreadsPerChild>1)与ca bundle而不是单个CA的组合才会导致这种情况发生。

这是我们在apache配置文件中的工作者配置:

<IfModule worker.c>
ServerLimit     250
StartServers         20
MaxClients         2050
MinSpareThreads     20
MaxSpareThreads     50
ThreadsPerChild     10
MaxRequestsPerChild  0
</IfModule>

prefork设置为:

<IfModule prefork.c>
StartServers       8
MinSpareServers    5
MaxSpareServers   20
ServerLimit     2048
MaxClients      2048
MaxRequestsPerChild  4000
</IfModule>

与使用prefork相比,使用worker运行多个CA是否存在已知问题,或者我们是否需要正确调整工作器配置以获得所需的行为?

1 个答案:

答案 0 :(得分:0)

我敢打赌它是特定于工人的,不依赖于配置,而是取决于工人的设计理念。它可能是用apache 2.4修复的。您是否将整个链与每个证书保存在同一个文件中,或者您在单独的文件中使用虚拟主机证书和CA链? AFAIR可以为CA证书使用两个指令,或者指向包含vhost证书AND链的文件的其他单个指令。

总而言之 - 如果有所帮助,它将重新组织证书文件中的数据而不是配置。无论如何,你使用单独的CA证书是很奇怪的,你应该解决这个问题,创建一个最高级别的CA(例如提供者(你的)CA),并为下面某个级别的各个网站颁发证书,可能在链中间有CA. 。这样你就可以撤销特定CA的所有证书 - 这就是它通常与专业的,高规模的认证公司和组织一起使用的方式。正如您在使用单线程/单个CA时报告的问题没有显示,我猜您可以这样做。

个人恭喜使用X509验证/授权,有人使用它很好:)