lin*_*kdd 5 ssl authentication apache-2.2
我配置了一个启用 SSL 和 SSL 客户端身份验证的 VirtualHost,所有这些都在 apache2 2.2.8(ubuntu 服务器 8.04)上。
所有 SSL 证书(CA、服务器证书、客户端证书、CRL)都是使用 openssl 命令行生成的。
如果客户端证书无效(不存在、过期或吊销),我想将用户重定向到自定义错误页面。
这是我的虚拟主机的配置:
<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>
Run Code Online (Sandbox Code Playgroud)
使用该配置,如果用户没有任何 SSL 证书,他将被正确重定向到错误页面。但是如果他有一个被撤销或过期的证书,握手失败(正常)并且连接被关闭(在浏览器上返回一个 SSL 错误)。
如何告诉 apache2 将用户重定向到正确的页面,而不是在 SSL 握手失败时关闭连接?
一种常见的误解是,Web 服务器可以“执行某些操作”,而不是在浏览器中显示大多数(也许是全部)SSL 错误。
这是因为 SSL 握手首先发生并且完全独立于任何 HTTP 通信。尽管我们将其视为一个协议,但 HTTPS 并不是真正与 HTTP 不同的协议,它是“浏览器和服务器之间的 HTTP 和加密通道”。
如果客户端提供无效证书,则 SSL 握手失败,您会收到错误消息。此时尚未发生 HTTP 通信,因此不存在重定向用户的机会。
| 归档时间: |
|
| 查看次数: |
2335 次 |
| 最近记录: |