浅谈HTTPS理解
为什么要HTTPS
- 提高数据加密性
HTTPS协议通过使用对称加密+非对称加密的模式,这种混合加密的模式,充分利用两方的优势,让网站的数据能够在传输过程中不被破解,同时提高数据的解密效率。这个方法的原理是,首先,使用非对称加密的方法,确保数据的密钥在安全的前提下进行交换,然后,使用对称加密方式进行通信。
- 确保数据完整
在网站数据传输的过程中,数据会经过多个中间节点,极有可能被篡改信息。该如何确保数据的完整呢?我们可以利用HTTPS协议中的数字签名,通过数字签名我们可以确认数据的发送方、确保数据的完整性,检验数据是否被篡改。
- 解决身份认证难题
攻击者会通过伪造域名来接收目标网站的信息,这就会导致网站信息泄露。HTTPS协议的数字证书能够验证网站服务器的身份,具有合法性的数字证书,就代表服务器的公开密钥是值得信赖的。此时,用户与网站的连接是安全的,除此之外,数字证书也能防止攻击者对传输的数据进行读取、篡改。
HTTPS交互流程
浏览器向服务端发起请求,服务端返回证书,浏览器收到证书后会判断证书合法性。如果合法,浏览器会用证书上的公钥加密一个随机数传给服务器,服务器用自己的私钥去解密,之后用随机数去加密需要返回的数据给浏览器,浏览器用随机数去解密数据。
在传随机数的时候使用的是非对称加密,传输数据时使用的是对称加密。因为非对称加密的解密效率低,而且一对公私钥只能实现单向的加解密,不方便。在连接过程中,随机数仅传递一次,后续交互利用随机数对数据进行加解密。
什么是中间人攻击
- 本地请求被劫持(如DNS劫持等),所有请求均发送到中间人的服务器
- 中间人服务器返回中间人自己的证书
- 客户端创建随机数,通过中间人证书的公钥对随机数加密后传送给中间人,然后凭随机数构造对称加密对传输内容进行加密传输
- 中间人因为拥有客户端的随机数,可以通过对称加密算法进行内容解密
- 中间人以客户端的请求内容再向正规网站发起请求
- 因为中间人与服务器的通信过程是合法的,正规网站通过建立的安全通道返回加密后的数据
- 中间人凭借与正规网站建立的对称加密算法对内容进行解密
- 中间人通过与客户端建立的对称加密算法对正规内容返回的数据进行加密传输
- 客户端通过与中间人建立的对称加密算法对返回结果数据进行解密
由于缺少对证书的验证,所以客户端虽然发起的是 HTTPS 请求,但客户端完全不知道自己的网络已被拦截,传输内容被中间人全部窃取。
浏览器如何保证证书的合法性
证书包含什么内容
- 颁发机构信息
- 公钥
- 公司信息
- 域名
- 有效期
- 指纹
- 所用签名算法的描述性信息
- ...
证书的合法性依据
首先,权威机构是要有认证的,不是随便一个机构都有资格颁发证书。另外,证书的可信性基于信任制,权威机构需要对其颁发的证书进行信用背书,只要是权威机构生成的证书,我们就认为是合法的。所以权威机构会对申请者的信息进行审核,不同等级的权威机构对审核的要求也不一样,于是证书也分为免费的、便宜的和贵的。
浏览器如何验证证书合法性
浏览器发起 HTTPS 请求时,服务器会返回网站的 SSL 证书,浏览器需要对证书做以下验证:
1. 验证域名、有效期等信息是否正确。证书上都有包含这些信息
2. 判断证书来源是否合法。每份签发证书都可以根据验证链查找到对应的根证书,操作系统、浏览器会在本地存储权威机构的根证书,利用本地根证书可以对对应机构签发证书完成来源验证;
3. 判断证书是否被篡改。需要与 CA 服务器进行校验;
4. 判断证书是否已吊销。通过CRL(Certificate Revocation List 证书注销列表)和 OCSP(Online Certificate Status Protocol 在线证书状态协议)实现,其中 OCSP 可用于第3步中以减少与 CA 服务器的交互,提高验证效率
只有认证机构可以生成证书吗?
如果需要浏览器不提示安全风险,那只能使用认证机构签发的证书。但浏览器通常只是提示安全风险,并不限制网站不能访问,所以从技术上谁都可以生成证书,只要有证书就可以完成网站的 HTTPS 传输。例如早期的 12306 采用的便是手动安装私有证书的形式实现 HTTPS 访问。
如何保证数据不被篡改
在证书上有签名算法的描述信息,在消息发出时,会对所发出的消息明文生成摘要并一同发出,接收端收到消息后,将消息解密并生成摘要,与收到消息的摘要进行比较,如果相同则没有被篡改