我正在configurationApache使用客户端证书身份validation。 但是,当我浏览网站时,除非指定SSLCACertificateFile,否则它不要求我提供证书。 然后它会通过浏览器索取证书。 浏览器会popup一个框,要求我select一个证书(它只显示由SSLCACertificateFile指定的CA签名的证书)。
我正在使用自签名证书。
如果在SSLCACertificatePath中指定了“客户端”使用的证书,也没有关系。
任何有用的build议,为什么这样做? 除非指定SSLCACertificateFile,否则浏览器是否不要求证书正常?
<VirtualHost _default_:443> DocumentRoot "C:/documents" ServerName server.ip:443 ServerAdmin [email protected] ErrorLog "C:/Apache2.2/logs/error.log" TransferLog "C:/Apache2.2/logs/access.log" SSLEngine on SSLCipherSuite HIGH:MEDIUM SSLCertificateFile C:/Apache2.2/certs/server.crt SSLCertificateKeyFile C:/Apache2.2/certs/server.key SSLCertificateChainFile C:/Apache2.2/certs/ca.crt SSLCACertificateFile C:/Apache2.2/certs/ca.crt SSLCACertificatePath C:/Apache2.2/allowed-crts SSLCARevocationPath C:/Apache2.2/revoked-certs SSLVerifyClient require SSLVerifyDepth 2 SSLOptions +ExportCertData +StdEnvVars <FilesMatch "\.(cgi|shtml|phtml|php)$"> SSLOptions +StdEnvVars </FilesMatch> <Directory "C:/Apache2.2/cgi-bin"> SSLOptions +StdEnvVars </Directory> BrowserMatch ".*MSIE.*" \ nokeepalive ssl-unclean-shutdown \ downgrade-1.0 force-response-1.0 CustomLog "C:/Apache2.2/logs/webservices-ssl_request.log" \ "%t %h %{SSL_PROTOCOL}x %{SSL_CIPHER}x \"%r\" %b" </VirtualHost>
你所说的话是有道理的,而文件虽然有点模糊,但似乎同意。
SSLCACertificateFile
该指令设置了一体式文件,您可以在其中组装与您处理的客户的证书颁发机构(CA)证书。 这些用于客户端身份validation。 这样的文件就是各种PEM编码的证书文件的串联,按照优先顺序。 这可以替代地和/或另外用于SSLCACertificatePath。
只是为了澄清,我知道需要SSLCACertificateFile ,以便服务器知道哪些客户端允许在保护区域放置,并且至less需要SSLCACertificateFile或SSLCACertificatePath 。
当使用自签名证书时,我发现放弃CA业务和使用SSLVerifyClient optional_no_ca结合SSLRequire更容易:
DocumentRoot /srv/www/1 ServerName your.server.tld SSLCertificateFile /etc/apache2/ssl/your.server.tld.crt SSLCertificateKeyFile /etc/apache2/ssl/your.server.tld.key SSLEngine on SSLOptions +StdEnvVars <Location /> Order allow,deny allow from all SSLRequireSSL SSLVerifyDepth 1 SSLVerifyClient optional_no_ca SSLRequire (\ %{SSL_CLIENT_CERT} eq file("/etc/apache2/ssl/validclient.crt")\ ) </Location>
如果您打算使用自签名客户端证书(这可能是有意义的,但应谨慎使用,因为它们最终需要以某种方式进行validation),您需要:
SSLCADNRequestFile指向一个文件空行 SSLVerifyClient optional_no_ca完成。 这个答案中有更多的细节。