Https抓包分析
抓包分析https数据包
说明
192.168.123.1为服务端192.168.123.48为客户端
抓包分析
1. 三次握手建立通信
https使用tcp/ip协议, 客户端和服务端进行通信前也需要经过基础的三次握手
2. 客户端发送Client Hello
该请求将客户端支持的所有SSL/TSL协议版本, 加密算法和一个Random随机数发送给服务端
3. 服务端Server Hello
服务端发送一个Server Hello请求, 表示自己从客户端的Client Hello信息中选择的加密算法, 并返回了自己生成的随机数
4. 服务端 Server Hello Done
服务端发送Server Hello Done表示当前Hello过程结束, 该请求包含了服务端的SSL证书信息
5. 客户端Client Key Exchange
Change Cipher Spec: 客户端通知服务端后面再发送的消息都会使用前面协商出来的秘钥加密了,是一条事件消息
Encrypted Handshake Message: 这一步对应的是 Client Finish 消息,客户端握手结束通知, 表示客户端的握手阶段已经结束
客户端使用服务器发送过来的Certificate中的公钥和不重数(随机数)生成前主秘钥并发送给服务器
6. 服务端客户端秘钥生成
客户端将前主秘钥使用
certificate中的公钥加密后发送给服务端后, 客户端使用certificate中的私钥解密之后得到前主秘钥客户端和服务端使用相同前主秘钥和算法生成主秘钥
客户端和服务端再次通过相同地主秘钥生成四个密码
MAC为报文鉴定码E1: 客户端发送到服务端信息加密密码M1: 客户端到服务端的MAC的加密密码E2: 服务端发送给客户端信息加密密码M2: 服务端到客户端的MAC加密密码
7. 服务端 New Session Ticket
New Session Ticket: 来确认密钥交换和认证过程已经成功了。可以传输加密的数据了
Change Cipher Spec: 服务端通知客户端后面再发送的消息都会使用前面协商出来的秘钥加密了
Encrypted Handshake Message: 服务端握手结束通知, 表示服务端的
SSL握手阶段已经结束
8. 客户端和服务端通信
https数据包格式
TLS报文格式为: 类型 + 版本 + 长度 + (数据 + MAC)
其中数据+MAC是加密的, 秘钥使用的是前面的E
其中 MAC = hash(数据 + M) M是前面提到的MAC的加密密码
附加
数字证书内容
包括了加密后服务器的公钥、权威机构的信息、服务器域名,还有经过CA私钥签名之后的证书内容(经过先通过Hash函数计算得到证书数字摘要,然后用权威机构私钥加密数字摘要得到数字签名),签名计算方法以及证书对应的域名。
配置https
1. 获取SSL/TSL证书
- 域名服务器厂商提供
- FreeSSL
- OpenSSL自签证书 (不被浏览器信任)
- 购买付费证书, 证书价格一般都很高
2. 配置证书
nginx.conf
1 | server { |
声明
如有错误请联系作者更正
