如果 Nginx 端强制要求客户端提交证书的话,一旦因为客户端原因验证失败, Nginx 就会返回其丑无比的一个页面。
仅当ssl_verify_client optional
的时候可以使用$ssl_client_verify
进行判断然后跳转到好看的页面,此时 Nginx 不强制要求客户端提交证书,于是在要求只能用证书登录的场合就只能用ssl_verify_client on
。
然而ssl_verify_client on
的时候上面那个判断跳转逻辑就不能用了,于是还是返回其丑无比的页面。
请问如何破?详细情况麻烦移步看看我这篇文章。
感谢 @orzfly 的解答 此问题已破
server 段加入error_page 495 496 497 https://www.google.com;
即可
后面的ssl_client_verify
判断不需要了
http://nginx.org/en/docs/http/ngx_http_ssl_module.html#errors
1
virusdefender 2016-02-06 21:27:27 +08:00
自定义 400 页面模板试试呢
|
2
Citrus 2016-02-06 21:30:22 +08:00 via iPhone
用 optional 然后后端验证是唯一的方法,否则 SSL 握手阶段根本就没完成,也就不存在返回错误页面之类的问题。
|
3
dommyet OP @virusdefender 你是说 error_page 400 xxx.html 这样吗 一开始就试过的了 不行的
@Citrus 可以返回一个别的网页比如 return 303 https://www.google.com 这样 试过了是可以的 但是说到验证的问题好像后端验证确实是目前唯一可行的办法 |
4
cevincheung 2016-02-06 23:56:09 +08:00
如果为 optional ,
在 /login 不用双向验证 在 /trust-login 强制双向验证。 怎么搞? |
5
shyling 2016-02-07 02:27:26 +08:00 via iPad
在你的 if 里面使用
try_files 你的不丑的页面的路径 =400; |
7
orzfly 2016-02-07 17:07:46 +08:00 1
http://nginx.org/en/docs/http/ngx_http_ssl_module.html#errors
495 an error has occurred during the client certificate verification; 496 a client has not presented the required certificate; 497 a regular request has been sent to the HTTPS port. 定义这几个错误代号的错误页吧。 |
8
dommyet OP @Citrus return 303 是可以的 https://forum.nginx.org/read.php?11,240460,240460 我也测试过是 ok 的 但是只能是 optional 并不强制要求提交证书 所以对我来说没什么用
|
9
dommyet OP @orzfly 正解 此问题已破 server 定义 error_page 495 496 497 https://www.google.com 即可 感谢
|