HTTPS 原理解析
HTTPS 保证了 Web 数据传输过程中的传输安全
HTTPS:采用 对称加密 和 非对称加密 结合以及数字证书的方式来保护浏览器和服务端之间的通信安全。
不进行加密
明文传输:在客户端和服务器数据传输过程中,黑客可以获取到传输的账号密码,非常不安全
注意:
明文就相当于裸奔
对称加密
服务器每次发送真实数据前,会先生成一把密钥传输(以明文方式传输密钥容易被劫持)给客户端,服务器给客户端发送的真实数据会先用这把密钥进行加密,客户端收到加密数据后再用密钥进行解密(客户端给服务器发送数据同理)
- 对客户端要发送的数据用秘钥进行加密
- 以密文形式放给服务器端
- 服务器端对密文用秘钥进行解密
注意
F(K,data)=X
F(K,X)=data
对称加密,K 只有一个,客户端和服务器端都是用 K 进行加密解密
K 可能会被劫持,因此不安全
非对称加密
非对称加密:
客户端和服务器都有两把密钥,一把公钥一把私钥(公钥加密的数据只有私钥才能解密,私钥加密的数据只有公钥才能解密),服务器在给客户端发送真实数据前,先用客户端明文传输给服务器的公钥进行加密,客户端收到后用自己的私钥进行解密,反之同理
- 对客户端要发送的数据用公钥进行加密
- 以密文形式放给服务器端
- 服务器端对密文用私钥进行解密(反之同理)
注意
F(pK,data)=X
F(sK,X)=data
F(sk,data)=Y
F(pK,Y)=data
非对称加密,有两个秘钥,一个公钥一个秘钥。pK 所有人都可以拿,sK 只有服务器端有。
服务器端到客户端不安全
对称和非对称结合
服务器端有公钥和私钥
- 客户端 向 服务器端 索要 pK
- 服务器端 返回 pK
- 使用公钥对相关字符串(K)进行加密 Y 之后上传给服务器端
- 服务器端对 Y 进行解密 获取到字符串(K)
- 该字符串(K)就是为 后续进行对称加密的 公钥(K)
注意
中间人劫持,当客户端向服务器端索要公钥时,被中间人拦截,返回假的公钥 k
对称+非对称+CA 机构 认证
CA:存放 cPK 和 cSK
服务器端:PK 和 SK
- 客户端 向 服务器端 索要 license
- 服务器端:F(cSK,PK)=license(CA 端运行返回给服务器端 license),返回 license
- cPK(写死在客户端,不需要再去 CA 机构获取)
- 然后通过客户端 F(license,cPK)=PK 获取 PK
详细步骤
访问百度为例:
- 1.客户端-->服务器端 支持 SSL 版本,非对称算法,随机数 1
- 2.服务器端-->客户端 定下 SSL 使用版本,对称算法,随机数 2,证书(从 CA 获取)
- 3.客户端 证书认证
- 4.客户端-->服务器端 随机数 3 Hash(随机数 1,随机数 2)==XXX
- 5.服务器端 判断 XXX==Hash(随机数 1,随机数 2),查看客户端传来的 XXX 和自身 hash 计算的 XXX 是否一致,认证成功后,随机数 1,2,3 生成 K
- 6.服务器端-->客户端 hash(第一,第二,第四步) 所有的值生成一个数值 ZZ
- 7.客户端 也生成一个数值 ZZ hash(第一,第二,第四步) =ZZ,查看本地生成的是否和服务器端传送的一致,一致则也用随机数 1,2,3 生成一个 K,后续使用 K 进行对称加密