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: 但它仍然让我请求超时。 很难说到底发生了什么,因为我们无法重现你真正在做什么。请注意,HTTP 中的行尾必须是\r\n 而不仅仅是\n。大多数服务器都接受两者,但可能是您的特定服务器更加挑剔,并且实际上希望客户端遵守标准。尝试使用 -crlf 选项和 s_client 这个 -crlf 选项是什么? -crlf 选项对我有用,但我不明白它是如何工作的。另外,它的等效编程选项是什么?? 【参考方案1】:

-crlf 选项解决了这个问题。 谢谢@SteffenUllrich

命令:

openssl s_client -connect <server1>:443 -crlf

【讨论】:

以上是关于OPENSSL s_cient 请求失败(408 请求超时)的主要内容,如果未能解决你的问题,请参考以下文章

使用 PHP 了解 Apache 上的“408 请求超时”

POST 请求出现随机 408 错误

在 PuTTY 中 HTTP 请求总是返回 408 错误

请求超时的 http 重试 (408)

Rails 的 production.log 会记录 HTTP 408 请求吗?

多部分数据发送得到 408 状态