在我们的设置中,我们有几千名用户使用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是否存在已知问题,或者我们是否需要正确调整工作器配置以获得所需的行为?
答案 0 :(得分:0)
我敢打赌它是特定于工人的,不依赖于配置,而是取决于工人的设计理念。它可能是用apache 2.4修复的。您是否将整个链与每个证书保存在同一个文件中,或者您在单独的文件中使用虚拟主机证书和CA链? AFAIR可以为CA证书使用两个指令,或者指向包含vhost证书AND链的文件的其他单个指令。
总而言之 - 如果有所帮助,它将重新组织证书文件中的数据而不是配置。无论如何,你使用单独的CA证书是很奇怪的,你应该解决这个问题,创建一个最高级别的CA(例如提供者(你的)CA),并为下面某个级别的各个网站颁发证书,可能在链中间有CA. 。这样你就可以撤销特定CA的所有证书 - 这就是它通常与专业的,高规模的认证公司和组织一起使用的方式。正如您在使用单线程/单个CA时报告的问题没有显示,我猜您可以这样做。
个人恭喜使用X509验证/授权,有人使用它很好:)