http
http:全称超文本传输协议,是应用层的一个协议。默认端口 80。
“HTTP,全称是超文本传输协议,它是一种应用层协议,是整个万维网数据通信的基础。
它的核心是一个请求-响应模型:客户端(比如浏览器)发送一个 HTTP 请求,服务器接收到请求后,返回一个 HTTP 响应。
HTTP 最重要的一个特性是无状态 (Stateless) ,也就是说,服务器不会记录之前请求的任何信息,每个请求都是独立的。这种设计使得服务器非常简单和可扩展,而我们通常通过 Cookie 和 Session 机制来维持用户的会话状态。
特点:
- 无加密: 数据以明文形式传输,任何网络监听者都可以截获并读取数据内容,导致信息泄露。
- 无认证: 无法验证服务器的真实身份,客户端可能连接到伪造的服务器,容易遭受“中间人攻击”(Man-in-the-Middle Attack)。
- 无完整性保护: 数据在传输过程中可能被篡改,而客户端无法察觉。
https
https不是一个新的协议。而是http和ssl/tls的组合。SSL/TLS协议位于HTTP协议和TCP协议之间,通常可以看作是传输层和应用层之间的一个“安全子层”。
- 工作方式: 在HTTP请求和响应数据到达TCP层之前,会先经过SSL/TLS层进行加密;在TCP层接收到的数据,会先经过SSL/TLS层解密,然后才交给HTTP层处理。这意味着所有在网络中传输的数据都是加密的。
特点
- 加密 (Encryption):
-
- 通过对称加密(用于实际数据传输)和非对称加密(用于密钥交换和数字签名)的结合,对所有传输的数据进行加密。即使数据被截获,攻击者也无法轻易解读其内容,保护了数据机密性。
- 身份认证 (Authentication):
-
https会要求服务器出示它的tls证书,tls证书由权威的CA机构颁发,这个证书就像网站的身份证,浏览器会验证证书中的域名是否匹配,证书是否过期,并且还会验证证书的有效性。验证成功才会允许连接,否则会提示警告。
- 数据完整性 (Data Integrity):
-
- SSL/TLS使用消息认证码(MACs)来验证数据的完整性。如果在传输过程中数据被篡改,客户端会检测到并拒绝接收,防止数据被非法篡改。保护了数据完整性。
浏览器如何验证网站tls证书的有效性
-
浏览器会从最底层的服务器证书开始,进行“解密验证”。
- 它会用中级证书的公钥去验证服务器证书的数字签名。如果能成功解密并匹配,说明这个服务器证书确实是由这个中级机构
签发的,没有被篡改。 - 接着,浏览器会找到更上一级的证书(比如根证书),用根证书的公钥去验证中级证书的数字签名。
- 这个过程会一直持续下去,直到链的尽头。
- 它会用中级证书的公钥去验证服务器证书的数字签名。如果能成功解密并匹配,说明这个服务器证书确实是由这个中级机构
-
信任的终点: 最终,浏览器会追溯到一个根证书。它会检查这个根证书是否存在于自己内置的“可信根证书颁发机构”列表里。
- 如果存在: 那么整条信任链都是有效的。这就像检查官最终确认,护照是由一个被我们国家承认的、合法的政府机构签发的。
- 如果不存在: 浏览器会认为这个证书是“自签名”的或来自一个不可信的来源,并发出严重的安全警告。
数字签名保护了 证书不是伪造的。 保护了证书里的公钥(进而保护了预主密钥)
电脑被安装恶意根证书,可能导致信息泄露
TLS三次握手的过程
- HTTP: 连接建立相对简单,客户端直接通过TCP三次握手与服务器建立连接后,即可发送HTTP请求。
- HTTPS: 在TCP三次握手成功后,还需要进行额外的SSL/TLS握手过程,这个过程相对复杂:
-
- Client Hello: 客户端发送自身支持的SSL/TLS版本、加密算法套件列表、一个随机数等信息。
- Server Hello: 服务器从客户端提供的列表中选择一套加密算法套件,并发送自己的SSL/TLS版本、另一个随机数、以及服务器的数字证书给客户端。
- Certificate Verification: 客户端验证服务器证书的有效性(包括CA是否可信、证书是否过期、域名是否匹配等)。
- Key Exchange: 客户端生成一个预主密钥(pre-master secret) ,用服务器证书中的公钥加密后发送给服务器。服务器用自己的私钥解密得到预主密钥。双方根据这个预主密钥和之前交换的随机数,共同计算出会话密钥(session key) 。
- Change Cipher Spec & Finished: 双方分别发送一个“Change Cipher Spec”消息,表示后续通信将使用协商好的会话密钥进行加密;然后发送一个“Finished”消息(已加密),以验证密钥协商是否成功。
- Application Data: 握手成功后,双方就可以使用会话密钥进行对称加密通信了