http的缺点
- 明文
- 不安全
https(s的秘密)
- http与https最的区别就是多了个s
- http over tcp/ip 变成了 http over ssl/tls
- 下层的传输协议tcp/ip换成了ssl/tls
SSL/TLS
- SSL
- 安全套接层,OSI模型处于第五层(会话层)
- 网景公司1994年发明
- v2/v3 两个版本
- TLS
- 1999年更名TLS,标准化
- 版本从1.0开始,TLS1.0 = SSL3.1
- 目前广泛使用的是TLS1.2
通信安全
机密性
对称加密
-
特点:
- 加密和解密使用的密钥是同一个
- RC4 DES 3DES(不安全)
- AES ChaCha20
-
加密分组模式
- 让算法用固定长度密钥加密任意长度明文,小秘密(密钥)变成大秘密(密文)
- 早期有ECB CBC CFB OFB,陆续发现有安全漏洞
- 最新的分组模式被称为AEAD(Authenticate Encryption with Associated Data)加密的同时增加了认证的功能
- GCM CCM Poly1305
-
对称加密的问题
- 密钥如何安全传递
- 密钥交换
非对称加密
- 特点:
- 两个密钥: 公钥,私钥;私钥必须保密
- 公钥加密只能用私钥解密;私钥加密只能用公钥解密
- DH DSA RSA ECC
- RSA: 整数分解
- ECC: 椭圆曲线离散对数
- 非对称加密的问题
- 加解密速度太慢,影响页面打开速度
- 由于公钥是公开的,所以只能保证一端是安全的
- 即浏览器发送给服务器的数据是安全的
混合加密
对称加密+非对称加密
- 特点
- 通信开始时使用非对称加密解决密钥交换问题
- 使用随机数产生对称加密算法使用的“公钥”
- 公钥加密随机数
- 服务器私钥解密,得到会话公钥
- 后续通信使用对称加密
完整性
实现完整性的手段:摘要算法(散列函数,哈希函数)
摘要算法
-
特点
- 把任意长度数据压缩成固定长度且独一无二的“摘要”字符串;数字指纹
- MD5 SHA-1(安全强度低)
- SHA2 (SHA224/SHA256/SHA384)
-
加密传输
- 数字摘要如果明文传输,则有可能更改原文的同时把摘要也一起修改
- 完整性必须建立在机密性之上
- 使用会话密钥加密消息和摘要
- 术语:哈希消息认证码(HMAC)
身份认证
网站需要确认服务器的身份(黑客可以伪造服务器身份与你通信)
解决身份认证的手段:数字签名
数字签名
- 原理:
- 私钥加密原文的摘要,生成数字签名
- 数字签名只有公钥才能解开
- 浏览器拿到摘要再与原文进行对比验证完整性
数字证书与CA
解决公钥信任问题(防止黑客伪造公钥)
-
CA
- Certificate Authority(证书认证机构)
- 给各个公钥签名生成数字证书
-
数字证书
- 包含序列号、用途、颁发着、有效时间等
-
CA如何证明自己
- 小CA让大CA签名认证
- 最后是Root CA,自己证明自己
- 浏览器和操作系统内置各大CA根证书
不可否认
数字签名保证了身份认证和不可否认
https握手过程
TSL1.2
- ECDHE: 当前主流的握手协议
第一次握手
Client Hello
- client random
- TLS版本号
- 加密套件列表
第二次握手
Server Hello
- server random
- 确认TSL版本号
- 选择一个合适的加密套件(ECDHE)
- 发送证书certificate(证明自己的身份)
- 由于选择了
ECDHE
算法,会在发送证书后,发送「Server Key Exchange」,这个步骤做了以下三件事- 5.1 选择名为
named_curve
的椭圆曲线 - 5.2 生成随机数作为服务端椭圆曲线的私钥,保存到本地
- 5.3 根据基点G和私钥计算出服务端椭圆曲线公钥,发送给客户端(server params)
- 5.1 选择名为
- 为保证椭圆曲线公钥不被更改,服务端采用RSA签名算法给公钥做个签名··
- Server Hello Done!
第三次握手
验证证书有效性
- 逐级验证,确认真实性
- 证书公钥验证签名
Client Key Change
- 客户端按照密码套件要求,也生成一个椭圆曲线公钥client params
- 用Client Key Change发给服务器
Pre-Master
- Client Params + Server Params 客户端和服务端都有了
- ECDHE算法计算出Pre-Master(随机数)预主密钥
Master
- Client Random + Server Random + Pre-Master ==> Master主密钥
Change Cipher Spec
- 客户端发送Change Cipher Spec告诉服务器后续使用对称算法加密通信
- 客户端发送Encrypted Handshare Message,把之前发送的数据做个摘要,再用对称密钥加密一下,让服务端验证本次生成的密钥是否可以正常使用
第四次握手
- 服务器发送Change Cipher Spec和Encrypted Handshare Message,如果双发验证加密解密都没有问题,握手正式完成