V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
cy18
V2EX  ›  SSL

[瞎想]关于 HTTPS 证书的安全性

  •  1
     
  •   cy18 · 2017-02-27 10:15:38 +08:00 · 3730 次点击
    这是一个创建于 2832 天前的主题,其中的信息可能已经有所发展或是发生改变。

    由于本人对 SSL 的加密理解是半吊子的,有什么说错了高手帮忙纠正一下。

    前段时间用了 Let's encrypt 搞了个证书,发现环节跟其他网站申请证书的环节有点不一样,然后有了现在的瞎想。先说结论:一般的 CA 签发证书的流程不安全,只有 LE ( let's encrypt )这种才安全。

    首先现在的 https 安全体系最薄弱的一个环节的就是对 CA 的信任,如果信任列表里面的 CA 乱签发证书,搞中间人攻击,那安全性就无从谈起了。但是作为一个有公信的机构,排除道德不说, CA 最害怕的是作恶被抓住证据,比如之前有一家 CA(忘记名字了)私自签发了 Google 的证书然后被截获了,这对 CA 的公信力而言是有很大的影响的。

    现在假设 CA 都符合下面几个条件。第一,他很聪明,不犯任何会被抓到证据的错误,也就是说他不会做傻事。第二,他很坏,想方设法实施中间人攻击,其中包括偷窥数据与篡改数据两个方面,也就是说他想做坏事。

    我用过三个免费 HTTPS 证书(没用过收费的的 https ),除了 let's encrypt ,另外两个的签发流程是, 1.注册一个账号,提交我的个人信息。 2.验证域名所有权,可以通过 DNS 记录也可以通过网站上目录放一个特定的东西。 3.CA 签发证书,然后我从 CA 的网站上下载签发好的证书,里面包括私钥,公钥跟签名文件。

    而 let's encrypt 的流程是 1.自己生成一对私钥跟公钥。 2.LE 对域名所有权进行验证,主要是通过 HTTP 协议进行一些 challenge 。 3.LE 对公钥进行签名,然后我下载签名文件。

    两个流程最大的区别在于第一个流程的私钥是 CA 生成了发给我的,而第二个流程是我自己生成的。

    现在问题来了,如果这个 CA 跟 ISP 狼狈为奸的话,他可以在不用签发新证书的情况下对我实现中间人攻击,如果只是窥探数据的话完全不会留下痕迹。如果篡改了数据的话,除非客户端通过其他途径跟服务端校对数据,不然也不会发现问题。

    对于第二个流程而言而言,由于只有我自己拥有私钥,除非 LE 签发一个新的证书,不然他无法参与中间人攻击。但是,使用新签发的证书实施中间人攻击是会留下证据的,显然聪明的 CA 不会做出这种事。

    对于采用了第一种流程的 CA ,你除了信任他不会做傻事,还得信任他不会做坏事。而对于 LE ,你只需要信任他不会做傻事就可以了,因为他没有办法做坏事而不留下证据。

    30 条回复    2017-03-02 10:24:48 +08:00
    imlonghao673
        1
    imlonghao673  
       2017-02-27 10:19:21 +08:00 via Android
    我的结论是,申请证书时提交 CSR 申请即可,自己保管好私钥,不要要他们代为生成
    cy18
        2
    cy18  
    OP
       2017-02-27 10:21:12 +08:00
    @imlonghao673 对,提交 csr 这种方式才安全,但是有的 CA 没这个选项
    coo
        3
    coo  
       2017-02-27 10:22:15 +08:00
    私钥应该是自己生成的,你用的那两家流程有问题。
    cnbeining
        4
    cnbeining  
       2017-02-27 10:22:52 +08:00
    > 申请证书
    > 不能自己上传 CSR

    您有可能是假 CA 的受害者
    msg7086
        5
    msg7086  
       2017-02-27 10:23:25 +08:00
    「里面包括私钥,公钥跟签名文件。」

    这本来就是违反常理的行为。私钥是所有者的证明, CA 生成私钥,这张证书拥有者当然是 CA 而不是你,都轮不到你称这张证书是「你的证书」。

    另外这也不是「一般 CA 」。我还没怎么见过一般 CA 是自己生成私钥的。
    cy18
        6
    cy18  
    OP
       2017-02-27 10:25:30 +08:00
    @cnbeining
    @coo 难道是因为免费证书的关系么。一个是很早以前申请过 start SSL ,另外一个是前段时间在腾讯云上申请的免费 https 证书...
    jybox
        7
    jybox  
       2017-02-27 10:34:27 +08:00
    我之前发过一些帖子 https://www.v2ex.com/t/235216
    主要的观点是,如果有一家 CA 签发的过程非常简单,那么这个 CA 就是体系中最薄弱的环节(因为在操作系统和浏览器看来,所有已经信任的 CA 签的证书在一般情况下没什么区别)。
    AstroProfundis
        8
    AstroProfundis  
       2017-02-27 10:38:41 +08:00
    很多证书代理商会提供免费的在线生成证书工具,给不懂怎么搞的小白用户解决生成私钥的麻烦
    但你都能意识到这里流程有安全风险了,就不应该使用在线工具,而是自己在安全的系统环境中生成私钥,只把 CSR 提交上去就行了
    所以要么是你说的那两家 CA 太弱乱搞,要么是你自己没找到单独提交 CSR 的入口...
    RqPS6rhmP3Nyn3Tm
        9
    RqPS6rhmP3Nyn3Tm  
       2017-02-27 10:40:37 +08:00 via iPhone
    其实 LE 也有多种签发证书的途径
    并不一定需要 CSR
    tcdw
        10
    tcdw  
       2017-02-27 11:05:13 +08:00 via Android
    @msg7086 我记得沃通的免费 SSL 证书就是这样的。。
    而且在景安申请的话。。是只有这一种途径的
    并没有找到可以自己提交 CSR 的方法
    msg7086
        11
    msg7086  
       2017-02-27 11:08:40 +08:00
    @tcdw 我痛在我眼里根本就不算是一家正常的 CA 。

    @cy18 StartSSL 难道不是客户提交 CSR 么?
    最多是用浏览器生成证书吧,浏览器生成证书是本地生成的,只有公钥会被发送到网络上。
    gpw1987
        12
    gpw1987  
       2017-02-27 11:26:08 +08:00
    其实对于 https 我更多的就是看个绿锁。而且一般的 blog 之类的重要性也不高。真正对网络的加密性有很高要求的,估计专门有这方面的团队吧。
    cy18
        13
    cy18  
    OP
       2017-02-27 11:39:57 +08:00 via Android
    @msg7086 start SSL 是很久以前用的了,估计我记错了

    @gpw1987 https 加密登录密码这功能实打实的啊,不然同一个局域网或者假特点什么的很容易就嗅探到了
    hjc4869
        14
    hjc4869  
       2017-02-27 11:48:19 +08:00
    确实有很多来历不明的免费 https 证书,是提交申请验证之后直接把公钥+私钥用 Email 发给你。
    对于这种来历不明的免费证书,除了“不用”之外并没有别的选择……
    dallaslu
        15
    dallaslu  
       2017-02-27 11:49:56 +08:00
    说说那两家 CA 的名字吧
    gamexg
        16
    gamexg  
       2017-02-27 11:54:22 +08:00
    @tcdw 我记得沃通有两个方式,一个是对方替你生成私钥,一个是自己生成私钥。
    感觉靠谱的都应该支持自己生成私钥。
    rrfeng
        17
    rrfeng  
       2017-02-27 12:13:56 +08:00
    HTTPS 的唯一的基石就是 CA 是可信的,其他都是算法保证可信的。

    如果 CA 想干坏事,任何形式都避免不了。
    kindjeff
        18
    kindjeff  
       2017-02-27 12:18:22 +08:00
    腾讯云的免费证书就是这样的!直接就在一个页面上让我下载公钥和私钥,吓得我都不敢从浏览器上下载下来,但是又没有途径直接放到腾讯云服务器上。
    cy18
        19
    cy18  
    OP
       2017-02-27 12:23:15 +08:00 via Android
    @kindjeff 不安全归不安全,不过服务器都在他手上,他想干嘛还不是没办法...
    chromee
        20
    chromee  
       2017-02-27 12:36:42 +08:00 via Android
    startssl 和以前的沃通都是可以选择用自己的 csr 或者系统帮你生成的
    腾讯云这样也没办法,毕竟腾讯云不是 ca 就是个代理
    julyclyde
        21
    julyclyde  
       2017-02-27 14:00:10 +08:00
    正规的 CA 有两种做法:
    浏览器里 enroll (貌似只有 IE+Windows Crypt service provider 组合才能支持?求证)
    提交 CSR
    bobylive
        22
    bobylive  
       2017-02-27 14:06:30 +08:00 via Android
    正規 CA 都是自己生成私鑰,然後提交 CSR , CA 驗證域名所有人,然後給你域名所有人郵箱發簽發好的證書。證書體系就是基於根 CA 絕對可信,如果根 CA 都不可信的話,證書體系也就坍塌了。
    Quaintjade
        23
    Quaintjade  
       2017-02-27 14:18:23 +08:00
    沃通免费证书刚开始时可以自己提交 CSR ,后来好像是去掉了,记不清了。

    腾讯云好像就是直接发给你私钥和公钥,更糟糕的是连吊销都吊销不了(人工服务也不行,不知现在有没有改变)。
    tcdw
        24
    tcdw  
       2017-02-27 18:15:49 +08:00 via Android
    @gamexg 我记得只有去沃通官网直接申请才有自己提交 CSR 的选项,而且也不算非常明显(虽然确实在选项里)。
    sinv
        25
    sinv  
       2017-02-27 22:52:15 +08:00 via iPhone
    政府要求具有监听的能力,这是写到法规中的,要求 CA 掌握用于加密用途的密钥。
    所以只要申请的证书具有通信加密功能的话, CA 那边必须保有你的私钥,否则 CA 是违规的。
    sinv
        26
    sinv  
       2017-02-28 00:31:02 +08:00
    #25 不好意思,我说跑题了
    ryd994
        27
    ryd994  
       2017-02-28 02:27:54 +08:00 via Android
    CA 真的全靠自觉
    提交 CSR 的标准流程只是为了防止传输过程中泄密而已
    真要有心, CA 左手右手签一张,你的 CSR 又有什么用
    当然,标准流程都不遵守的肯定不可信

    理论上来说, CA 是签证书有连续的 serial number ,还有 transparency ,签了就会知道
    实际上还是有心搞你你也没办法
    Google 那次是 chrome 上报才知道的
    cy18
        28
    cy18  
    OP
       2017-03-01 12:16:07 +08:00
    @ryd994 每张证书不是都有 SHA1 的指纹么- -CA 如果左手给我一张右手自己签一张,右手那张指纹肯定不一样的,用来通信被截获的话 CA 的信用就崩塌了- -
    ryd994
        29
    ryd994  
       2017-03-02 02:19:12 +08:00 via Android
    @cy18 前提是有人会查
    正常人能注意 https 就已经很难得了
    之前盗签 Google 的事,是因为 chrome 内置了 Google 的指纹,才上报的
    cy18
        30
    cy18  
    OP
       2017-03-02 10:24:48 +08:00
    @ryd994 Certificate Transparency 哪天像 https 一样普及了就好了- -
    关于   ·   帮助文档   ·   博客   ·   API   ·   FAQ   ·   实用小工具   ·   1607 人在线   最高记录 6679   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 27ms · UTC 16:56 · PVG 00:56 · LAX 08:56 · JFK 11:56
    Developed with CodeLauncher
    ♥ Do have faith in what you're doing.