赞
踩
虽然之前在学校学习过《计算机网络》课程,对https有所认识,但是当笔者最近在定位一个网络问题时,发现学习不够深入。为此深入了解了一下https的流程。这里做一下总结和分享。
http有如下的不足(参考自:【日本】上野 宣《图解HTTP》):
为了解决这些问题,需要在http上加入加密处理和认证等机制,因此https应运而生。
首先使用wireshark并且打开浏览器,打开百度(百度使用的是HTTPS加密),随意输入关键词浏览。
我这里将抓到的包进行过滤。过滤规则如下
ip.addr == 115.239.210.27 && ssl
下面用图来描述一下上面抓包所看到的流程。
打开抓包的详细,如下。
不难看出,这一握手过程,客户端以明文形式传输了如下信息:
这一阶段,服务端返回所选择的协议版本(Version),加密套,压缩算法,随机数,Session ID等;
从字面上来看,其含义是:更换秘钥规格和加密握手信息。这里感觉不需要进行说明描述。
细心的笔者在阅读本文时,可能发现了,不是说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消息的办法。共享一下。
很明显,https是加密过的,其中涉及到密钥交换算法,常见的2种密钥交换算法有RSA和DH算法。使用DH算法进行密钥交换的几乎不可能解密(不通过pre-master-secret.log的话),具体原因可以参考:为什么Wireshark无法解密HTTPS数据。
除了文中注明的以外,本文还参考了如下资料:
HTTPS协议详解(四):TLS/SSL握手过程(不得不说这篇写的很详细啊!部分内容参考自这里)
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。