使用 letsencrypt 将网站弄成 https 的之后,如何做双向的 ssl 认证 - V2EX
KoleHank
V2EX    SSL

使用 letsencrypt 将网站弄成 https 的之后,如何做双向的 ssl 认证

  •  
  •   KoleHank 2016-11-08 10:01:55 +08:00 8510 次点击
    这是一个创建于 3310 天前的主题,其中的信息可能已经有所发展或是发生改变。

    用 letsencrypt 申请了一个免费的 ssl 证书,部署到网站上了,目前 https 访问正常,但是想进一步弄个 ssl 的双向认证,该如何处理?

    ssl 双向认证的话客户端肯定是需要证书的,如果服务器证书使用 letsencrypt 的话,我没搞明白这个客户端证书由谁生成,怎么生成。

    21 条回复    2016-11-09 02:17:59 +08:00
    RecursiveG
        1
    RecursiveG  
       2016-11-08 10:14:36 +08:00   1
    AlphaTr
        2
    AlphaTr  
       2016-11-08 10:43:03 +08:00
    letsencrypt 生成的是一对证书,公钥和私钥,公钥会在访问网站的时候发送到客户端,至于公钥发送到客户端这部分安全是由证书链的父级来签名的,再往上追溯,就是根证书了,根证书在操作系统安装的时候会内置到系统内;整个体系不是几句话能说清楚的,建议了解下整个非对称密码加密体系~
    KoleHank
        3
    KoleHank  
    OP
       2016-11-08 10:43:16 +08:00
    @RecursiveG 这个自己给自己签与 letsencrypt 申请的证书没有关系是么?我知道自己给自己签的时候,服务器端那边使用的也是自己生成的证书,然后客户端也导入自己生成的证书,这种方式我是知道。这种方式放公网访问的话不合适的吧,不会出现证书不可信的问题么
    47jm9ozp
        4
    47jm9ozp  
       2016-11-08 10:47:07 +08:00   2
    客户端用 letsencrypt ca 验证服务器证书

    服务器用自签 CA 验证客户端证书

    这是两个分别的过程,两个不同的证书链
    KoleHank
        5
    KoleHank  
    OP
       2016-11-08 10:50:52 +08:00
    @AlphaTr 整个体系确实是比较复杂,发帖之前看了半天的。感觉上我服务器端要使用 letsencrypt 的证书的话,做 ssl 双向认证,客户端得使用 letsencrypt 的父级来颁发证书才行,但是这个过程又不知道如何处理。不知道理解的对不对
    hhbcarl
        6
    hhbcarl  
       2016-11-08 10:54:52 +08:00   2
    KoleHank
        7
    KoleHank  
    OP
       2016-11-08 10:55:05 +08:00
    @ooxxcc 这样可以么?我去试一下看看
    KoleHank
        8
    KoleHank  
    OP
       2016-11-08 10:56:04 +08:00
    @hhbcarl 多谢,我去看看
    Tink
        9
    Tink  
    PRO
       2016-11-08 11:12:53 +08:00
    学习了, 这个用来配合 ttyd 什么的应该更安全了
    tinyproxy
        10
    tinyproxy  
       2016-11-08 11:49:20 +08:00
    http://nategood.com/client-side-certificate-authentication-in-ngi

    1. 服务端证书是给客户端校验服务端是否合法的
    2. 客户端证书是给服务器娇艳客户是否合法的
    3. 所以,自己拿 easyrsa 弄一个 PKI ,签个 ca 证书给服务器就行了,客户端这边在用自己的 PKI 签客户端证书就行了,当然有钱买个 PKI 服务也是不错的。
    vibbow
        11
    vibbow  
       2016-11-08 11:55:26 +08:00
    https://blog.vsean.net/post/194
    IIS 直接有选项开启就行了
    lslqtz
    nbsp;   12
    lslqtz  
       2016-11-08 11:57:20 +08:00
    部分 CA 提供免费的客户端证书,配合一起用可以,比如沃通和 StartSSL ,但是这两家快被吊销了。。。。
    RqPS6rhmP3Nyn3Tm
        13
    RqPS6rhmP3Nyn3Tm  
       2016-11-08 13:40:05 +08:00 via iPhone
    我选择 GPG ……
    lslqtz
        14
    lslqtz  
       2016-11-08 13:47:13 +08:00
    最近想了想,要做双向证书的登录验证,可以将一个自签根证书放在 web 服务端的信任双向认证 CA 列表。
    然后用一个没有验证的域名,在注册后签发证书下载安装。
    登录时由客户端访问一个指定的域名,这个指定的域名需要双向的验证,验证通过后返回个 Cookie 什么之类的就 ok
    ryd994
        15
    ryd994  
       2016-11-08 14:11:40 +08:00
    客户端的 CA 和服务端的 CA 不需要相同
    只要对方接受就可以
    比如 Nginx 可以用 ssl_client_certificate 来指定信任得 client CA
    http://nginx.org/en/docs/http/ngx_http_ssl_module.html#ssl_client_certificate
    kkzxak47
        16
    kkzxak47  
       2016-11-08 16:49:47 +08:00
    matsuz
        17
    matsuz  
       2016-11-08 17:02:39 +08:00   1
    双向认证其实就是你的电脑验证服务器的证书,服务器验证你电脑上的证书。

    而证书的验证方法,其实就是每个操作系统(或浏览器)都有自己的一个受信任证书列表,只有对方发送过来的证书在这个列表里面,或者是这个列表里面的某个证书签发的子证书,就可以通过验证。

    Let's Encrypt 的根证书通常的操作系统或浏览器都是信任的,可以直接通过验证。

    那么,最简单的方法: Let's Encrypt 的证书放服务器上,你只需要再搞一张自签名证书放到本机,然后把证书添加到服务器的受信任证书列表中就可以了
    forblackking
        18
    forblackking  
       2016-11-08 17:08:03 +08:00
    @hhbcarl Nginx 还是不支持 ssl_verify_client per location 么。。。
    hhbcarl
        19
    hhbcarl  
       2016-11-08 17:19:16 +08:00
    @forblackking 应该是吧,反正我在其文档上没看到
    KoleHank
        20
    KoleHank  
    OP
       2016-11-08 21:38:51 +08:00
    @hhbcarl 已经搞定,使用自签的可以达到我想要的效果。
    @matsuz 嗯,就是这个思路。
    ryd994
        21
    ryd994  
       2016-11-09 02:17:59 +08:00 via Android
    @forblackking 道理来讲,用什么证书握手时就确定了, HTTP 协议的 location 根本不知道啊
    可以用 ssl_client_fingerprint 判断
    关于     帮助文档     自助推广系统     博客     API     FAQ     Solana     5284 人在线   最高记录 6679       Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 26ms UTC 08:42 PVG 16:42 LAX 00:42 JFK 03:42
    Do have faith in what you're doing.
    ubao msn snddm index pchome yahoo rakuten mypaper meadowduck bidyahoo youbao zxmzxm asda bnvcg cvbfg dfscv mmhjk xxddc yybgb zznbn ccubao uaitu acv GXCV ET GDG YH FG BCVB FJFH CBRE CBC GDG ET54 WRWR RWER WREW WRWER RWER SDG EW SF DSFSF fbbs ubao fhd dfg ewr dg df ewwr ewwr et ruyut utut dfg fgd gdfgt etg dfgt dfgd ert4 gd fgg wr 235 wer3 we vsdf sdf gdf ert xcv sdf rwer hfd dfg cvb rwf afb dfh jgh bmn lgh rty gfds cxv xcv xcs vdas fdf fgd cv sdf tert sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf shasha9178 shasha9178 shasha9178 shasha9178 shasha9178 liflif2 liflif2 liflif2 liflif2 liflif2 liblib3 liblib3 liblib3 liblib3 liblib3 zhazha444 zhazha444 zhazha444 zhazha444 zhazha444 dende5 dende denden denden2 denden21 fenfen9 fenf619 fen619 fenfe9 fe619 sdf sdf sdf sdf sdf zhazh90 zhazh0 zhaa50 zha90 zh590 zho zhoz zhozh zhozho zhozho2 lislis lls95 lili95 lils5 liss9 sdf0ty987 sdft876 sdft9876 sdf09876 sd0t9876 sdf0ty98 sdf0976 sdf0ty986 sdf0ty96 sdf0t76 sdf0876 df0ty98 sf0t876 sd0ty76 sdy76 sdf76 sdf0t76 sdf0ty9 sdf0ty98 sdf0ty987 sdf0ty98 sdf6676 sdf876 sd876 sd876 sdf6 sdf6 sdf9876 sdf0t sdf06 sdf0ty9776 sdf0ty9776 sdf0ty76 sdf8876 sdf0t sd6 sdf06 s688876 sd688 sdf86