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 { |
声明
如有错误请联系作者更正