基于wireshark抓包的分析
首先使用wireshark并且打开浏览器,打开百度(百度使用的是HTTPS加密),随意输入关键词浏览。
我这里将抓到的包进行过滤。过滤规则如下
ip.addr == 115.239.210.27 && ssl
- 1
下面用图来描述一下上面抓包所看到的流程。
1. Client Hello
打开抓包的详细,如下。
不难看出,这一握手过程,客户端以明文形式传输了如下信息:
- 版本信息(TLS 1.2)
- 随机数
- Session ID(用于加快握手过程,可参考TLS会话复用)
- 加密套
- 压缩算法
- 其它一些扩展的(Extension),比如签名算法,服务器名称(本例为sp1.baidu.com);
Server hello
这一阶段,服务端返回所选择的协议版本(Version),加密套,压缩算法,随机数,Session ID等;
Change Cipher Spec和Encrypted Handshake Message
从字面上来看,其含义是:更换秘钥规格和加密握手信息。这里感觉不需要进行说明描述。
证书校验过程去哪了呢
细心的笔者在阅读本文时,可能发现了,不是说HTTPS是要验证通信方的身份的吗?可是为什么上面没有看到这个流程呢。
其实啊,这个就是TLS协议的会话缓存机制。引用一下MSDN上的介绍。
Resuming a Secure Session by Using TLS
1. The client sends a “Client hello” message using the Session ID of the session to be resumed.
2. The server checks its session cache for a matching Session ID. If a match is found, and the server is able to resume the session, it sends a “Server hello” message with the Session ID.
Note If a session ID match is not found, the server generates a new session ID and the TLS client and server perform a full handshake.
3. Client and server must exchange “Change cipher spec” messages and send “Client finished” and “Server finished” messages.
4. Client and server can now resume application data exchange over the secure channel.
翻译过来大致含义是:
客户端使用要恢复的会话的会话ID发送“客户端问候”消息。
服务器检查其会话缓存中是否有匹配的会话ID。如果发现匹配,并且服务器能够恢复会话,则发送具有会话ID的“服务器问候”消息。
注意 如果找不到会话ID匹配,服务器将生成一个新的会话ID和TLS客户端和服务器执行完整的握手。
客户端和服务器必须交换“更改密码规范”消息并发送“客户端完成”和“服务器完成”消息。
客户端和服务器现在可以通过安全通道恢复应用程序数据交换。
百度使用了会话缓存的这种机制来加速https握手的速度!但是这个怎么进行配置,笔者没有深究下去,有好资料大家可以推荐给我~~~~
wireshark解密HTTPS消息
笔者在定位过程中,查阅了很多关于wireshark解密HTTPS消息的办法。共享一下。
很明显,https是加密过的,其中涉及到密钥交换算法,常见的2种密钥交换算法有RSA和DH算法。使用DH算法进行密钥交换的几乎不可能解密(不通过pre-master-secret.log的话),具体原因可以参考:为什么Wireshark无法解密HTTPS数据。