你如何将"回声"传递给"openssl"?

Lew*_*uce 19 openssl

我只是尝试向启用SSL的Web服务器提交"OPTIONS/HTTP/1.0"请求; 但是,在运行时,我只是简单地在连接结束时"完成".

这是我正在使用的确切命令:

echo -e "OPTIONS / HTTP/1.0\r\n\r\n" | openssl s_client -connect site.com:443
Run Code Online (Sandbox Code Playgroud)

有什么建议?我确定我错过了一些非常简单的事情.

Mic*_*man 50

有一个-ign_eof选项可以完全满足您的需求而不会出现任何问题.它显然是自2000年以来的代码库(0.9.5a).

该选项禁止Q和R的特殊解释,并忽略stdin上的EOF.相反,它等待连接关闭.

  • 这绝对是最好的答案. (10认同)

and*_*oke 25

这个问题在这个帖子中讨论过(链接的电子邮件只有简单的答案,我将在下面重复):http://www.mail-archive.com/openssl-users@openssl.org/msg02937.html

(echo "GET /"; sleep 10) | openssl s_client -connect news.ycombinator.com:443
Run Code Online (Sandbox Code Playgroud)

问题是st_client关闭后s_client会立即关闭.所以你的代码工作正常,但是在接收到OPTIONS之后和接收服务器响应之前,s_client正在退出.

  • 邮件列表对话是从1999年开始的; 这可能是为什么在下一个版本中添加了更改行为的选项. (2认同)

小智 12

迟到的答案......

似乎你在子shell中加了一个'cat'就行了.

(echo -ne "GET / HTTP/1.1\r\nHost: google.com\r\n\r\n" ; cat ) | openssl s_client -connect google.com:443
Run Code Online (Sandbox Code Playgroud)

那个'猫'挂了,然后你可以继续手动与s_client交互.我这里只进行了一次测试,但我需要同样的能力来将http headesr/bodies从命令行传递到ssl服务器.