openssl s_client通过代理与clientAuth进行TLS连接

时间:2016-03-07 03:32:33

标签: http ssl https proxy openssl

我想使用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连接到各种网站。这应该可以在命令行中使用。

1 个答案:

答案 0 :(得分:1)

  

请注意,上述命令中的CA证书,客户端证书和客户端密钥用于连接代理服务器,而不是连接到-connect服务器。“

我对此表示怀疑。根据源-proxy仅用于通过代理建立隧道,即

  • 使TCP连接到给定代理
  • 将带有目标的CONNECT请求从-connect参数发送到代理
  • 等待隧道建立的代理的响应
  • 创建隧道时不涉及任何证书,就像它应该
  • 一样
  

这应该可以在命令行中使用。

这仅适用于-proxy选项。没有此选项的s_client版本不能单独用于通过HTTP代理建立连接,因为根本没有实现必要的功能。您可以尝试将s_client与其他提供必要隧道的工具一起使用,例如socatproxytunnel