我想使用openssl s_client
使用CONNECT请求方法通过代理(Squid)打开到源服务器的TLS连接。我正在使用客户端证书连接到代理服务器,如下所示:
openssl s_client -connect my_proxy:4443 -CAfile /etc/ssl/ca/ca.crt -cert /etc/ssl/cert/client.crt -key /etc/ssl/key/client_key.pem
运行上面的内容后,连接信息打印正常,然后我输入CONNECT和GET方法,这很好用:
CONNECT www.google.com:80 HTTP/1.1 Host: www.google.com
建立HTTP / 1.1 200连接
GET /search?q=ip+address HTTP/1.1 Host: www.google.com
HTTP / 1.1 200确定
但是,我真的希望能够建立TLS(https)连接,但我无法让它工作:
CONNECT www.google.com:443 HTTP/1.1 Host: www.google.com
建立HTTP / 1.1 200连接
GET /search?q=ip+address HTTP/1.1
关闭
我在这里做错了什么?在您说尝试具有-proxy参数的OpenSSL 1.1.x之前,我已经尝试过了。请注意,上述命令中的CA证书,客户端证书和客户端密钥用于连接到我的代理服务器,而不是用于目标服务器(google.com),如下面的OpenSSL 1.1.0-pre3所示(如果我是相同的输出)尝试连接到谷歌:443)。
openssl s_client -connect google.com:80 -proxy my_proxy:4443 -CAfile /etc/ssl/ca/ca.crt -cert /etc/ssl/cert/client.crt -key /etc/ssl/key/client_key.pem
CONNECTED(00000003)
s_client:HTTP CONNECT失败
没有可用的对等证书
未发送客户端证书CA名称 SSL握手读取0个字节并写入25个字节 验证:好的
新的,(无),密码是(无) 不支持安全重新协商 压缩:无 扩展:无 没有ALPN协商
我能够将我的客户端证书,客户端密钥和CA证书加载到Firefox中(全部捆绑在pkcs12文件中),并且能够通过TLS连接到各种网站。这应该可以在命令行中使用。
答案 0 :(得分:1)
请注意,上述命令中的CA证书,客户端证书和客户端密钥用于连接代理服务器,而不是连接到-connect服务器。“
我对此表示怀疑。根据源-proxy
仅用于通过代理建立隧道,即
-connect
参数发送到代理这应该可以在命令行中使用。
这仅适用于-proxy
选项。没有此选项的s_client
版本不能单独用于通过HTTP代理建立连接,因为根本没有实现必要的功能。您可以尝试将s_client
与其他提供必要隧道的工具一起使用,例如socat或proxytunnel。