最近在研究把现有网站换成https,看了下SSL原理介绍,有一点不明白,既然https的本质是为了在通讯过程中讯息对称加密的方式传输,为什么浏览器不直接支持服务端自己生产的加密证书,加密证书只需要提供RSA的公钥不就好了?为什么需要花很多钱申请这个证书呢
最近在研究把现有网站换成https,看了下SSL原理介绍,有一点不明白,既然https的本质是为了在通讯过程中讯息对称加密的方式传输,为什么浏览器不直接支持服务端自己生产的加密证书,加密证书只需要提供RSA的公钥不就好了?为什么需要花很多钱申请这个证书呢
我看https主要的难点在于,怎么安全传输公钥的问题上,安全传输公钥后,就可以对,对称加密的密钥进行加密,安全的传输对称加密的密钥,然后再用对称加密通信。那如果我跟后端,人为沟通,约定好公钥,直接代码上写死,这不就避免了安全传输公钥的问题了吗,这样也达到了https的安全效果
2 回答2.7k 阅读✓ 已解决
3 回答610 阅读
1 回答767 阅读
如果抛开安全只看加密,那确实,只要像你说的那样提供个公钥就行了。
但这样做的问题是,虽然确保了传输过程中的数据是被加密的,但没办法确保最后解密的那台服务器是你真的想要发送给它的那台。
举个例子,在不使用证书加密之前,我想给你(服务器)传纸条,中间需要经过N个人传话(如路由器等各级中间节点),那么在你收到消息的时候,很可能在中间某个传话的就给它篡改了,或者说没篡改、但是被传话的偷看了小秘密。
那么现在咱俩之间约定一个非对称加密的方式,你先给我个公钥,我用公钥把要给你的纸条加密了,你收到后再用私钥解密,这样中间传话的看不懂密码就没法偷看内容、即使瞎改的话你那解密不出来,你就知道纸条内容被篡改了。
到此为止就像你所说的那样,但这样还有个问题,那就是我怎么确认“你”是“你”?我现在喊:「
Bo丶niu
,我要给你传纸条了,给我个公钥」,结果一个实际叫niu丶Bo
的人站出来了说「来来来,我就是Bo丶niu
,我给你公钥,你传纸条吧」,结果咱俩的小秘密最后发给这个不相干的人了。这就是中间人攻击(上面这个例子里其实就是 DNS 劫持)。那怎么解决呢?现实中好办,传纸条前先看一下身份证,噢,“你”确实是“你”,行了,可以发了。
这是因为你信任身份证这个由国家颁发的凭证。那网络上的凭证谁来颁发?这就是证书签发机构的事儿了,它们作为“权威”给每个域颁发证书,就像国家给每个人颁发身份证一样,你信任这些机构,也就信任它们发的证,从而也就信任有证书这些网站了。(这里还有信任链的问题,不展开讲了)
现实中,你办个护照还需要交个工本费呢。想让证书颁发机构给你发证,那就要给它们钱。而且这个证还分三六九等,越权威的越值钱。
不想花钱怎么办?自己给自己签发呗!然后你让所有使用证书的人都去信任你这个签发人(早期 12306 就是这么干的,自己给自己签证书,你访问的时候还得先下载它们的证书导入到系统的信任链里去)。