これは長い間頭痛を引き起こしました。
状況:インターネットから隔離されたプロキシの後に仮想マシンがあります。プロキシが正常に動作しているようです。
cURLを使用してインターネット経由でZIPファイル(-T)をFTPに転送したいと思います。 FTPサーバーはSSL / TLSであるFTPSを使用する必要があります。
私のWindowsコンピュータでは、TotalCommanderの同じプロキシ(および同じプロキシ資格情報)を使用して、使用したいFTPサーバーのFTPSセッションを正常に設定できます。
したがって、FTPサーバーとプロキシサーバーを構成すると、この目的を達成できると思います。
私が試したこと:
デフォルトでは、次のコマンドラインのバリアントを試みます。
curl -vvv --ssl -T /path/to/my/file.zip ftp://my.ftpserver.com:21 --user USER:PASSWORD -x https://proxyuser:[email protected]:3128
cURLがプロキシに対して認証し、FTPサーバーに接続しようとする可能性があるという詳細な出力を見ることができます。ただし、SQUID(プロキシ)で引き続きエラーが発生します。
Squid sent the following FTP command:
USER myftp user
The server responded with:
You must issue the AUTH command to change to an encrypted session before you can attempt to login.
550-This server requires encryption
目的地を変えるとftp://の代わりにftps://を使用してください。それが私に言い続けています。
curl: (35) gnutls_handshake() failed: An unexpected TLS packet was received.
Totalcommander FTPセッションのログを見ると、プロキシの認証を確認できます。その後、FTPサーバーに接続してセーフモードに変更して認証します。
220-Welcome to Company-FTP
220 Company-FTP Server ready!
AUTH TLS
234 Changing to secure mode...
(cert stuff)
USER myftpuser
331 Username OK. Need password.
PASS **********
230 Password oK. Connected. logged in
....
私がここで何を間違っているのでしょうか?
これについて調査した結果、「--tlsv1」オプションが「AUTH SSL」の前に「AUTH TLS」を送信する必要があるという記事をカールメーリングリストで見つけましたが、そうしなかったようです。 - -tlsv1スイッチを使用すると、Squidは「USER myftpuser」を送信し、550エラーを返すという同じエラーメッセージを返します。
cURLがTotalcommanderが送信しているように見える「AUTH TLS」を強制的に送信し、正常に認証する方法はありますか?
aslmxさんありがとうございます
答え1
私はそのオプションを使うのが答えだと思います--ftp-ssl
。
私はこれがopensslがこのオプションを要求する方法に似ていると思います-starttls ftp
。これは、FTP用TLSがHTTPや他のプロトコル用TLSと異なるため、必要です。