HTTP 传输面临的风险有:
- 通信使用明文(不加密),内容可能会被窃听
- 不验证通信方的身份,因此有可能遭遇伪装
- 无法证明报文的完整性所以有可能已遭篡改
https概念
HTTPS 协议(HyperText Transfer Protocol over Secure Socket Layer):可以理解为HTTP+SSL/TLS, 即 HTTP 下加入 SSL 层,HTTPS 的安全基础是 SSL,因此加密的详细内容就需要 SSL,用于安全的 HTTP 数据传输。
HTTP+ 加密 + 认证 + 完整性保护 =HTTPS
HTTPS 比 HTTP 要慢 2 到 100 倍
与纯文本通信相比,加密通信会消耗更多的CPU 及内存资源。
要进行 HTTPS 通信,证书是必不可少的。而使用的证书必须向认证机构(CA)购买。
SSL(Secure Sockets Layer 安全套接层),及其继任者传输层安全(Transport Layer Security,TLS)是为网络通信提供安全及数据完整性的一种安全协议。TLS与SSL在传输层对网络连接进行加密。
https原理
https是不是绝对安全
这个的答案是否定的,HTTPS只是解决了数据在传输过程中的安全性和保密性,这一点用一般的wireshark就能验证(注意这里指的是一般)。如果是服务器或者证书出现问题那么https是肯定解决不了的。
先来说说对称加密和非对称加密
对称加密
就是通信的双方使用的是同一套算法,比如说对一个文件进行用这个算法进行加密,那么用这个算法或者这个算法的逆过程就能解密,这样带来的开销往往会小一些
非对称加密
为什么会出现非对称加密,就是因为对称加密的算法是可以被攻破的,(最坏的情况下穷举攻击能攻破的),就比如说当初密码学刚刚产生的时候的凯撒密码,如下:
abcd
进行加密之后变为:
efgh
我们很容易就能够猜出来就是由明文的每个字符+4就变成了密文,这样如果算法被攻破的话,密码也就随之知道了。
非对称加密分为两个密钥:公钥和私钥。公钥是谁都能有,用于对信息加密,只有私钥才能解密。如果想进一步了解,可以看看我以前写过的一篇关于RSA的的文章(要有一定的数论基础哟):RSA非堆成加密算法的实现
如果您了解了非对称加密算法,就知道这个算法相对于对称加密算法来说,是十分浪费时间和资源的
https要知道的几个加密算法
- 握手的时候使用的非对称加密算法 ,用来加密握手之后的请求和应答
- 传输信息的时候使用的对称加密,
- 保证数据的完整性用的是hash算法(数字签名)
HTPS的工作过程
- 客户端发送自己支持的加密规则给服务器,代表告诉服务器要进行连接了
- 服务器从中选出一套加密算法和hash算法以及自己的身份信息(地址等)以证书的形式发送给浏览器,证书中包含服务器信息,加密公钥,证书的办法机构
- 客户端收到网站的证书之后要做下面的事情:
- 验证证书的合法性
- 如果验证通过证书,浏览器会生成一串随机数,并用证书中的公钥进行加密
- 用约定好的hash算法计算握手消息,然后用生成的密钥进行加密,然后一起发送给服务器
- 服务器接收到客户端传送来的信息,要求下面的事情:
- 用私钥解析出密码,,用密码解析握手消息,验证hash值是否和浏览器发来的一致
- 使用密钥加密消息,回送
- 如果计算法hash值一致,握手成功