V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
V2EX 提问指南
hqlf6rqieee3
V2EX  ›  问与答

求 nginx 双向认证+https 的方案

  •  
  •   hqlf6rqieee3 · 2015-12-26 00:26:45 +08:00 · 3326 次点击
    这是一个创建于 3242 天前的主题,其中的信息可能已经有所发展或是发生改变。

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

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

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

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

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

    跪谢

    10 条回复    2015-12-27 02:21:40 +08:00
    xuan880
        1
    xuan880  
       2015-12-26 01:38:07 +08:00 via Android   ❤️ 1
    v2ex 上面有过类似帖子,用户证书可以用沃通的免费 email 证书代替。
    ti
        2
    ti  
       2015-12-26 09:52:44 +08:00   ❤️ 1
    客户端认证需要浏览器信任????
    码农也不是很专业啊。。。
    网上一搜一大把。。
    经验:客户不需要信任你的自签名证书的 CA ,只需要有你自签名 CA 办法的客户证书和密钥就能完成双向认证。。。
    rex1901
        3
    rex1901  
       2015-12-26 09:58:13 +08:00   ❤️ 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
       2015-12-26 12:14:44 +08:00
    @rex1901 谢谢,请问,如果用沃通的 email 证书,那我如何来验证这个是我授权的员工访问的,而不是随意一个人注册的未经我授权的沃通 email 证书 来 访问网站呢
    hqlf6rqieee3
        5
    hqlf6rqieee3  
    OP
       2015-12-26 12:14:55 +08:00
    @xuan880 谢谢,请问,如果用沃通的 email 证书,那我如何来验证这个是我授权的员工访问的,而不是随意一个人注册的未经我授权的沃通 email 证书 来 访问网站呢
    rex1901
        6
    rex1901  
       2015-12-26 13:28:48 +08:00   ❤️ 1
    @hqlf6rqieee3 $ssl_client_s_dn 这个变量中包含证书的 CN ,可以加在 log_format 里面
    ti
        7
    ti  
       2015-12-26 16:38:59 +08:00   ❤️ 1
    @hqlf6rqieee3 所以你需要自签名
    hqlf6rqieee3
        8
    hqlf6rqieee3  
    OP
       2015-12-26 22:59:36 +08:00
    @rex1901 谢谢
    @ti 谢谢

    那我 如果用沃通 email 证书,用公司域名邮箱来注册是不是就好了呢,给每个员工一个 公司的域名邮箱,然后 $ssl_client_s_dn 里面判断 证书的域名是不是公司域名,这样是不是就可以了呢
    hqlf6rqieee3
        9
    hqlf6rqieee3  
    OP
       2015-12-26 23:41:41 +08:00
    @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  
       2015-12-27 02:21:40 +08:00 via Android
    @hqlf6rqieee3 nginx 我也不懂 不过这篇文章介绍了通过证书序列号进行验证的方法。 http://www.cnblogs.com/lwm-1988/archive/2012/04/25/2470195.html
    关于   ·   帮助文档   ·   博客   ·   API   ·   FAQ   ·   实用小工具   ·   2701 人在线   最高记录 6679   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 47ms · UTC 09:32 · PVG 17:32 · LAX 01:32 · JFK 04:32
    Developed with CodeLauncher
    ♥ Do have faith in what you're doing.