服务器实用程序:接收HTTPS POST请求,捕获数据

时间:2017-08-04 21:23:28

标签: http https openssl netcat

为了测试某些东西,我想运行一个简单的Web服务器:

  • 将侦听HTTPS POST请求
  • 将收到的POST数据打印到STDOUT(可能还有其他内容,如果它只是猫咪的整个HTTP请求,那就没问题了)

有没有快速的方法来设置这样的东西?我尝试过使用OpenSSL的s_server,但似乎只想回复GET请求。

1 个答案:

答案 0 :(得分:1)

由于s_server不支持POST请求,您应该使用 socat 而不是 openssl s_server

# socat -v OPENSSL-LISTEN:443,cert=mycert.pem,key=key.pem,verify=0,fork 'SYSTEM:/bin/echo HTTP/1.1 200 OK;/bin/echo;/bin/echo this-is-the-content-of-the-http-answer'

以下是必备参数:

  • fork:循环播放许多请求

  • -v:向STDOUT显示POST数据(及其他内容)

  • verify=0:不要求相互认证

现在,举个例子:

我们使用以下POST请求:

% wget -O - --post-data=abcdef --no-check-certificate https://localhost/
[...]
this-is-the-content-of-the-http-answer

我们看到以下socat输出:

# socat -v OPENSSL-LISTEN:443,cert=mycert.crt,key=key.pem,verify=0,fork 'SYSTEM:/bin/echo HTTP/1.1 200 OK;/bin/echo;/bin/echo this-is-the-content-of-the-http-answer'
> 2017/08/05 03:13:04.346890  length=212 from=0 to=211
POST / HTTP/1.1\r
User-Agent: Wget/1.19.1 (freebsd10.3)\r
Accept: */*\r
Accept-Encoding: identity\r
Host: localhost:443\r
Connection: Keep-Alive\r
Content-Type: application/x-www-form-urlencoded\r
Content-Length: 6\r
\r
< 2017/08/05 03:13:04.350299  length=16 from=0 to=15
HTTP/1.1 200 OK
> 2017/08/05 03:13:04.350516  length=6 from=212 to=217
abcdef< 2017/08/05 03:13:04.351549  length=1 from=16 to=16

< 2017/08/05 03:13:04.353019  length=39 from=17 to=55
this-is-the-content-of-the-http-answer