OPENSSL s_cient 请求失败(408 请求超时)
Posted
技术标签:
【中文标题】OPENSSL s_cient 请求失败(408 请求超时)【英文标题】:OPENSSL s_cient request fails (with 408 request timeout) 【发布时间】:2019-08-12 09:06:22 【问题描述】:我正在尝试使用 openssl s_client api 连接,命令:
openssl s_client -connect <server1>:443
我得到以下输出:
----------------------开始------------- --------------
已连接(00000003)
证书链
服务器证书
未发送客户端证书 CA 名称 对等签名摘要:SHA512
服务器临时密钥:ECDH,P-256,256 位
SSL 握手已读取 5540 字节并写入 302 字节
验证错误:证书链中的自签名证书
新,TLSv1.2,密码为 ECDHE-RSA-AES128-GCM-SHA256 服务器公钥为 2048 位 支持安全重新协商 压缩:无 扩展:无 没有协商 ALPN SSL-会话: 协议:TLSv1.2 密码:ECDHE-RSA-AES128-GCM-SHA256 会话 ID: 会话 ID-ctx: 主密钥: PSK 身份:无 PSK 身份提示:无 SRP 用户名:无 开始时间:1553089057 超时:7200(秒) 验证返回码:19(证书链中的自签名证书)
扩展主密码:否
GET <path_to_api> HTTP/1.1
HOST: <server1>
Content-Type: application/soap+xml; charset=utf-8
Content-Length:0
HTTP/1.1 408 REQUEST_TIMEOUT 内容长度:0 连接:关闭
关闭
--------------------------------结束-------------- ------------------
导致请求超时。 如果我使用 curl 命令它是成功的。
请求超时的原因是什么?
【问题讨论】:
HTTP 标头末尾应该有一个空行,但您没有显示。这可能是问题的原因。除此之外,内容长度和内容类型与 GET 请求无关,因为它们一开始就没有内容。 我给了一个空行,例如: GET HTTP/1.1 HOST:\r\n
而不仅仅是\n
。大多数服务器都接受两者,但可能是您的特定服务器更加挑剔,并且实际上希望客户端遵守标准。尝试使用 -crlf
选项和 s_client
。
这个 -crlf 选项是什么?
-crlf 选项对我有用,但我不明白它是如何工作的。另外,它的等效编程选项是什么??
【参考方案1】:
-crlf 选项解决了这个问题。 谢谢@SteffenUllrich
命令:
openssl s_client -connect <server1>:443 -crlf
【讨论】:
以上是关于OPENSSL s_cient 请求失败(408 请求超时)的主要内容,如果未能解决你的问题,请参考以下文章