一. HTTP
HTTP的缺点
- 通信使用明文(不加密),内容可能被窃听
- 不验证通信双方的身份,因此可能遭遇伪装
- 无法证明报文的完整性,所以有可能已造篡改
二. HTTPS
1. 加密技术
对称加密
- 加密和解密都用同一把秘钥,又称为共享秘钥。但是在传输过程中,如何将秘钥安全的传输给对方依然是问题。假设秘钥可以安全的传输到对方,那么报文也就可以安全传输了。
非对称加密
- 非对称加密,又称公开密钥。指加密和解密用两把不同的秘钥。用发送方用公钥加密,接收方用私钥解密。通信双方,首先将自己的公钥发送给对方,然后通信的时候,爽方用私钥进行解密。
- 这种方式安全性大大提升,但是使用公开密钥的开销较大,并且速度要慢。
混合加密机制
- 首先用公开秘钥传输双方的共享秘钥,保证共享秘钥安全传输到对方
- 后序使用共享秘钥进行传输
这样既保证了安全传输,又避免了单一使用公开秘钥使得传输速度非常慢
2. HTTPS是建立在SSL/TLS上的
- SSL(Secure Server Layer)
- TLS (Transport Layer Security)
3. HTTPS简要过程
- 客户端发送请求到服务端
- 服务端返回公钥和证书到客户端
- 客户端接收后会验证证书的安全性,如果通过则会随机生成一个随机数,用公钥对其加密,发送到服务端
- 服务端接受到这个加密后的随机数后会用私钥对其解密得到真正的随机数,随后用这个随机数当做私钥对需要发送的数据进行对称加密
- 客户端在接收到加密后的数据使用私钥(即生成的随机值)对数据进行解密并且解析数据呈现结果给客户
- SSL加密建立
还有一个详细点的版本是这个
- 客户端发送请求给服务器端,并且携带自己支持的加密算法
- 服务器端将客户端支持的算法和自己的比较,如不匹配就断开连接,如果匹配就将支持的算法、公钥和证书发送给客户端,包括证书时间、日期、颁发机构
- 客户端验证通过后(或者用户接受了不信任的证书),客户端生成一个随机字符串,然后用服务端的公钥进行加密。生成握手信息,用约定好的hash算法,对握手信息取hash值,用刚刚的随机字符串对握手信息及握手信息hash值进行加密,把结果传给服务器端。
- 服务器端用私钥进行解密,解得客户端随机生成的字符串,然后用该字符串对握手信息进行hash,看和传过来的hash值是否相同,如果相同则说明信息没有被修改。服务器端验证完客户端的信息后,同样用随机字符串加密握手信息和握手信息的hash值发送给客i户端
- 客户端接收到服务器端发回来的握手信息后,用一开始生成的随机字符串对密文进行解密,得到握手信息和握手信息的hash值,以服务器端同样的方法对握手信息进行验证,验证通过后。握手完毕。随后就用随机字符串进行对称加密通信。
总的来说就是
先用非对称加密算法传递对称加密算法,随后用对称加密算法进行通信
二. HTTP和HTTPS的区别
- HTTPS需要用到CA证书,证书要跟数字证书机构购买,需要一定费用
- HTTP是明文传输的,HTTPS是具有安全性的SSL加密的传输协议
- HTTP端口80,HTTPS端口443
- HTTP连接很简单是无连接的,HTTPS是由SSL + HTTP协议构建的可进行加密、身份认证的网络协议,比HTTP安全
详解见《图解HTTP》