使用 s_client 进行代理身份验证
Posted
技术标签:
【中文标题】使用 s_client 进行代理身份验证【英文标题】:Proxy authentication with s_client 【发布时间】:2019-09-30 05:14:21 【问题描述】:注意:这不是openssl s_client using a proxy 的重复,因为我对代理身份验证特别感兴趣,而不是使用代理的能力。
我正在使用openssl s_client
检查目标服务器的证书,以了解连接的工作方式/位置。由于我在公司代理后面,我可以使用 -proxy
标志指定代理服务器,但是我需要将身份验证详细信息(用户名/密码)传递给该代理 - 我还没有弄清楚如何做到这一点。
openssl s_client -proxy my.proxy.server:8080 -connect my.target.host
成功连接到代理服务器,但是,可以理解的是,导致错误s_client: HTTP CONNECT failed: 407 Unauthorized
。
以user:pass@my.proxy.server
或http://user:pass@my.proxy.server
的形式传递代理服务器都会导致错误s_client: -proxy argument malformed or ambiguous
。
如何将代理身份验证传递给 s_client?我很难相信它支持代理但不支持经过身份验证的代理。
我正在使用 openssl 版本 1.1.1a。
【问题讨论】:
【参考方案1】:只是跟进@Arnaud Grandville 的回答:OpenSSL v3 beta 1 现已发布,它包括代理身份验证选项。但是,您必须自己编译它。
不幸的是,在 v3 beta 1 中,HTTP 代码存在一些问题,因此您无法按原样使用他们网站上的代码。任何希望从源代码编译的人都可以使用以下命令来获得具有有效代理身份验证的 OpenSSL 安装:
git clone --branch openssl-3.0.0-beta1 https://github.com/openssl/openssl.git
cd openssl
git fetch
git checkout 6a1f9cd -- crypto/http/http_client.c
./Configure
make
make install
【讨论】:
【参考方案2】:openssl v3.0 将支持proxy_user
和proxy_pass
选项。
暂时没有办法,proxy后面的语法是
host + ':' + service
host + ':' + '*'
host + ':'
':' + service
'*' + ':' + service
host
service
参见。 BIO_parse_hostserv
【讨论】:
【参考方案3】:您可以使用escape-from-intranet https://github.com/quaddy-services/escape-from-intranet#introduction
并指定
主机=my.proxy.server 端口=8080
在应用中使用
openssl s_client -proxy localhost:3128 -connect my.target.host
您本地运行的应用程序将使用您的凭据丰富真正的代理调用。
(如果您有透明代理,则需要在“决策”菜单中将默认代理决策切换为“代理”)
【讨论】:
以上是关于使用 s_client 进行代理身份验证的主要内容,如果未能解决你的问题,请参考以下文章
使用 ProducerTemplate 使用 Camel 进行代理身份验证