web-dev-qa-db-ja.com

openssl s_clientが秘密鍵をproxytunnelに渡さないのはなぜですか?

現在、自宅のPCに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
slashp

2つの完全に異なるプロトコルのクライアントを混乱させています。

openssl s_clientツールは純粋にTLS(SSL)クライアントです。 HAproxyまたはstunnelが追加する可能性のあるTLSレイヤーを剥がすことができます。ただし、これが完了すると、任意のデータを一方の端からもう一方の端に転送するだけです。表示されているプロンプトは最初のSSHハンドシェイクであり、サーバーはそれに応答することを期待しています。したがって、TLSトンネルの上で[〜#〜] ssh [〜#〜]プロトコルを話すsshのようなプログラムを実行する必要があります。

通常、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サーバーへの認証用です。ただし、「-cert」として完全なX.509証明書が必要です。 SSHの場合のように、公開鍵だけでは不十分です。

3
user1686