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

nginx 双向认证的情况下,获取用户登陆时提交的证书,并在 nginx 中鉴权

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

    http://www.v2ex.com/t/246219
    这是我上一个求助帖

    最终打算,用 沃通 的 email 证书来作为双向认证的客户端证书

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

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

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

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

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

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

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

    谢谢大家

    9 条回复    2015-12-27 11:48:09 +08:00
    yeyeye
        1
    yeyeye  
       2015-12-27 00:53:59 +08:00   ❤️ 1
    楼猪可能误会了,并不是客户端有一个 email 证书就能登录任意开启了双向认证的网站,这个是互相对应的、、

    一定要你的服务器,把这个客户端证书加入到服务器的设置里,它才能访问你的网站,否则是连接不上的。也就是无需做什么后缀判断,明白吗
    hqlf6rqieee3
        2
    hqlf6rqieee3  
    OP
       2015-12-27 00:57:17 +08:00
    @yeyeye 谢谢 比如 我用 [email protected] 的这个邮箱 在 沃通 注册了一个 邮箱证书,那么 ,我应该在服务器上如何做设置呢,我用的是 nginx 谢谢
    oott123
        3
    oott123  
       2015-12-27 00:58:15 +08:00   ❤️ 1
    一楼说得好像没错
    不过楼主的需求也有道理,可以搜索一下 nginx ssl common name
    oott123
        4
    oott123  
       2015-12-27 00:59:27 +08:00
    不对 一楼好像说得有问题 并没有什么相互对应关系的 _(:з」∠)_ 我眼花了
    ryd994
        5
    ryd994  
       2015-12-27 01:22:47 +08:00 via Android   ❤️ 1
    我说一个已知有效的简单办法,可能要被楼下喷
    自建 CA 给员工签证书,设置 ssl_trusted_certificate 为这个 CA 就行
    内部使用而不需要公众信任的话没有问题。前提是 PKI CA 整个一套流程要做齐,特别是 revoke 相关的,私钥千万冷储存
    另外,你这个需求其实限制内网访问更方便。员工出差的话就用 VPN ,这才是 VPN 本来的用途。
    ryd994
        6
    ryd994  
       2015-12-27 01:25:50 +08:00 via Android   ❤️ 1
    原帖 @rex1901 不是连配置都给出来了么。
    用 wosign 的话把 wosign 的根证书作为 ssl_trusted_certificate
    ooxxcc
        7
    ooxxcc  
       2015-12-27 01:32:15 +08:00   ❤️ 1
    基本就是楼上说的

    客户端鉴定服务端用沃通的证书,服务端鉴定客户端用自己生成的 CA 签发的证书

    其实可以参考自建 anyconnect 证书登陆什么的
    nbndco
        8
    nbndco  
       2015-12-27 09:26:24 +08:00   ❤️ 1
    你自己生成 CA 自己签证书,客户端验证的证书不需要什么信任不信任的。
    服务器的证书和客户端的证书不需要是同一个 CA 。
    wdlth
        9
    wdlth  
       2015-12-27 11:48:09 +08:00   ❤️ 1
    证书认证成功后, Nginx 的 $ssl_client_verify 会变成 "SUCCESS",$ssl_client_s_dn 会变成客户端证书的主题(Subject),$ssl_client_serial 会变成证书的序列号,剩下的你要怎么判断看你了,在 Nginx 或者传到后端处理也行。

    比如可以通过序列号在数据库中匹配用户,这样就算是相同 CA 的证书也弄混不了,同时可以方便的辨别用户。
    关于   ·   帮助文档   ·   博客   ·   API   ·   FAQ   ·   实用小工具   ·   2628 人在线   最高记录 6679   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 22ms · UTC 07:31 · PVG 15:31 · LAX 23:31 · JFK 02:31
    Developed with CodeLauncher
    ♥ Do have faith in what you're doing.