当发生错误时,我想创build一个静态页面而不是默认的“ssl_error_handshake_failure_alert”页面,例如当客户端不发送任何证书时。
我怎样才能做到这一点? 任何想法?
thankss
对不起一年后挖掘这个。 您可以通过组合“SSLVerifyClient optional”和“SSLRequire”来解决您的问题而无需编写脚本。 在这种情况下,SSL握手会成功,因为证书只是可选的,然而,事实certificate这是强制性的,SSLRequire语句在稍后的过程中…
喜欢:
<Location /somewhere> SSLRequireSSL SSLVerifyClient optional SSLVerifyDepth 10 SSLRequire %{SSL_CLIENT_I_DN_CN} eq "YOURSELF" ErrorDocument 403 "!FORBIDDEN!" </Location>
HTTPS是SSL隧道内的HTTP,所以如果SSL关联失败,服务器和客户端之间的HTTP会话还没有开始。
事实上,在这种情况下,错误页面是由客户端的浏览器生成,那么您不能在服务器端更改此页面。
将您的位置设置为sslverifyclient可选(apache)。 一个例子
<Location /resources/protected/> SSLOptions +StdEnvVars SSLVerifyClient optional </Location>
现在在这个位置的一个scipt将会有env这样的环境variables。 如果Apache能够进行客户端身份validation,那么你可以做一个类似的testing
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"
所以一个authentication的人会看到“我们很好”的线,而其他人都会看到注册信息。
我希望这有帮助!