关于HTTPS的一点理解
https原理介绍
http的缺点
- 通信使用明文(不加密),内容可能会被窃听。
- 不验证通信方的身份,因此有可能遭遇伪装。
- 无法证明报文的完整性,所以有可能已经遭到篡改。
https的优劣分析
什么是https
HTTPS = http + 认证 + 加密 + 完整性保护
https是与SSL(安全套接层)组合使用的http协议(Http Secure),使用SSL之后,请求则变成先和SSL通信,SSL再和TCP通信;请求经过加密之后,可以有效防止黑客窃听,篡改,和伪装请求,并保证了报文的完整性;
优点
https弥补了http的缺点,具备以下两个优点:
- 确认通讯双方的身份。
- 建立安全通道,保证数据传输安全。
缺点
1. SSL 证书费用相对较高,以及其在服务器上的部署、更新维护非常繁琐。
2. HTTPS 因需要多次“握手”,降低用户访问速度。
3. HTTPS涉及到的安全算法会更多的消耗cpu和内存资源,导致处理速度变慢。
https的加密方式
https采用共享秘钥加密和公开**加密两者并用的混合加密机制。
公开秘钥加密方式
公开**加密也称非对称**加密,该加密算法使用两个不同的**:加***和解***。前者公开,又称公开**,简称公钥;后者保密,又称私有**,简称私钥,加***加密后所得的信息只能用解***才能解密。
举一个例子:
假设两个用户A,B进行通信,公钥为c,私钥为d,明文为x.
Step 1. A用公钥对明文进行加密形成密文c(x),然后传输密文;
Step 2. B收到密文,用私钥对密文进行解密d(c(x)),得到要通信的明文
共享秘钥加密方式
共享秘钥加密又叫对称秘钥加密,即,加密和解密用同一个秘钥
确认身份(认证)
HTTPS在通讯中,通过“签名”技术,通讯双方可以确认对方身份。身份认证分为单向认证和双向认证。单向认证中只有服务器端有证书,双向认证中服务器和客户端都有证书。
数字证书
证明某个消息或者文件是本人发出/认同的。
SSL证书主要分以下三种:
- 个人认证:最高级别的认证,浏览器地址栏会显示公司名。
- 公司认证(Company Validation):确认域名所有人是哪一家公司,证书里面会包含公司信息。
- 扩展认证(Extended Validation):最高级别的认证,浏览器地址栏会显示公司名
RSA签名
既可以用公钥加密然后私钥解密,也可以用私钥加密然后公钥解密(对称性),每一个公钥都有唯一的私钥与之对应,任一公钥只能解开对应私钥加密的内容。
例子
RSA签名过程,如下:
- 小明对外发布公钥,并声明对应的私钥在自己手上。
- 小明对消息M计算摘要,得到摘要D。
- 小明使用私钥对D进行签名,得到签名S。
- 将M和S一起发送出去。
验证过程,如下:
- 接收者首先对M使用跟小明一样的摘要算法计算摘要,得到D。
- 使用小明公钥对S进行解签,得到D’。
- 如果D和D’相同,那么证明M确实是小明发出的,并且,没有本篡改过。
安全传输(加密通信流程)
为确保安全建立安全通道,保证数据传输安全。
首先,通过证书中的数字签名(非对称秘钥加密方式),安全的交换在稍后的对称秘钥加密中要使用的秘钥。
然后,在确保交换的秘钥是安全的前提下,使用对称秘钥加密方式进行通信。
加密通信的流程:
- 浏览器将自己支持的一套加密算法、HASH算法发送给网站。
- 网站从中选出一组加密算法与HASH算法,并将自己的身份信息以证书的形式发回给浏览器。证书里面包含了网站地址,加密公钥,以及证书的颁发机构等信息。
- 浏览器获得网站证书之后,开始验证证书的合法性,如果证书信任,则生成一串随机数字作为通讯过程中对称加密的秘钥。然后取出证书中的公钥,将这串数字以及HASH的结果进行加密,然后发给网站。
- 网站接收浏览器发来的数据之后,通过私钥进行解密,然后HASH校验,如果一致,则使用浏览器发来的数字串使加密一段握手消息发给浏览器。
- 浏览器解密,并HASH校验,没有问题,则握手结束。接下来的传输过程将由之前浏览器生成的随机密码并利用对称加密算法进行加密。