本文引用自霍格沃兹测试开发学社录播课
HTTPS 的通信加解密过程,
证书为什么更安全?
霍格沃兹测试开发学社
http://ceshiren.com
经典面试题
- HTTPS 的通信加解密过程,证书为什么更安全?
考察点
- 《计算机网络》相关知识
- 了解 HTTPS 协议加解密的过程
- 了解数字证书认证的过程
技术点
- 对称加密和非对称加密
- HTTPS 协议的加解密过程
- 数字证书认证过程
对称加密和非对称加密
- 对称加密:加密和解密用的是同样的密钥
- 非对称加密:加密和解密使用不同的密钥。使用一对密钥,公钥(public key)是每个人都能拿到公开的,私钥(private key)只有自己知道。
对称加密过程
@startuml
title 对称加密过程
actor 客户端 as client
participant 服务端 as server
client -> server : 发送一个随机数 client_random 和一个加密的方法列表
client <-- server : 返回另一个随机数 server_random 和加密方法
client -> client : 用这个加密方法将两个随机数混合起来生成密钥
server <-- server : 用这个加密方法将两个随机数混合起来生成密钥
@enduml
非对称加密过程
@startuml
title 非对称加密过程
actor 客户端 as client
participant 服务端 as server
client -> server : 发送一个随机数 client_random 和一个加密的方法列表
client <-- server : 返回另一个随机数 server_random 、加密方法和服务端公钥
client -> client : 使用服务端公钥加密把两个随机数混合起来生成会话密钥
client -> server : 发送会话密钥
server <-- server : 使用服务端私钥解密得到会话密钥
@enduml
数字证书
- 数字证书是一种网络上证明持有者身份的文件,同时还包含有公钥
- 数字证书在 SSL/TLS 传输过程中扮演身份认证和密钥分发的功能
数字证书认证过程
@startuml
title 数字证书认证过程
participant 第三方认证机构CA as CA
participant 服务端 as server
server -> CA : 这是我的公钥匙,请给我制作一份数字证书
CA <-- CA : 把持有者的公钥、⽤途、颁发者、有效时间等信息打包进⾏ Hash 计算得到⼀个 Hash 值
CA <-- CA : 使⽤⾃⼰的私钥将该 Hash 值加密(签名)
CA <-- CA : 生成数字证书
server <-- CA : 颁发数字证书
actor 客户端 as client
server -> client : 发送数字证书
client -> client : 验证数字证书
@enduml
@startuml
title HTTPS 协议的加解密过程
actor 客户端 as client
participant 服务端 as server
client -> server : ClientHello(你好呀,我请求建立 HTTPS 安全连接,包里是我支持的 SSL/TLS 版本和加密组件)
client <-- server : SeverHello(收到,我选择好 SSL/TLS 版本和加密组件了,放包里了)
client <-- server : Certificate(这是我的数字证书,我的公开密钥在证书里)
client <-- server : ServerHelloDone(我的握手信息已经发送完毕了~)
client -> client : 验证下服务端的数字证书
client -> client : ClientKeyExchange(我先来生成一个对称加密秘钥 master_secret,然后用服务端数字证书中的公开密钥来加密这个 master_secret)
client -> server : ChangeCipherSpec(这是用你的公开密钥加密过的会话密钥,请查收)
client -> server : Client Finish(没问题的话后面我给你发的消息就都用会话密钥来加密了哈~)
server <-- server : 使用我的私有密钥来解密一下,得到 master_secret
client <-- server : ChangeCipherSpec(我已经得到会话密钥了,之后的消息我就都加密发送了)
client <-- server : Server Finish(完毕)
@enduml
答案总结
问题:HTTPS 的通信加解密过程,证书为什么更安全?
- HTTPS 的通信加解密过程基本是客户端先向服务端提出通信请求;然后服务端把包含了公钥的数字证书发给客户端;客户端拿到数字证书后先验证证书的可靠性,验证通过后生成对称加密的会话密钥,并把会话密钥使用服务端的公钥进行加密后发给服务端;服务端收到加密后的会话密钥后,使用私钥解密,得到会话密钥;然后双方使用会话密钥加密通信信息,收到信息后同样适用会话密钥进行解密即可。
- 数字证书可以让服务器向浏览器证明自己的身份避免被假冒,并且可以安全的把公钥传给浏览器,所以使用数字证书可以更加安全。: