繁体   English   中英

OpenSSL-SSL_write问题

[英]OpenSSL - SSL_write problem

我用C语言编写了一个HTTPS客户端 ,但SSL_write函数有问题。 三个测试来说明我的问题:

#define HEADERS1 "GET / HTTP/1.1\r\n"
#define HEADERS2 "Host: www.example.com\r\n"
#define HEADERS3 "User-Agent: OpenSSL\r\n"
#define HEADERS4 "\r\n"

#define HEADERS "GET / HTTP/1.1\r\nHost: www.example.com\r\nUser-Agent: OpenSSL\r\n\r\n"

测试1:

SSL_write(ssl,HEADERS,strlen(HEADERS));

成功:服务器正确返回带有HTTP / 1.1 200代码的/index.html资源。

测试2:

SSL_write(ssl,HEADERS1,strlen(HEADERS1));
SSL_write(ssl,HEADERS2,strlen(HEADERS2));
SSL_write(ssl,HEADERS3,strlen(HEADERS3));
SSL_write(ssl,HEADERS4,strlen(HEADERS4));

失败:服务器未返回任何信息。 所有SSL_write函数均不返回ERROR,但我的应用程序被锁定在SSL_read上,因为目标服务器不提供内容...,也没有标题:(

测试3:

SSL_write(ssl,HEADERS1,strlen(HEADERS1));
SSL_write(ssl,HEADERS2,strlen(HEADERS2));
SSL_write(ssl,HEADERS4,strlen(HEADERS4));

成功:服务器正确返回带有HTTP / 1.1 200代码的/index.html资源。

我可以调用SSL_write发送标头的次数有特定限制吗? 很奇怪...

非常感谢你 !


好的,所以我的问题一直存在,但是我有更多详细信息:

IISS-SSL =>所有测试均成功。

Apache-SSL =>所有测试成功。

Nginx-SSL =>所有测试成功。

LightHTTPD-SSL =>测试2失败。

我不明白为什么只有LightHTTPD无法理解我的请求...

对于SSL_Write()操作,正确的方法应该在SSL_Write调用之后,检查返回的消息。 如果它是SSL_WANT_READ,则花一点时间让它读取。

使用返回值进行连续写入操作可能会成功,但是这样做并不安全,因为您不确定写入的数据是否已到达服务器,并且服务器无法完全读取它。

反过来,这可能会影响其他SSL_write操作。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM