由于本人对 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 ,你只需要信任他不会做傻事就可以了,因为他没有办法做坏事而不留下证据。
1
imlonghao673 2017-02-27 10:19:21 +08:00 via Android
我的结论是,申请证书时提交 CSR 申请即可,自己保管好私钥,不要要他们代为生成
|
2
cy18 OP @imlonghao673 对,提交 csr 这种方式才安全,但是有的 CA 没这个选项
|
3
coo 2017-02-27 10:22:15 +08:00
私钥应该是自己生成的,你用的那两家流程有问题。
|
4
cnbeining 2017-02-27 10:22:52 +08:00
> 申请证书
> 不能自己上传 CSR 您有可能是假 CA 的受害者 |
5
msg7086 2017-02-27 10:23:25 +08:00
「里面包括私钥,公钥跟签名文件。」
这本来就是违反常理的行为。私钥是所有者的证明, CA 生成私钥,这张证书拥有者当然是 CA 而不是你,都轮不到你称这张证书是「你的证书」。 另外这也不是「一般 CA 」。我还没怎么见过一般 CA 是自己生成私钥的。 |
6
cy18 OP |
7
jybox 2017-02-27 10:34:27 +08:00
我之前发过一些帖子 https://www.v2ex.com/t/235216
主要的观点是,如果有一家 CA 签发的过程非常简单,那么这个 CA 就是体系中最薄弱的环节(因为在操作系统和浏览器看来,所有已经信任的 CA 签的证书在一般情况下没什么区别)。 |
8
AstroProfundis 2017-02-27 10:38:41 +08:00
很多证书代理商会提供免费的在线生成证书工具,给不懂怎么搞的小白用户解决生成私钥的麻烦
但你都能意识到这里流程有安全风险了,就不应该使用在线工具,而是自己在安全的系统环境中生成私钥,只把 CSR 提交上去就行了 所以要么是你说的那两家 CA 太弱乱搞,要么是你自己没找到单独提交 CSR 的入口... |
9
RqPS6rhmP3Nyn3Tm 2017-02-27 10:40:37 +08:00 via iPhone
其实 LE 也有多种签发证书的途径
并不一定需要 CSR |
10
tcdw 2017-02-27 11:05:13 +08:00 via Android
|
11
msg7086 2017-02-27 11:08:40 +08:00
|
12
gpw1987 2017-02-27 11:26:08 +08:00
其实对于 https 我更多的就是看个绿锁。而且一般的 blog 之类的重要性也不高。真正对网络的加密性有很高要求的,估计专门有这方面的团队吧。
|
13
cy18 OP |
14
hjc4869 2017-02-27 11:48:19 +08:00
确实有很多来历不明的免费 https 证书,是提交申请验证之后直接把公钥+私钥用 Email 发给你。
对于这种来历不明的免费证书,除了“不用”之外并没有别的选择…… |
15
dallaslu 2017-02-27 11:49:56 +08:00
说说那两家 CA 的名字吧
|
17
rrfeng 2017-02-27 12:13:56 +08:00
HTTPS 的唯一的基石就是 CA 是可信的,其他都是算法保证可信的。
如果 CA 想干坏事,任何形式都避免不了。 |
18
kindjeff 2017-02-27 12:18:22 +08:00
腾讯云的免费证书就是这样的!直接就在一个页面上让我下载公钥和私钥,吓得我都不敢从浏览器上下载下来,但是又没有途径直接放到腾讯云服务器上。
|
20
chromee 2017-02-27 12:36:42 +08:00 via Android
startssl 和以前的沃通都是可以选择用自己的 csr 或者系统帮你生成的
腾讯云这样也没办法,毕竟腾讯云不是 ca 就是个代理 |
21
julyclyde 2017-02-27 14:00:10 +08:00
正规的 CA 有两种做法:
浏览器里 enroll (貌似只有 IE+Windows Crypt service provider 组合才能支持?求证) 提交 CSR |
22
bobylive 2017-02-27 14:06:30 +08:00 via Android
正規 CA 都是自己生成私鑰,然後提交 CSR , CA 驗證域名所有人,然後給你域名所有人郵箱發簽發好的證書。證書體系就是基於根 CA 絕對可信,如果根 CA 都不可信的話,證書體系也就坍塌了。
|
23
Quaintjade 2017-02-27 14:18:23 +08:00
沃通免费证书刚开始时可以自己提交 CSR ,后来好像是去掉了,记不清了。
腾讯云好像就是直接发给你私钥和公钥,更糟糕的是连吊销都吊销不了(人工服务也不行,不知现在有没有改变)。 |
24
tcdw 2017-02-27 18:15:49 +08:00 via Android
@gamexg 我记得只有去沃通官网直接申请才有自己提交 CSR 的选项,而且也不算非常明显(虽然确实在选项里)。
|
25
sinv 2017-02-27 22:52:15 +08:00 via iPhone
政府要求具有监听的能力,这是写到法规中的,要求 CA 掌握用于加密用途的密钥。
所以只要申请的证书具有通信加密功能的话, CA 那边必须保有你的私钥,否则 CA 是违规的。 |
26
sinv 2017-02-28 00:31:02 +08:00
#25 不好意思,我说跑题了
|
27
ryd994 2017-02-28 02:27:54 +08:00 via Android
CA 真的全靠自觉
提交 CSR 的标准流程只是为了防止传输过程中泄密而已 真要有心, CA 左手右手签一张,你的 CSR 又有什么用 当然,标准流程都不遵守的肯定不可信 理论上来说, CA 是签证书有连续的 serial number ,还有 transparency ,签了就会知道 实际上还是有心搞你你也没办法 Google 那次是 chrome 上报才知道的 |
28
cy18 OP @ryd994 每张证书不是都有 SHA1 的指纹么- -CA 如果左手给我一张右手自己签一张,右手那张指纹肯定不一样的,用来通信被截获的话 CA 的信用就崩塌了- -
|
29
ryd994 2017-03-02 02:19:12 +08:00 via Android
|