静态页面,而不是默认的“ssl_error_handshake_failure_alert”

静态页面,而不是默认的“ssl_error_handshake_failure_alert”

当发生错误时,我想创建一个静态页面而不是默认的“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"

因此,经过身份验证的人将看到“我们很好”这句话,而其他人将看到注册消息。

我希望这有帮助!

相关内容