Apache https客户端身份验证或重定向

时间:2013-03-28 21:21:57

标签: apache redirect https mod-ssl authentication

我想知道是否有办法从网页重定向浏览器,如果它没有提供有效的客户端证书。

例如

我网站上的此部分需要相互SSL身份验证:

subdomain.domain.com

这是我网站的主要部分,它是公开的:

domain.com

身份验证的客户端证书由我自己的CA签发,自签名。 服务器证书相同。 “已知”客户端也将我的CA添加到其受信任的CA商店。

如果第三方客户端没有访问subdomain.domain.com的有效客户端证书,则应将其重定向到domain.com

我正在考虑VHOSTs领域的一些配置。我玩了

RewriteCond %{SSL:SSL_CLIENT_VERIFY} !=SUCCESS

SSLVerifyClient optional / required / optional_no_ca

但它似乎没有用,因为我想拥有它。

我发现了这篇文章 http://mail-archives.apache.org/mod_mbox/httpd-docs/201204.mbox/%3Ch15hm6ny7srm9zeidijezwJv4X.penango@mail.gmail.com%3E

并以某种方式明白它在说什么,但不确定是否没有其他方法可以解决它,或者可能它同时被修复(不仅仅是文档)

谢谢。

2 个答案:

答案 0 :(得分:3)

我认为你走在正确的轨道上。当有一个有效的客户端证书提交给服务器时,Apache的mod_ssl将设置一些Apache环境变量。如果SSL_CLIENT_S_DN_CN Apache环境变量为空,则应重定向以下配置块。

<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将为空,并将其用作重写条件。

希望这有帮助。

答案 1 :(得分:0)

以下是此任务的配置

<Directory "c:/inetPub/../sd">

    SSLVerifyClient optional
    SSLVerifyDepth  1

    RewriteEngine   on
    RewriteCond     %{SSL:SSL_CLIENT_VERIFY} !^SUCCESS$
    RewriteRule     (.*) http://other_domain.com [R]
</Directory>