我想知道如果浏览器没有提供有效的客户端证书,是否有办法从网页重定向浏览器。
例如:
我网站上的这一部分需要相互 SSL 身份验证:
subdomain.domain.com
这是我网站的主要部分,它是公开的:
domain.com
用于身份验证的客户端证书由我自己的 CA 颁发,自签名。 服务器证书相同。 “已知”客户还将我的 CA 添加到他们受信任的 CA 存储中。
如果没有有效客户端证书的第 3 方客户端访问 subdomain.domain.com,它将被重定向到 domain.com
我正在考虑 VHOSTs 区域中的一些配置。我玩过
RewriteCond %{SSL:SSL_CLIENT_VERIFY} !=SUCCESS
或与
SSLVerifyClient optional / required / optional_no_ca
但它似乎并没有像我想要的那样工作。
并以某种方式理解它在说什么,但我不确定是否没有其他方法可以解决它,或者它可能同时被修复(不仅仅是文档)
谢谢。
最佳答案
我认为您走在正确的轨道上。当向服务器提供有效的客户端证书时,Apache 的 mod_ssl 将设置一些 Apache 环境变量。如果 SSL_CLIENT_S_DN_CN Apache 环境变量为空,则以下配置 block 应重定向。
<Location /path/to/protect/>
SSLVerifyClient optional
SSLVerifyDepth 1
SSLOptions +StdEnvVars
RewriteEngine on
RewriteCond %{SSL:SSL_CLIENT_S_DN_CN} =""
RewriteRule (.*) http://domain.com
</Location>
如果客户端证书未随请求一起提供,则 SSL_CLIENT_S_DN_CN 将为空并用作重写标准。
希望这对您有所帮助。
关于Apache https 客户端身份验证或重定向,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/15692422/