概述
网络安全3要素
- 机密性
- 完整性
- 可靠性
HTTP存在问题
- 数据在网络中传输使用的明文传输,不能保证数据的机密性
- 无法实现数据传输的身份认证,无法防止数据被篡改
HTTPS
-
HTTPS (全称:Hypertext Transfer Protocol Secure),是以安全为目标的 HTTP 通道,在HTTP的基础上通过传输加密和身份认证保证了传输过程的安全性。HTTPS 在HTTP 的基础下加入SSL,HTTPS 的安全基础是 SSL,因此加密的详细内容就需要 SSL。
-
HTTPS=HTTP+SSL
-
SSL:提供数据加密以及身份认证
-
SSL3.0后更名为TLS1.0,安全传输层协议(TLS)用于在两个通信应用程序之间提供保密性和数据完整性。
- 最新版本为TLS1.3,应用最多的版本为TLS1.2
算法
名词
-
明文:
- 未经过处理的数据,原始数据
- 比如:account=admin&pwd=ad123
-
密钥
- 一般为一串字符串
- 比如:slkdu09qdosikjcp9saixsa
-
密文:
- 将明文经过密钥配合加密算法生成的字符串(乱码),通过密文无法识别明文的数据
- 比如:sadsad342dsadw389du980-a0x[ax]
-
加密
- 由明文经过密钥配合加密算法生成密文的过程;
-
解密
- 由密文经过密钥配合解密算法生成明文的过程
对称加密
-
加密与解密使用同一个密钥
-
优点:
- 算法相对简单,适用于大量数据加密与解密,效率较高
-
缺点:
- 存在密钥传输泄露风险
-
常用对称加密算法:
- DES、3DES、AES、SM1、RC等
非对称加密
-
加密与解密使用不同密钥,分别是公钥与私钥,公钥一般为公开的,私钥一般自行保存;
-
公钥与私钥存在依存关系,一个作为加密密钥,则另外一个需要作为解密密钥;
- 比如:使用公钥作为加密密钥,则需要私钥作为解密密钥;使用私钥作为加密密钥,则需要使用公钥作为解密密钥;
-
优点:
- 不存在解密密钥传输风险
-
缺点:
- 算法较复杂,不适合大量数据的加密与解密,效率较低
-
常用的非对称加密算法:
- RSA、Elgamat、ECC、SM2等
摘要算法
-
将明文经过摘要算法得到一个hash值,相同的明文通过摘要算法得到的hash值相同,不会受时间地点等因素影响;
-
将明文经过摘要算法生成hash值后,不能将hash值还原为明文;
-
摘要算法常用于密码数据处理;
-
常用摘要算法:
- MD5、SHA1、SHA256、SHA384、SHA512等
certutil -hashfile 目标文件路径 摘要算法
使用加密算法和摘要算法案例
客户端向服务器发送数据
- 服务器产生非对称加密的公钥:X和私钥:Y,并将公钥X发送给客户端;
- 客户端收到公钥:X后,存储到本地,生成对称密钥:M,将对称密钥:M使用服务器公钥:X进行非对称加密生成
密钥信封:N,将密钥信封发送给服务器; - 服务器收到密钥信封:N,使用服务器私钥:Y将密钥信封进行解密,还原为对称密钥:M,完成对称密钥协商过程;
- 客户端将要发送给服务器的原始数据:T,经过摘要算法生成hash值:G,将原始数据T和hash值G经过对称密钥M进行对称加密生成密文:E,将密文E发送给服务器;
- 服务器收到密文E后,使用对称密钥M解密还原为原始数据T和hash值G,将原始数据T通过相同摘要算法生成新的hash值:Z,将新的hash值Z与收到的hash值G进行比对,相同则原始数据完整,未被篡改;
中间人攻击
数字证书
PKI
-
公钥基础设施,用来实现基于公钥密码体制的密钥和证书的产生、管理、存储、分发和撤销等功能。
-
CA(认证机构)是PKI的核心,负责管理PKI中所有用户(包括各种应用程序)的数字证书的生成、分发、验证和撤销。
-
RA(注册机构)接受用户的请求,负责将用户的有关申请信息存档备案,并存储在数据库中,等待审核,并将审核通过的证书请求发送给证书颁发机构。RA分担了CA的部分任务,使管理变得更方便。
-
数字证书用于用户的身份验证。
-
数字证书包含信息:
- 使用者的公钥值
- 使用者 标识信息(如名称和电子邮件地址)
- 有效期(证书的有效时间)
- 颁发者标识信息
- 颁发者的数字签名
数据安全传输案例
Alice向Bob主机发送数据
- Alice生成公钥和私钥,将公钥发送给Bob;
- Bob生成公钥和私钥,将公钥发送给Alice;
- Alice将原始数据摘要算法生成hash值(信息摘要),将hash值经过自己私钥加密生成数字签名;
- Alice将对称密钥使用Bob的公钥进行加密生成密钥信封,发送给Bob;
- Alice将原始数据+数字签名+Alice证书通过对称密钥加密生成加密信息,发送给Bob;
- Bob收到密钥信封后,使用自己私钥进行解密,得到对称密钥;
- Bob收到加密信息后,使用对称密钥进行解密,得到原始数据+数字签名+Alice证书;
- Bob检查Alice证书是否身份正确,颁发机构是的合法权威;
- Bob将数字签名使用Alice公钥进行解密,得到旧的hash值;
- Bob将原始数据经过相同摘要算法生成新的hash值,对比旧的hash,得出数据是否完整传输结果;
Alice私钥:将摘要信息进行加密Alice公钥:摘要信息进行解密Bob私钥:对对称密钥进行解密Bob公钥:对对称密钥进行加密对称密钥:对原始数据、数字签名、数字证书进行加密和加密
xampp证书
- 访问xampp服务器网站资源,提示不安全(证书验证不通过)
- 证书配置查看
- 服务器私钥
TLS数据交互过程
第一阶段:客户端发送握手消息
-
#客户端产生随机数X,发送给服务器 -
Random: 7b9daa96962750e1429ccca58f1c6568d3244b418ee99b9abedebf0c2f51129a -
#客户端将支持的加密套件发送给服务器 -
Cipher Suites (16 suites)
第二阶段:服务器响应握手消息,将服务器证书发送给客户端,并进行DH密钥协商
- TLSv1.2 Record Layer: Handshake Protocol: Server Hello:服务器响应握手消息,从客户端发送的加密套件中,选择自己支持的安全性最高的加密套件
-
#服务器产生随机数Y,发送给客户端 -
Random: 2ee6d05519b6349edd691dcb43ffb486f6f44ea15f4d0d09ebe0215e42e1ec09 -
#服务器选择自己支持的安全性最高的加密套件 -
Cipher Suite: TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384 (0xc030) -
ECDHE:密钥交互算法(协商算法) -
RSA:非对称算法 -
AES_256_GCM:对称算法 -
SHA384:摘要算法
- LSv1.2 Record Layer: Handshake Protocol: Certificate:服务器将自己的证书信息发送给客户端
服务器将自己的证书数据加密发送给客户端,客户端收到证书数据后,验证证书是否合法,如果不合法,则给用户安全提示
- TLSv1.2 Record Layer: Handshake Protocol: Server Key Exchange:服务器向客户端请求进行密钥交换,并将自己的pubkey发送给客户端
Pubkey: 0415c7e141eaf5491e819a4d2c780ecf14d3164a9f3727ec1b81959bcb6cad33e0fdc455…
- TLSv1.2 Record Layer: Handshake Protocol: Server Hello Done:结束当前握手消息
第三阶段:客户端进行密钥协商完成DH过程,改变密码规范,启用加密参数
- TLSv1.2 Record Layer: Handshake Protocol: Client Key Exchange:客户端响应服务器的密钥协商过程,将自己的pubkey发送给服务
-
Pubkey: 044f8c5d7df2760506e50f4947c0b7b0de770e470145af99fa9f9a2ed8d2c3a31c1e19e7… -
客户端随机数X,服务器随机数Y,服务器pubkey->对称密钥 -
客户端随机数X,服务器随机数Y,客户端pubkey->对称密钥 -
客户端和服务器完成对称密钥协商过程
- TLSv1.2 Record Layer: Change Cipher Spec Protocol: Change Cipher Spec:客户端向服务器请求更改密码规范
- TLSv1.2 Record Layer: Handshake Protocol: Encrypted Handshake Message:客户端向服务器请求启用加密参数,加密握手消息
第四阶段:服务器响应客户端改变密码规范,启用加密参数
- TLSv1.2 Record Layer: Handshake Protocol: New Session Ticket:会话票据
- TLSv1.2 Record Layer: Change Cipher Spec Protocol: Change Cipher Spec:服务器向客户端响应更改密码规范
- TLSv1.2 Record Layer: Handshake Protocol: Encrypted Handshake Message:服务器向客户端响应启用密码参数,加密握手消息
客户端将自己的随机数X发送给服务器,发送自己的pubkey给服务器服务器根据自己的随机数Y、客户端随机数X以及客户端pubkey得到对称密钥服务器将自己的随机数Y发送给客户端,发送自己的pubkey给客户端客户端根据自己的随机数X、服务器随机数Y以及服务器pubkey得到对称密钥