如何在HTTPS的应用层解密数据?

时间:2014-05-25 20:30:09

标签: ssl encryption https lisp rc4-cipher

我正在编写一个带有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。然后我发送一个" Change Cipher Spec"和"完成"从服务器。到目前为止,一切似乎都很好。

然后我从浏览器开始使用#(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这样的东西。我有什么问题?

感谢。

1 个答案:

答案 0 :(得分:1)

RC4是一个流密码,根据RFC 5246, section 6.2.3.1,"对于不使用同步向量(例如RC4)的流密码,从一条记录的末尾开始的流密码状态就是简单的用于后续数据包。"

因此,您解密的第一个记录是FINISHED消息,您解密的第一个应用程序数据应该是解密FINISHED消息后留下的RC4状态。