V2EX = way to explore
V2EX 是一个关于分享和探索的地方
Sign Up Now
For Existing Member  Sign In
hqlf6rqieee3
V2EX  ›  问与答

求 nginx 双向认证+https 的方案

  •  
  •   hqlf6rqieee3 · Dec 26, 2015 · 4057 views
    This topic created in 3779 days ago, the information mentioned may be changed or developed.

    研究了好多天
    还是没有解决

    总是有瑕疵
    https 已经完美实现,用的是购买而来的一个普通证书
    可是双向认证,似乎要 要求我的 证书提供商帮我生成客户端证书,不过我看过 对方的报价,太贵了,按照客户端数量收费

    如果自己生成证书来实现双向认证,不被浏览器信任

    我看了一些帖子,有人说 可以 实现用买来的证书做网站 https ,同时可以用自己生成证书来做双向认证的验证,但是并没有细说具体方法,我也在网上找了好久

    始终没有找到可行的方案
    大家有办法吗

    跪谢

    10 replies    2015-12-27 02:21:40 +08:00
    xuan880
        1
    xuan880  
       Dec 26, 2015 via Android   ❤️ 1
    v2ex 上面有过类似帖子,用户证书可以用沃通的免费 email 证书代替。
    ti
        2
    ti  
       Dec 26, 2015   ❤️ 1
    客户端认证需要浏览器信任????
    码农也不是很专业啊。。。
    网上一搜一大把。。
    经验:客户不需要信任你的自签名证书的 CA ,只需要有你自签名 CA 办法的客户证书和密钥就能完成双向认证。。。
    rex1901
        3
    rex1901  
       Dec 26, 2015   ❤️ 2
    服务器证书:客户端为 CA Root 证书,服务器证书+私匙,如果服务器证书不是客户端的 CA 证书颁发,即不信任,所以必须购买。
    客户端证书:客户端为证书+私匙,服务器为 CA Root ,这个 CA Root 自己生成即可,也就是说客户端证书可以用自己生成的 CA Root 签发,想怎么搞都行。
    只是 nginx 中几行设置而已:
    ssl_verify_client on;
    ssl_verify_depth 2;
    ssl_client_certificate /your/Ca/Root.crt;
    proxy_set_header X-SSL-Client-Cert $ssl_client_cert;

    当然也可以用沃通的免费 email 证书,也就是说, ssl_client_certificate 要设置成沃通 email 的 Root 。
    hqlf6rqieee3
        4
    hqlf6rqieee3  
    OP
       Dec 26, 2015
    @rex1901 谢谢,请问,如果用沃通的 email 证书,那我如何来验证这个是我授权的员工访问的,而不是随意一个人注册的未经我授权的沃通 email 证书 来 访问网站呢
    hqlf6rqieee3
        5
    hqlf6rqieee3  
    OP
       Dec 26, 2015
    @xuan880 谢谢,请问,如果用沃通的 email 证书,那我如何来验证这个是我授权的员工访问的,而不是随意一个人注册的未经我授权的沃通 email 证书 来 访问网站呢
    rex1901
        6
    rex1901  
       Dec 26, 2015   ❤️ 1
    @hqlf6rqieee3 $ssl_client_s_dn 这个变量中包含证书的 CN ,可以加在 log_format 里面
    ti
        7
    ti  
       Dec 26, 2015   ❤️ 1
    @hqlf6rqieee3 所以你需要自签名
    hqlf6rqieee3
        8
    hqlf6rqieee3  
    OP
       Dec 26, 2015
    @rex1901 谢谢
    @ti 谢谢

    那我 如果用沃通 email 证书,用公司域名邮箱来注册是不是就好了呢,给每个员工一个 公司的域名邮箱,然后 $ssl_client_s_dn 里面判断 证书的域名是不是公司域名,这样是不是就可以了呢
    hqlf6rqieee3
        9
    hqlf6rqieee3  
    OP
       Dec 26, 2015
    @xuan880
    @ti
    @rex1901
    谢谢大家
    最终打算,用 沃通 的 email 证书来作为双向认证的客户端证书

    公司的域名是 www.baidu.com [假设]

    那么,我给每个员工申请一个 [email protected] 的域名邮箱,然后用这个域名邮箱去申请沃通的 email 证书
    老王的证书是 [email protected]
    老张的证书是 [email protected]
    老刘的证书是 [email protected]

    然后 在 nginx 里面,获取当前访客的证书信息,如果访客证书使用的邮箱后缀是 baidu.com ,那么就通过,否则不通过

    目前我网上搜了下资料,好像 nginx 本身无法做这个判断,但是我感觉 nginx 应该是可以的,但是我不知道如何来实现

    我希望 nginx 本身完成这个基本的判断,不希望没有经过授权的人访问 web 的任何信息,所以希望不合格的用户直接被 nginx 挡在门外

    所以来此求助各位大神,谢谢

    每个回答有意义的朋友我都会帮忙点个 感谢

    谢谢大家
    xuan880
        10
    xuan880  
       Dec 27, 2015 via Android
    @hqlf6rqieee3 nginx 我也不懂 不过这篇文章介绍了通过证书序列号进行验证的方法。 http://www.cnblogs.com/lwm-1988/archive/2012/04/25/2470195.html
    About   ·   Help   ·   Advertise   ·   Blog   ·   API   ·   FAQ   ·   Solana   ·   2360 Online   Highest 6679   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 36ms · UTC 15:48 · PVG 23:48 · LAX 08:48 · JFK 11:48
    ♥ Do have faith in what you're doing.