首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >了解TLS/SSL协议

了解TLS/SSL协议
EN

Stack Overflow用户
提问于 2010-12-03 06:09:09
回答 2查看 4.3K关注 0票数 5

我目前正在上一门关于安全和密码学的大学课程,我们正在做的一个项目涉及实现一个基本的TLS套接字。

因此,我已经使用我的教科书和最新的RFC学习了TLS协议,所以我对TLS/SSL的工作原理以及TLS记录格式是如何逐字节进行布局有了很好的理解。

因此,开始时,我决定编写一个服务器程序,该程序侦听端口443并接受传入的安全HTTP连接。它所做的一切就是接受客户端连接,然后打印出客户端发送的初始消息的十六进制转储。

但是当我使用网页浏览器(Firefox)连接到我的服务器时,浏览器发送给我的字节流让我完全迷惑了。According to the RFC,客户端必须做的第一件事就是发送ClientHello消息。所有消息都必须封装为TLS记录格式,格式应该是这样的(使用RFC使用的C-ish表示法):

代码语言:javascript
复制
  struct {
      ContentType type;
      ProtocolVersion version;
      uint16 length;
      opaque fragment[TLSPlaintext.length];
  } TLSPlaintext;

ContentType字段是必须为以下类型之一的单个枚举值:change_cipher_spec = 0x14, alert = 0x15, handshake = 0x16, application_data = 0x17

因此,由于客户端必须做的第一件事是发送ClientHello消息,这是握手的一部分,因此我期望字节流中的第一个字节是0x16,这表明这是一个握手消息。

但是,我的浏览器发送的实际字节流是:

代码语言:javascript
复制
80 55 01 03 00 00 3c 00 00 00 10 00 00 88 00 00 87 00 00 39 00 00 
38 00 00 84 00 00 35 00 00 45 00 00 44 00 00 33 00 00 32 00 00 96 
00 00 41 00 00 04 00 00 05 00 00 2f 00 00 16 00 00 13 00 fe ff 00 
00 0a 00 00 ff 07 99 58 ad 17 f3 17 23 be 63 8c 6d cb 9b 5f 6f 

我无法理解这个字节流,即使在RFC上倾注了几个小时之后。我读到的关于TLS的所有内容都告诉我,第一个字节应该是表示握手的0x16,然后是两个字节的版本字段,然后是两个字节的记录长度字段。但是这个字节流以一个0x80 0x55开头,这对我来说毫无意义。

有谁能弄清楚这是怎么回事吗?我是不是误解了TLS协议的某些部分?

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2010-12-03 09:13:43

您看到的是SSL版本2兼容的hello。看看appendix E of RFC 5246吧。我不相信最新版本的火狐会发送这个,他们只会发送你所期待的V3问候格式。

票数 9
EN

Stack Overflow用户

发布于 2010-12-03 07:03:09

Wireshark有一个用于HTTPS/TLS/SSL的解析器,这将能够理解握手的纯文本部分。

还要确保读取The First few milliseconds of an HTTPS connection。

票数 5
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/4340492

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档