HTTPS(Hyper Text Transfer Protocol Secure)是基于 SSL/TLS(Secure Sockets Layer/Transport Layer Security)协议的安全版本的 HTTP 协议。HTTPS 通过使用 SSL/TLS 协议在传输层对数据进行加密,以保护用户的隐私和数据安全。
HTTPS 在保护用户隐私和数据安全方面主要有以下两个方面:
-
身份认证
-
数据加密
本篇攻略主要讲解第一个方面——身份认证。
HTTPS 身份认证机制主要是通过证书进行的,在这个过程中,客户端与服务器之间交换的不仅是数据,还包括证书。
下面就来具体讲解 HTTPS 身份认证的过程,以及如何保证身份认证。
HTTPS 身份认证过程
-
客户端请求连接服务器,并向服务器发起 HTTPS 请求。
-
服务器接收到请求后,会向客户端提供自己的数字证书。
-
客户端收到证书后,会通过证书颁发机构(CA)的根证书验证服务器数字证书的有效性。
-
如果证书有效,则客户端生成一个随机的加密密钥,并用服务器的公钥加密发送给服务器。
-
服务器使用自己的私钥解密获取客户端的密钥。
-
服务端利用客户端的密钥对数据进行加密,再由客户端使用对称密钥进行解密。
在这个过程中,服务器通过提供数字证书来证明自己的身份,而客户端通过验证数字证书的有效性来确保连接到的是合法的服务器。如果证书失效或者验证失败,则客户端会提示用户风险,建议用户中断连接。因此,HTTPS通过证书认证机制,可以有效保证身份认证。
示例说明
示例1:使用浏览器访问HTTPS网站
使用 Chrome 浏览器访问某个 HTTPS 网站,在地址栏左侧会有一个小锁图标,点击可以看到该网站的证书信息。在证书中可以看到证书颁发机构(CA)、证书有效期等信息。如果证书有效,则认为连接是安全的,否则提示风险。
示例2:程序使用HTTPS协议连接远程服务器
Python中的requests库可以用来发送HTTP请求,而HTTPS请求就是在requests的get或post等请求方法中,将请求连接的URL改为HTTPS协议即可。
import requests
url = 'https://www.example.com'
# 发送get请求
response = requests.get(url)
# 输出响应内容
print(response.text)
以上示例中,使用了requests库发送了一个HTTPS请求,如果该请求没有证书或证书无效,requests库会抛出异常。因此,使用requests库发送HTTPS请求时,在对返回数据的处理之前需要判断是否存在异常。