我正在实现一个客户端服务器程序,其中客户端将 HTTP 消息发送到服务器。它可以是 HTTP 或 HTTPS 在大消息的情况下,例如使用 HTTP 传输文件,客户端一次发送整个消息,而它以多个片段到达服务器(网络完成)。我等待整个消息的到来,并继续合并它,以便我得到整个消息。使用我在 HTTP 消息中发送的参数找到内容长度。但在 HTTPS 的情况下,无法知道整个消息是否已到达。如果我解密片段,它会返回垃圾值。我认为这是因为在解密之前必须加入整个加密消息。如何识别整个消息是否已到达 HTTPS 我正在使用 SSL 库并使用 Windows 套接字。
问问题
811 次
1 回答
2
SSL 将纯数据加密成块,然后将这些块单独传输给另一方。接收方需要读取原始套接字数据并在它到达时将其泵入 SSL 解密引擎。当引擎对给定块有足够的字节时,它会解密该块并仅输出该块的纯数据。因此,您只需继续读取套接字数据并将其泵入解密引擎,缓冲输出的任何纯数据,直到遇到解密的<CRLF><CRLF>
序列表示 HTTP 消息标头的结尾,然后您处理这些标头以确定 HTTP 消息正文是否存在以及它是如何编码的。如果存在消息体,请继续读取套接字数据,将其泵入解密引擎,并缓冲输出的纯数据,直到遇到消息体的结尾。 RFC 2616 第 4.4 节 - “消息长度”描述了如何确定 HTTP 消息体的编码(在应用解密之后)以及终止消息体的条件。
换句话说,您不应该寻找加密套接字消息的结尾。您应该解密收到的所有内容,直到检测到解密的 HTTP 消息结束。
于 2013-06-04T18:10:49.580 回答