为什么 openssl s_client 没有将我的私钥传递给 proxytunnel?

为什么 openssl s_client 没有将我的私钥传递给 proxytunnel?

我目前已在家用电脑上设置了 HAProxy,并尝试通过 HTTP 代理访问它。目前,我正在访问 SSH 登录提示,如下所示:

openssl s_client->proxytunnel->HTTP(S) proxy->remote HAProxy->SSH server

我快要收到提示了,SSH-2.0-OpenSSH但由于某种原因,它只是挂在提示处并且不会通过私钥。

这是我在客户端执行的命令以及如何设置代理隧道以使用组织的代理:

proxytunnel -p httpproxy.organization.com:8080 -d ssh.homeserver.com:443 -a 7000

openssl接下来我将像这样运行:

openssl s_client -connect localhost:7000 -quiet -key /home/user/.ssh/id_rsa

但出于某种原因,证书似乎没有通过。我很可能漏掉了某个步骤,所以任何建议都将不胜感激!

答案1

您混淆了两个完全不同的协议的客户端。

openssl s_client工具纯粹是一个TLS(SSL)客户端;它能够剥离 HAproxy 或 stunnel 可能添加的 TLS 层。但是,一旦完成,它只会将任意数据从一端传输到另一端。您看到的提示是初始 SSH 握手,服务器希望您回复它;因此,您仍然需要运行一个这样的程序来sshSSHTLS 隧道之上的协议。

通常ssh直接通过 TCP 连接到服务器,但您可以使用选项ProxyCommand告诉它通过另一个程序:

ssh -o ProxyCommand="openssl s_client -connect localhost:7000 -quiet" dummyname

如果您有 SSH 密钥对,您也需要将其指定为选项ssh

ssh -i ~/.ssh/id_workplace -o ProxyCommand.....

(但不需要这个~/.ssh/id_rsa– 它是默认使用的。)


s_client 选项-cert-key当然用于向 TLS 服务器进行身份验证。但是,它们需要完整的 X.509 证书作为“-cert”;只有公钥是不够的,因为它适用于 SSH。

相关内容