本文首发于公众号“AntDream”,欢迎微信搜索“AntDream”或扫描文章底部二维码关注,和我一起每天进步一点点
工作流程
HTTPS 默认工作在 TCP 协议443端口,它的工作流程一般如以下方式:
1、TCP 三次同步握手
2、客户端验证服务器数字证书
3、DH 算法协商对称加密算法的密钥、hash 算法的密钥
4、SSL 安全加密隧道协商完成
5、网页以加密的方式传输,用协商的对称加密算法和密钥加密,保证数据机密性;用协商的hash算法进行数据完整性保护,保证数据不被篡改。
通信的三方
CA根证书颁发机构、客户端、服务端
CA颁发证书
1、CA给客户端颁发的根证书是CA的公钥,用于验证服务端的证书是否合法,也就是验证服务端的身份信息
2、CA给服务端颁发的证书,也就是电子签名,是CA机构用自己的私钥将服务端的公钥和个人信息加密得到
3、 非对称加密
通信过程
分为:证书验证阶段和数据传输阶段
证书验证阶段
1、 客户端发起请求后,服务端会返回证书信息
2、 客户端收到证书信息后,用本地保存的根证书(也就是CA证书的公钥)进行解密,验证证书的合法性,和服务端的身份,这里是非对称加密
3、 客户端验证过程包括解密证书信息后,用哈希值进行对比,把证书明文内容的哈希值和解密后的签名(是服务端信息的哈希值)进行对比要相同;
4、 此外证书信息里还有服务端的信息,比如域名,通过对比域名可以避免证书被掉包
数据传输阶段
1、 证书验证合法后,客户端会生成一个随机数,通过从服务端证书中解密出的服务端公钥进行加密,传给服务端
2、 服务端用自己的私钥解密出随机数(称作 pre_master_secret 的随机密码串),然后利用随机数和对称加密算法对数据进行加密,然后传输给客户端
3、 客户端根据本地存储的随机数利用对称加密算法对服务端的内容进行解密
从网络模型认识HTTPS
1、应用层(application layer):比如Http、FTP、Https
2、传输层(transport layer):比如TCP、UDP
3、网络层(network layer):比如:IPv4、IPv6
4、 数据链路层(data link layer)和物理层(physical layer):比如无线网的802.2传输协议,有线网的以太网协议
5、SSL/TLS:位于HTTPS的下层
HTTPS的特点
1、安全,大部分情况能避免中间人攻击,防止数据被窃取
2、 HTTPS 协议的安全是有范围的,在黑客攻击、拒绝服务攻击和服务器劫持等方面几乎起不到什么作用
3、 HTTPS 是现行架构下最安全的解决方案,虽然不是绝对安全,但它大幅增加了中间人攻击的成本
缺点
1、相同网络环境下,HTTPS 协议会使页面的加载时间延长近 50%,增加 10%到 20%的耗电。此外,HTTPS 协议还会影响缓存,增加数据开销和功耗
2、HTTPS 协议的安全是有范围的,在黑客攻击、拒绝服务攻击和服务器劫持等方面几乎起不到什么作用
3、最关键的是,SSL 证书的信用链体系并不安全。特别是在某些国家可以控制 CA 根证书的情况下,中间人攻击一样可行
问题
1、 为什么制作数字签名时需要哈希一次?
最显然的是性能问题,前面我们已经说了非对称加密效率较差,证书信息一般较长,比较耗时。而hash后得到的是固定长度的信息(比如用md5算法hash后可以得到固定的128位的值),这样加解密就快很多
2、 每次进行HTTPS请求时都必须在SSL/TLS层进行握手传输密钥吗?
服务器会为每个浏览器(或客户端软件)维护一个session ID,在TLS握手阶段传给浏览器,浏览器生成好密钥传给服务器后,服务器会把该密钥存到相应的session ID下,之后浏览器每次请求都会携带session ID,服务器会根据session ID找到相应的密钥并进行解密加密操作,这样就不必要每次重新制作、传输密钥了!
3、为什么不用非对称加密+非对称加密?
这种方式防止不了中间人攻击,中间人可以劫持分别得到公钥,然后替换成自己的。需要通过CA机构解决
欢迎关注我的公众号AntDream查看更多精彩文章!