我正在尝试编写一个
python脚本来自动执行通过openSSL检查SSL重新协商的过程,并将结果输出到文件.我遇到了两个问题.
我的第一个问题是初始握手的输出被写入文件,但实际的重新协商部分没有.它显示在控制台上.
subprocess.call("echo \"R\" | openssl s_client -connect example.com:443",
shell=True, stdout=FILE)
我的另一个问题(虽然这可能是错误的地方)是我无法使用openSSL命令来发送GET命令.
subprocess.call("echo -e \"GET / HTTP/1.1\r\n\r\n\" | openssl s_client -connect
example.com:443", shell=True)
同样,初始连接已设置,但随后存在openSSL,它不处理GET请求.
任何帮助将不胜感激.谢谢.
最佳答案 对于输入,没有理由使用shell = True.相反,使用stdin = subprocess.PIPE.另请注意,您的请求无效,因为HTTP 1.1需要Host标头.另外,我想不出使用命令行openssl而不是
ssl module的原因.
话虽如此,这是一个有效的例子:
import subprocess
f = open('http_answer', 'w')
_,log = subprocess.Popen(
['openssl', 's_client', '-quiet', '-connect', 'twitter.com:443'],
stdout=f, stderr=subprocess.PIPE, stdin=subprocess.PIPE
).communicate('GET / HTTP/1.0\r\n\r\n')
print('Output of SSL:\n' + log)