作者:jeanis | 来源:互联网 | 2023-07-22 10:44
HTTPS也称作HTTP over TLS。(TLS的前身是SSL,TLS 1.0通常被被认为SSL 3.1,TLS 1.1为SSL 3.2,TLS 1.2为SSL 3.3)
谈到HTTPS首先要了解下HTTP和对称性加密、非对称性加密(加密可以自行搜索,在此不做赘述)。
公钥加密,私钥解密。私钥加密,公钥解密。
谈下对HTTP和HTTPS协议的理解:
browser和server想要加密聊天(使用http),不想聊天内容被其他人知道,使用了非对称加密:
browser:“server,把你的公钥给我发过来”。
server:“给你,这是我的公钥:*server的公钥*,你可以用这个公钥加密信息后发给我”
browser:“叽里呱啦叽里呱啦(加密过后的话)”
这个过程就是server把自己的公钥给了browser,browser拿到server的公钥后把自己的消息加密发送给server,server收到密文后再用自己的私钥解密得到browser的消息。
如果没有意外,browser和server直接就完成了加密信息传输。但是在这个过程中会出现一个问题:browser怎么确认对方是server呢?因为server发给browser的公钥有可能会被黑客X拦截(比如本地host文件被修改后,dns拦截),黑客X把自己的公钥发给了browser,browser拿到的公钥就是黑客X的公钥,那么browser加密发过去密文,黑客X就能用自己的私钥去解密看到传输的消息了。
所以HTTP协议的不安全原因就是:请求发起方无法确认响应方的真实身份。
当使用HTTPS协议时:
有一个声誉度很高的贤者CA(browser和server都信任他)来做公证员,避免消息被黑客X窃取。
当browser找server聊天的时候,怎么证明server是本人呢?
这时候CA要做的事情有两件,首先给server颁发一个证书【站证书】,证书是用自己的私钥把server的公钥和server的私密信息加密后做成的;然后再告诉browser自己的公钥【根证书】。
browser收到server的消息的时,先看下证书【站证书】,使用CA的公钥【根证书】解密,然后获取到server的公钥和server的身份信息,browser就能相信对方是server,若无法解密或者身份信息不对,那就会断开联系。
确保对方是server后,browser和就可以直接用对称性的加密来传递消息聊天了(加密解密速度快)。
SSL的请求完整过程示例:
第一步: browser向server发送一个通信请求
browser ---> server:你好!
第二步: server向browser发送自己的数字证书。证书中有一个公钥用来加密信息,私钥由server持有。
server ---> browser :你好!我是server ,这里是我的数字证书 。
第三步: browser收到server的证书后,它会去验证这个数字证书到底是不是server的,数字证书是否存在问题,如果检查没有问题,就说明数字证书里面的公钥确实是server的。检查数字证书后,browser会发送一个随机的字符串给server。server用自己的私钥去加密,然后把加密结果返回给browser,browser用数字证书里面的公钥解密这个返回结果,如果解密结果与之前生成的随机字符串一致,那说明对方确实是私钥的持有者-server。
browser ---> server:向我证明你就是server,这是一个随机字符串。
server---> browser :这是将随机字符串加密后的结果。
第四步: 验证server的身份后,browser生成一个对称加密算法和密钥,用于后面的通信的加密和解密。这个对称加密算法和密钥,browser会用公钥加密后发送给server,别人截获了也没用,因为只有server自己的私钥才可以解密。这样,后面browser和server就都可以用对称加密算法来加密和解密通信内容了。
server---> browser :已经收到你发来的对称加密算法和密钥,我们可以联系了。
browser ---> server:【巴拉巴拉巴拉巴拉】
server---> browser :【拉巴拉巴拉巴拉巴】
还有一些需要了解的知识:
- CA机构向浏览器开发商颁发CA的根证书,开发商将CA机构的根证书放置于浏览器的一个证书信任列表中。当用户下载安装浏览器到自己的电脑里面时,用户的浏览器会信任证书信任列表里面的任意CA证书签署的证书。
- 当一家公司希望他的网站可以通过HTTPS通信的时候,该公司会在CA机构购买/申请一个网站证书,由CA机构签发的网站证书可以向用户确保网站的安全。
- 当用户需要浏览这一个安全网站的时候,浏览器首先向服务器请求证书,检查该证书的根证书是否在浏览器的证书信任列表里面并验证证书的签名是否正确,当检查无误的时候浏览器继续跟服务器建立HTTPS连接。
- 证书并不是只有一级,证书不可能只有几个机构进行颁发,所以证书的颁发是一级一级的。客户端在验证证书也是一级一级往下验证。最顶级的就是根证书, 根证书一般会保存在客户端(在客户端安装时就有一组根证书),如果服务端证书的根证书在客户端的信任列表中,那么就会向根证书验证二级证书的合法性,然后再向二级证书机构验证三级证书的合法性,以此类推。
关于SSL证书链的知识可以看看下面这篇文章:百度安全验证https://baijiahao.baidu.com/s?id=1675963146214744309&wfr=spider&for=pc