https://wetest.qq.com/lab/view/110.html
https://www.nowcoder.com/questionTerminal/36250851b345498d9b56facfbde3d5f4?toCommentId=383478
https://www.jianshu.com/p/2a18578e3610
https://www.jianshu.com/p/33d0f8631f90
https://www.cnblogs.com/glory0727/p/9857511.html
https://blog.csdn.net/u011779724/article/details/80776776
https://blog.csdn.net/u011779724/article/details/80766572
/**
* 每天一个知识点day70 TODO HTTPS连接建立过程
*
* 域名->IP
* 当在浏览器中访问一个网址的时候,首先要做的就是找到域名所对应的服务器的IP地址。
* 浏览器通常有三个途径来找IP地址。
* 缓存。包括浏览器的DNS缓存和OS的DNS缓存。
* HOST文件。浏览器会去本地的HOST文件中寻找域名对应的IP地址。
* 域名服务器查询。向本地域名服务器求助(一般是路由器),
* 如果得不到还得向更高层次的域名服务器(根域名服务器、
* 顶级域名服务器、权限域名服务器)求助。本地域名服务器向高级
* 域名服务器查询可以是迭代查询或递归查询。
*
* 想要完成HTTP请求和响应还需要通过TCP建立一个浏览器跟服务器的连接。
* TCP连接的建立需要通过“三次握手”来完成。
* 当建立起TCP连接后,就可以发送HTTP请求了。
* 浏览器向服务器发送一个HTTP请求来请求资源。
* HTTP 1.0默认是短连接。
* HTTP 1.1默认是长连接。
*
* prepare1.
* 服务器生成公私钥S.pub和S.pri 私钥自己保存,公钥发给CA
* prepare2.
* CA生成公私钥C.pub和C.pri,使用私钥对服务器的公钥进行签名生成证书。
* prepare3.
* CA将生成的CA证书交给服务器。
* prepare4.
* 客户端浏览器内置CA根证书和CA公钥。
*
* 1.
* 客户端生成随机数Random_C
* 客户端向服务器发送客户端的SSL版本和支持的加密算法、Random_C。
* 2.
* 服务器返回其选定的加密算法、Hash算法、Random_S。
* 服务器将CA证书返回给客户端,证书包含服务器公钥S.pub,颁发机构,有效期等。
* 3.
* 客户端通过浏览器内置根证书的C.pub验证CA证书合法性。
* 4.
* 客户端计算产生随机数字Pre-master。使用S.pub加密。
* 根据两个明文随机数Random_C和Random_S与自己计算的Pre-master计算得到
* 对称密钥。
* 5.
* 客户端使用约定好的Hash算法计算握手信息,并使用对称密钥加密。
* 6.
* 客户端将上面生成的信息发送给服务器(加密Pre-master,加密握手信息)
* 7.
* 服务器使用S.pri私钥对pre-master进行解密,结合Random_C和Random_S计算
* 得到对称密钥。使用Hash算法计算握手信息,使用对称密钥解密客户端
* 发来的信息,验证密钥正确性。
* 8.
* 服务器根据握手信息生成数据并使用对称密钥加密发送给客户端。
* 9.
* 客户端验证,验证通过则握手完成。
* 10.
* 双方使用对称密钥加密解密数据进行通信。
*
* 为什么要多一个CA
* 假设没有CA,那么如果服务器返回的包含公钥的包被hack截取,
* 然后hack也生成一对公私钥,他将自己的公钥发给客户端。
* hack得到客户端数据后,解密,然后再通过服务器的公钥加密发给服务器,
* 这样数据就被hack获取。
* 有了CA后,客户端根据内置的CA根证书,
* 很容易识别出hack的公钥不合法,或者说hack的证书不合法。
*
*
*/
简单版:
image.png
复杂版:
image.png
网友评论