当发生错误时,我想创建一个静态页面而不是默认的“ssl_error_handshake_failure_alert”页面,例如当客户端不发送任何证书时。
我该怎么做?有什么想法吗?
谢谢
答案1
抱歉,一年后才发现这个问题。您可以通过结合使用“SSLVerifyClient 可选”和“SSLRequire”来解决此问题,而无需编写脚本。在这种情况下,SSL 握手成功,因为证书只是可选的,但是,在稍后的流程中,SSLRequire 语句会证明它是强制性的...
喜欢:
<Location /somewhere>
SSLRequireSSL
SSLVerifyClient optional
SSLVerifyDepth 10
SSLRequire %{SSL_CLIENT_I_DN_CN} eq "YOURSELF"
ErrorDocument 403 "!FORBIDDEN!"
</Location>
答案2
HTTPS 就是 HTTP里面SSL 隧道,因此如果 SSL 协商失败,服务器和客户端之间的 HTTP 对话甚至还没有开始。
事实上,在这种情况下,错误页面是由客户端的浏览器生成的,那么您无法在服务器端更改此页面。
答案3
将您的位置设置为 sslverifyclient 可选(apache)。示例
<Location /resources/protected/>
SSLOptions +StdEnvVars
SSLVerifyClient optional
</Location>
现在,该位置的脚本将使用如下环境变量设置其环境:这些。如果 Apache 能够进行客户端身份验证,那么您可以执行类似以下的测试
if ( $ENV{SSL_CLIENT_S_DN_CN} && SSL_CLIENT_I_DN == "Blah issuer")
echo" we are good"
else
echo "You need to enrol for a cert.. Please contact admin @ blah"
因此,经过身份验证的人将看到“我们很好”这句话,而其他人将看到注册消息。
我希望这有帮助!