遇到0x1a(替换字符)时,HTTPS文件传输停止

时间:2019-04-20 15:16:06

标签: https server openssl

我正在尝试使用OpenSSL服务器发送二进制文件,但是传输恰在应该发送0x1A字符之前停止。

我能够发送8MB以上的文本文件,但是在尝试发送的两个二进制文件中,它都在20kB之后停止,恰好在0x1A字符之前,因此文件大小没有问题。我在Windows 10上,并使用openSSL来运行服务器。

winpty openssl s_server -WWW -key key.pem -cert cert.pem -port 8075 

使用以下命令,我可以下载文本文件而没有任何问题,但是在发送整个二进制文件之前它“失败”。

winpty curl -v -k https://192.168.1.100:8075/hello-world.bin --output hello-world-recv.bin

curl命令的详细信息如下(删除了关于证书和握手的第一部分):

GET /hello-world.bin HTTP/1.1
> Host: 192.168.1.100:8075
> User-Agent: curl/7.60.0
> Accept: */*
>
{ [5 bytes data]
* HTTP 1.0, assume close after body
< HTTP/1.0 200 ok
< Content-type: text/plain
<
{ [16339 bytes data]
100 19270    0 19270    0     0  43995      0 --:--:-- --:--:-- --:--:-- 45663
* Closing connection 0
} [5 bytes data]
* TLSv1.2 (OUT), TLS alert, Client hello (1):
} [2 bytes data]

我们可以看到,仅发送了19kB的数据,但原始文件为1.2MB。

谢谢您的任何帮助。

1 个答案:

答案 0 :(得分:0)

www_body中检入OpenSSL源功能apps/s_server.c(在1.1.1b中行3254):它以默认的"r"模式打开文件,该模式可能是 text模式在Windows中,这意味着CRLF将转换为LF,而SUB将被解释为文件结尾。