本文以https://www.abc123.com为例。
1.域名解析:
1.1 尝试从浏览器DNS缓存获取对应的IP,如果没有获得IP,则执行下一步骤;
1.2 尝试从操作系统的DNS缓存获取对应的IP,如果没有获得IP,则执行下一步骤;
1.3 尝试从hosts文件进行域名解析,如果没有获得IP,则执行下一步骤;
1.4 电信运营商的本地DNS的DNS缓存进行搜索,如果没有获得IP,则执行下一步骤;
1.5 从运营商的根DNS服务器解析域名,如果是.com返回.com域的IP,如果是.cn返回.cn的域的IP;
1.6 获得.com的域IP之后,访问.com域的服务器,从.com域服务器返回baidu.com域名的IP。
获得IP之后,则尝试建立Browser和Server之间的链接。
2.TCP链接的建立-三次握手:
TCP链接的建立-三次握手
TCP链接的建立-三次握手.png3.密钥协商:
3.1 Browser发往服务器的443端口,并携带Browser支持的加密和哈希算法;
3.2 Server收到请求,选择Browser支持的加密算法和哈希算法,返回Server数字证书(一般是RSA非对称加密的签名);
3.3 Browser得到Server的数字证书之后,Browser从内置的CA列表中查找对应CA的证书,如果查到,使用CA证书的公钥验证Server的数字证书是否合法,并判断是否已经过期等。如果验证合法,且证书没有过期,则使用Server返回的公钥PKs,否则告警Server的数字证书不可信;
3.4 Browser生成随机数N(不能使用伪随机数),PKs(N) = m发送给Server;
3.5 Server使用自己的SKs进行解密,即SKs(PKs(N)) = N;
3.6 这样Browser和Server获得了同样的一个保密的随机数N,二则将N作为对称加密(如AES,DES等对称加密算法)的密码。
备注:针对密码学的相关技术,可参考我之前的文章
:密码学-札记
4.发送请求:
Browser的http请求到Server,方法如GET/POST/PUT等。
5.Server端处理请求:
5.1 Server读取cache或者数据库DB中的数据,并返回给Browser。
关于cache和DB数据一致性,缓存失效问题,可参考我之前的文章:
1.数据库-缓存数据一致性问题;
2.缓存失效的经典问题;
网友评论