redirectSSL身份validation失败的用户

我configuration了一个启用SSL和SSL客户端身份validation的VirtualHost,所有这些都在apache2 2.2.8(ubuntu server 8.04)上。

所有SSL证书(CA,服务器证书,客户端证书,CRL)都是使用openssl命令行生成的。

如果客户端证书无效(不存在,过期或撤销),我想将用户redirect到自定义错误页面。

这是我的虚拟主机的configuration:

<VirtualHost *:443> ServerName myserv.example.com DocumentRoot /var/www/myserv/ CustomLog /var/log/apache2/myserv.access.log combined ErrorLog /var/log/apache2/myserv.error.log LogLevel warn SSLEngine on SSLOptions +StdEnvVars +ExportCertData SSLCertificateFile "/etc/apache2/ssl/certs/servcrt.pem" SSLCertificateKeyFile "/etc/apache2/ssl/private/servkey.pem" SSLCACertificateFile "/etc/apache2/ssl/certs/ca.pem" SSLCARevocationPath "/etc/apache2/ssl/crl/" SSLCARevocationFile "/etc/apache2/ssl/crl/crl.pem" <Directory /var/www/myserv/> Options Indexes FollowSymLinks MultiViews AllowOverride None Order allow,deny Allow from all SSLVerifyClient optional SSLVerifyDepth 1 RewriteEngine on RewriteCond %{SSL:SSL_CLIENT_VERIFY} !^SUCCESS$ RewriteRule .* /error-page.html [L] </Directory> </VirtualHost> 

使用该configuration,如果用户没有任何SSL证书,则会被正确redirect到错误页面。 但是,如果他有一个撤销或过期的证书,握手失败(正常),连接closures(在浏览器上返回一个SSL错误)。

如何告诉apache2将用户redirect到正确的页面,而不是在SSL握手失败时closures连接?

networking服务器可以“做某事”而不是在浏览器中显示大多数(也许是所有的)SSL错误是一个常见的误解。

这是因为SSL握手首先完全独立于任何HTTP通信。 虽然我们把它当作一个,但HTTPS实际上并不是一个与HTTP不同的协议,它是“浏览器和服务器之间的HTTP over和encryption通道”。

如果客户端提交了无效的证书,则SSL握手失败,则会出现错误。 此时没有发生HTTP通信,因此不存在redirect用户的机会。