https与DNS的运行流程
HTTPS流程:
HTTPS核心:加了TLS层,加密传输+身份认证
TLS:信息加密、校验机制、身份证书
TLS(Transport Layer Security)握手是建立安全通信通道的关键过程,发生在客户端(如浏览器)和服务器之间。其主要目标是协商加密参数、验证身份(通常是服务器)并生成共享密钥,以实现后续通信的机密性和完整性。
1、Client Hello (客户端问候):
- 客户端向服务器发起连接。
- 发送支持的 TLS 版本列表。
- 发送一个客户端生成的随机数。
2、Server Hello (服务器问候):
- 服务器从客户端支持的列表中选择:
- 一个双方都支持的 TLS 版本。
- 一个双方都支持的密码套件。
- 服务器生成一个随机数并发送给客户端。
3、服务器证书:
- 服务器发送其数字证书给客户端。
- 该证书包含服务器的公钥、身份信息(域名等),并由受信任的证书颁发机构签名。
4、服务器密钥交换:
- 此消息通常包含一个签名(用服务器证书对应的私钥生成),证明服务器拥有该证书的私钥并控制了该公钥。
5、服务器问候结束:
- 服务器表示其初始握手消息已发送完毕。
6、客户端密钥交换:
客户端验证服务器证书:
- 检查证书是否由受信任的 CA 签发且在有效期内。
- 检查证书中的域名是否与正在访问的域名匹配。
- 验证证书链的完整性。
如果服务器发送了密钥交换参数:
- 客户端将这部分参数发送给服务器。
- 此时,客户端和服务器都拥有了对方提供的密钥交换参数和自己生成的私密参数。
7、客户端完成:
- 客户端计算并发送一个加密的完成消息。
- 这是客户端首次发送的加密消息,用于验证握手过程的完整性以及密钥是否正确协商。
8、服务器完成:
- 服务器计算并发送一个加密的完成消息。
- 使用协商好的密钥和算法进行加密。
- 客户端验证此消息。
客户端和服务器现在可以开始使用协商好的对称加密密钥(主密钥派生的会话密钥)和算法安全地传输应用层数据(如 HTTP 请求和响应)。所有后续通信都被加密和完整性保护。
DNS传输流程:
Linux下:nslookup和dig
Windows下:nslookup
检查本地DNS缓存: 操作系统首先查询本机的DNS缓存记录。如果找到该域名对应的IP地址,则解析完成。
检查hosts文件: 若本地缓存未命中,则查询操作系统的hosts文件(Linux通常位于
/etc/hosts
,Windows位于C:\Windows\System32\drivers\etc\hosts
)。如果该文件包含域名与IP的映射关系,则直接使用该IP地址完成解析。查询本地DNS服务器: 若hosts文件也未提供解析,操作系统将查询请求发送至网络配置中指定的本地DNS服务器(通常由ISP或网络管理员提供)。如果本地DNS服务器缓存中有此记录,则返回结果,解析结束。
查询根DNS服务器: 若本地DNS服务器无缓存记录,它则向根DNS服务器发起查询请求。
获取顶级域名服务器地址: 根DNS服务器根据域名后缀(如
.com
,.cn
,.org
等)返回负责该顶级域名的顶级DNS服务器地址(全球根DNS服务器数量有限,约13组)。查询顶级域名服务器: 本地DNS服务器随后向接收到的顶级DNS服务器地址发送查询请求。
获取权威域名服务器地址: 顶级DNS服务器查找并返回负责该具体域名的权威域名服务器(Name Server)的地址。
查询权威域名服务器: 本地DNS服务器接着向权威域名服务器发送查询请求。
获取解析结果并缓存: 权威域名服务器返回该域名最终的正确IP地址给本地DNS服务器。本地DNS服务器收到后,会缓存此域名与IP的映射关系,缓存时长由记录的TTL(生存时间)值决定。
返回结果给客户端并缓存: 本地DNS服务器将解析得到的IP地址返回给用户计算机。用户计算机同样会根据记录的TTL值,将该结果缓存在本地系统DNS缓存中。
建立连接访问目标: 用户计算机获得目标网站(如百度)的IP地址后,需要与该IP地址对应的服务器建立TCP连接(三次握手)。握手成功后,才能发送访问请求。目标服务器处理请求并返回响应后,用户才能访问该网站。