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

有朋友了解如何部署数字证书的双向认证吗

  •  
  •   QQ1685425675 · 2015-11-19 15:12:05 +08:00 · 2946 次点击
    这是一个创建于 3284 天前的主题,其中的信息可能已经有所发展或是发生改变。

    网站是用来远程办公的

    所以 希望只允许内部人访问

    虽然有了密码,但还是希望让系统更加牢固

    目前用的 startSSL 的免费证书一年

    可以防止简单拦截抓包

    现在想实现双向认证

    但是我在实际测试中,发现

    当我自己生成证书做双向认证的时候,浏览器的锁就不是绿色了,因为我自己生成的 ca ,不被本地信任,

    没有启用双向认证的时候,用的 startSSL 的证书,浏览器的锁是绿色的

    有没有办法,让浏览器的锁是绿色的,并且支持双向认证,并且不用把自己生产的 CA 加入本地信任呢

    我的环境是 linux nginx

    求指点

    17 条回复    2015-11-20 15:48:50 +08:00
    wdlth
        1
    wdlth  
       2015-11-19 16:09:18 +08:00   ❤️ 1
    在保证安全的前提下,可以把域名证书导入系统,因为域名证书也可以作为客户端身份验证。

    设置好验证深度的话,用同一个 CA 颁发的不同域名证书也可以,我测试用 SHA-1 的证书也可以登录 SHA-256 加密的,根证书都是 GlobalSign 的。
    ooxxcc
        2
    ooxxcc  
       2015-11-19 16:11:36 +08:00   ❤️ 1
    双向认证可以用两套证书的

    客户端认证服务器使用 startssl 的那一套
    服务器认证客户端使用自建的一套

    没在 nginx 里试过, anyconnect 里面是可以这样的, stunnel 也可以
    yeyeye
        3
    yeyeye  
       2015-11-19 22:04:32 +08:00   ❤️ 1
    我想请教一下

    服务器用可信 CA 签署证书 客户端用自签名签署 会出现楼主这样的情况吗?(或者楼主就是这样做的?)


    今天刚在另一个主题回复了,客户端证书你可以去沃通获得免费 3 年的电子邮件证书,应该每个都可以用来做客户端部分的验证。
    QQ1685425675
        4
    QQ1685425675  
    OP
       2015-11-19 22:50:21 +08:00
    @yeyeye 谢谢 你的意思是让公司的每个员工都去申请 沃通 的电子邮件证书吗,那如此的话,我就需要把 每个员工的 证书都存在服务器的信任列表里面,不然的话 系统无法识别这个人是不是经过授权的

    不过这样的话,会不会步骤就比较麻烦了,不知道 nginx 上是否有现成的方案
    QQ1685425675
        5
    QQ1685425675  
    OP
       2015-11-19 22:55:10 +08:00
    @wdlth 谢谢
    QQ1685425675
        6
    QQ1685425675  
    OP
       2015-11-19 22:55:18 +08:00
    @ooxxcc 谢谢
    yeyeye
        7
    yeyeye  
       2015-11-19 22:59:08 +08:00   ❤️ 1
    @QQ1685425675 我看了下别人的教程 应该是客户端证书的公钥提取出来吧,因为比较懒,所以没做过实验。关于用邮件证书去做验证也是很久之前听别人说的。

    但是这样确实实现了无需自己去搞什么自签名,都在完全信任的体系里。

    当然啦,自签名发放证书确实很方便
    wdlth
        8
    wdlth  
       2015-11-19 23:50:29 +08:00   ❤️ 1
    @QQ1685425675 WoSign 的证书做了 StartCom 的交叉验证,我认为 WoSign 的 Email 证书应该可以用于 StartCom 的客户端验证。

    你可以试试,在你的 https 站点的配置文件中 server 段加上:

    ssl_client_certificate /etc/ssl/ca-certs.pem;( StartCom 证书+WoSign 中间证书)
    ssl_verify_depth 3;(不行改 4 试试)
    ssl_verify_client optional;
    HowardMei
        9
    HowardMei  
       2015-11-20 00:00:09 +08:00   ❤️ 1
    为啥不直接 VPN?
    xenme
        10
    xenme  
       2015-11-20 00:10:23 +08:00 via iPhone   ❤️ 1
    全部自签,反正自己用,没证书直接拒绝了。再发个人证书
    datocp
        11
    datocp  
       2015-11-20 00:14:55 +08:00 via Android   ❤️ 1
    倒是经常用 stunnel ,按实例的话它都能把 google tcp 53 加密到本地,不知道 tcp 80 是否可行。然后它的 verify 3 就是用来对客户端证书进行认证用的,只是看起来还是不如浏览器方便。
    QQ1685425675
        12
    QQ1685425675  
    OP
       2015-11-20 12:02:12 +08:00
    @wdlth 那如此的话,是不是所有人,申请的 wosign 的 email 证书都可以登陆我公司的站点呀,应该有个地方可以设置一个判断,你让符合规则的 email 进入, 或者说 0-0

    用我们公司的域名邮箱,分配给员工,然后用域名邮箱来给员工申请证书,那如此的话,在 ngxin 里面,如何判断这个证书 email 里面的网址后缀呢,只有网址后缀是我们公司的网址,那么就让他通过,否则不通过
    QQ1685425675
        13
    QQ1685425675  
    OP
       2015-11-20 12:02:56 +08:00
    @HowardMei 感觉小公司用 vpn 不太好,成本比双向认证要高
    QQ1685425675
        14
    QQ1685425675  
    OP
       2015-11-20 12:03:45 +08:00
    @xenme 也想过全部自签,但是总感觉可能会留下安全隐患,怕把 ca 密钥弄丢什么的
    wdlth
        15
    wdlth  
       2015-11-20 12:28:17 +08:00   ❤️ 1
    @QQ1685425675 当然要进行判断,从客户端证书中取得信息,不然服务器怎么知道证书是谁的?

    $ssl_client_serial 证书序列号、$ssl_client_s_dn 证书的使用者。
    wdlth
        16
    wdlth  
       2015-11-20 12:31:12 +08:00   ❤️ 1
    这些数值是 Nginx 的,不是 PHP 的。可以用 fastcgi_param 传到 PHP ,在那里判断,也可以在 Nginx 里面判断,看你怎么实现。
    xenme
        17
    xenme  
       2015-11-20 15:48:50 +08:00   ❤️ 1
    @QQ1685425675 CA 签完证书就离线好了。或者你们就用 two-factor 也行。全部采用商业方案。
    关于   ·   帮助文档   ·   博客   ·   API   ·   FAQ   ·   实用小工具   ·   1836 人在线   最高记录 6679   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 26ms · UTC 16:44 · PVG 00:44 · LAX 08:44 · JFK 11:44
    Developed with CodeLauncher
    ♥ Do have faith in what you're doing.