HTTPS协议,相关的概念包括SSL、非对称加密、CA证书
先说一下什么是对称加密和非对称加密。
双方加密解密都用相同密钥的算法,称为对称加密算法。
使用对称加密的缺点,使用对称加密双方都知道密钥和算法。加密解密用的是一个密钥,加密是正向的过程,解密是逆向过程。
非对称加密,在非对称加密中,加密和解密用的不是一个密钥,当开发一个网站,我们的用户之间的通信用非对称加密。用户发送请求时,用户用一把钥匙加密数据,服务端用另一把钥匙解密。在这个过程中,服务端拥有的是私钥,用户拥有的是公钥,很多用户可以使用同一个公钥,只有服务端才拥有私钥。
公钥发送的数据必须用私钥解密,私钥发送的数据必须用公钥解密。网站发送数据给用户,用私钥加密,用户用公钥解密。用户发送数据给网站时,用公钥加密,网站用私钥解密。如果公钥不小心被盗,无法通过公钥篡改数据,因为他拿不到私钥。
在非对称加密中,密钥通常是由提供服务的一方创建的。每次创建是一对公私钥对,然后提供者将公钥给用户,私钥自己保留。
接下来说下HTTPS协议的原理,大家都会说HTTPS协议是安全的,因为对传输的数据进行了加密,而加密过程使用了非对称加密。但是实际上,非对称加密只是用在了证书验证上,而内容的传输使用的是对称加密。
HTTPS整理过程分为证书验证和数据传输阶段。具体交互如下。
HTTPS协议实现的原理
第一个阶段是,证书验证阶段,
浏览器向服务端发起HTTPS请求,
服务端返回HTTPS证书(包含公钥)
客户端验证证书是否合法,如果不合法就是发出告警提示。
第二个阶段是,数据传输阶段
当证书验证合法后,再本地生成随机数
通过公钥加密随机数,并把加密后的随机数传输到服务端。
服务端通过私钥对随机数进行解密
服务端通过客户端传入的随机数构造对称加密算法,对返回结果内容进行加密后传输。
那么为什么数据传输使用的对称加密呢?
首先非对称加密的加密和解密效率非常低,但是客户端和服务端一般存在大量的交互,非对称加密的效率无法接受。另外,在HTTPS的场景中只有服务端保存了私钥,一对公私钥只能实现单向的加解密,所以HTTPS中内容传输加密采取的是对称加密。
为什么需要CA认证机构颁发证书?
HTTP协议被认为不安全是因为传输过程容易被监听者监听、伪造服务器。而HTTPS协议主要解决的是网络传输的安全性问题。假设不存在认证机构的时候,任何人都可以制作证书,这样就会存在一个安全风险,中间人攻击。由于缺少对证书的验证,所以客户端虽然发起的是HTTPS请求,但是客户端完全不知道自己的网络被拦截了,传输内容被中间人全部窃取。
那么浏览器是如何保证CA证书的合法性?
证书包含了信息如下:
颁发机构信息
公钥
公司信息
域名
有效期
浏览器是如何验证证书的合法性?
浏览器发起的HTTPS请求时,服务端会返回网站的SSL证书,浏览器需要对证书做以下验证:
验证域名、有效期等信息是否正确。证书上都包含这些信息,比较容易完成验证。
判断证书来源是否合法,每份签发证书都可以根据验证链查找到对应的根证书,操作系统、浏览器会在本地存储权威机构的根证书,利用本地根证书可以对对应机构签发证书完成来源验证。
判断证书是否被篡改。需要与CA服务器进行校验。
判断证书是否被吊销。
如果验证不通过浏览器通常会提示安全风险,但不限制网站不能访问。