HTTPS对比HTTP来说会更加安全,得益于他的SSL/TLS加密,那SSL或者TLS加密都是什么呢?
SSL是TLS的前身,现在更多使用的加密是TLS,TLS是一种混合加密,还使用了数字签名和证书的技术,所以要说TLS加密,我们先要了解清楚当前主流的加密算法
1.摘要算法-不可逆
常见的摘要算法有MD5(生成128bit的散列值),SHA-1(生成160bit的散列值),SHA-2(SHA-256,SHA-384,SHA-512)等,特点是不管多大的数据,最终都会生成一个固定位数的加密数据,且是不可逆的,所以也叫摘要算法,目前已经不安全,MD5可以通过www.cmd5.com解析常见的密码
2.对称加密
常见的对称加密有AES,DES等,特点是加密和解密使用的是同一把秘钥
3.非对称机密
常见的非对称加密有RSA,特点是会生成2把秘钥:公钥和私钥,可以使用公钥解密私钥加密的数据,也可以使用私钥解密公钥加密的数据
4.混合密码系统
加密步骤:
4.1消息发送者要拥有消息接收者的公钥
4.2生成会话秘钥,作为对称加密的秘钥,加密消息
4.3用消息接收者的公钥,加密会话秘钥
4.4将2,3生成的加密结果,一并发给消息接收者
发送出去的内容包括:
用会话秘钥加密的消息(加密方法:对称加密)
用公钥加密的会话秘钥(加密方法:非对称加密)
解密步骤:
4.5消息接收者用自己的私钥解密出会话秘钥
4.6再用第一步解密出来的会话秘钥,解密消息
5.数字签名
这项技术是为了针对中间人攻击,证明数据是发送者发的不是某个攻击人发的,而由发送者进行签名的一项技术,大概流程为:
5.1消息发送者生成公钥私钥,把公钥给接收者
5.2消息发送者把消息通过单向散列函数生成散列加密消息
5.3消息发送者用自己的私钥对散列加密消息进行加密,生成签名
5.4消息发送者把明文和用签名发给接收者
5.5接收者通过发送者的公钥对签名进行解密,得到散列加密信息
5.6接收者用散列函数对明文进行加密
5.7把6的加密数据和5的加密数据进行对比
6.证书
是为了防止公钥在传输过程中出现泄漏产生的安全问题
公钥证书:包含姓名,邮箱等个人信息,以及此人的公钥
并由认证机构CA施加数字签名,浏览器及操作系统都内置了各大CA机构的公钥
HTTPS的加密流程:
1.三次握手
2.TLS链接(为了同步发送端和接收端的会话秘钥(对称加密)及加密规则)
3.消息发送者拿到CA机构的证书,里面包含了消息接收者的公钥,使用公钥对包进行加密传输
TLS1.2连接的步骤,交换秘钥算法为ECDHE:
1.ClientHello,客户端发送,包含TLS版本,支持的加密组件(秘钥加密算法,对称加密算法,摘要算法),随机数
2.Server Hello,服务端发送,包含TLS版本,选择的加密组件,随机数
3.Certificate,服务器发送,服务器的公钥证书(CA认证)
4.Server Key Exchange,服务端发送,用以实现ECDHE(秘钥交换)算法的其中一个参数(Server params),为了防止伪造,Server Params经过了服务器私钥签名
5.Server Hello Done,服务端发送,告知客户端协商部分结束
客户端验证公钥签名
6.Client Key Exchange,客户端发送,用以实现ECDHE算法的另一个参数
客户端,服务器都可以使用ECDHE算法
根据Server Params,Client Params计算出一个新的随机秘钥串Pre-master secret
然后结合Client Random,Server Random,Pre-master secret生成用以加密会话的会话秘钥(主密钥),还会分别派生出客户端发送消息的秘钥和服务器端发送消息的秘钥
7.Change Cipher Spec,客户端发送,告诉服务器之后的通信会采用计算出的会话秘钥进行加密
8.Finished,客户端发送,包含连接至今全部报文的整体校验值(摘要),加密之后发送给服务器
9.Change Cipher Spec,服务端发送
10.Fished