我遵循了 Turn a simple socket into an SSL socket 中给出的答案使用 SSL 用 C 语言编写一个简单的 Web 服务器。这在我使用 SSL_write() 时工作正常。但是当我在我的服务器中使用 sendfile() 系统调用并使用 firefox 访问页面时,firefox 显示以下错误
Secure Connection Failed
An error occurred during a connection to localhost:16000. SSL received a record that exceeded the maximum permissible length. Error code: SSL_ERROR_RX_RECORD_TOO_LONG
当我使用 SSL_write() 发送 html 页面的内容时,内容毫无问题地显示在浏览器中。但是当我使用 sendfile() 时出现问题。所以据我所知, sendfile() 导致了这个错误。
我想将文件的内容直接发送到套接字(例如 HTML 页面、图像等)。有人可以告诉我如何纠正此错误并使用 sendfile() 吗?或者我可以使用 SSL 替代 sendfile() 吗?
最佳答案
使用 OpenSSL,SSL 状态保存在用户空间,SSL_write
将根据此状态加密数据并更新状态,将加密数据放入 SSL 记录,然后写入此 SSL 记录到文件描述符。使用 sendfile
只是绕过所有这些并将普通的未加密数据直接写入文件描述符,与简单的 write
而不是 SSL_write
一样做。这导致对等方接收没有任何 SSL 记录容器的纯数据。 peert 将尝试将这些数据解释为 SSL 记录并失败,并出现您所看到的奇怪错误。
关于c - 将 sendfile() 与 SSL 结合使用时出现问题,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/50792406/