我正在用 Lisp 编写一个 Web 服务器来处理 HTTPS 请求。我遵循TLS 1.2并且已经完成了握手过程。我选择的密码套件是 TLS_RSA_WITH_RC4_128_SHA。我已经计算了client_write_MAC_secret、server_write_MAC_secret、client_write_key、server_write_key。这些密钥似乎是正确的,因为我可以从浏览器解密“完成”消息并验证里面的数据。我还验证了记录层的 HMAC。然后我从服务器发送“更改密码规范”和“完成”。到目前为止,一切似乎都运行良好。
然后我从浏览器收到消息,以#(23 3 3 1 61 ...)
. 23
表示它是一个应用程序数据。#(3 3)
表示 TLS 1.2。#(1 61)
表示长度是 256+61=317 这是正确的,因为剩下的数据实际上是 317 字节长。我的问题来了:我使用“client_write_key”使用 RC4 解密了这 317 个字节,然后我得到了#(148 104 81 182 67 111 28 201 202 50 207 57 126 209 19 ...)
无法转换为文本的数据。我想我应该得到类似的东西GET / HTTP/1.1
。我怎么了?
谢谢。