5

料金を支払っているホストされたサーバーで動作するカスタム FTP クラスを実装しました。アプリケーションのバックアップ、復元、更新に FTP を使用しています。私は今、sslを有効にしてこれを本番環境に置きたいと思っています。ホスティング会社に ssl プロトコルをサポートしているかどうか尋ねたところ、サポートしているとのことでした。

そこで、Microsoft MSDN チュートリアルの後にメソッドを次のように変更しました。

reqFTP = (FtpWebRequest)FtpWebRequest.Create(new Uri(m_ftpAddress.Trim()));
reqFTP.UseBinary = true;
reqFTP.Credentials = new NetworkCredential(m_ftpUsername, m_ftpPassword);
reqFTP.Method = WebRequestMethods.Ftp.ListDirectory;

ServicePointManager.ServerCertificateValidationCallback = new System.Net.Security.RemoteCertificateValidationCallback(ValidateServerCertificate);
                X509Certificate cert = new X509Certificate(path to a certificate created with makecert.exe);

reqFTP.ClientCertificates.Add(cert);
reqFTP.AuthenticationLevel = AuthenticationLevel.MutualAuthRequested;
reqFTP.ImpersonationLevel = System.Security.Principal.TokenImpersonationLevel.Identification;

reqFTP.EnableSsl = true;

現在、MSDN は、サーバーが ssl プロトコルをサポートしている場合、AUTH TLS で要求されたときに例外をスローしないと述べています。これは、トレース ログで確認できます。したがって、サーバーの問題ではないと思います。

認証フェーズの後、サーバーは

System.Net 情報: 0 : [0216] FtpControlStream#41622463 - 受信した応答 [227 パッシブ モードに入る (IP とポート番号)]。

エラーを引き起こすメッセージ:

System.Net エラー: 0 : [0216] FtpWebRequest#12547953::GetResponse の例外 - リモート サーバーがエラーを返しました: 227 パッシブ モードに入る (IP とポート番号)。

を設定してみました

reqFTP.UsePassive = true;

プロパティを false にすると、次のエラーが発生します。

System.Net 情報: 0 : [2692] FtpControlStream#4878312 - 受信応答 [500 Illegal PORT コマンド]

もちろん、EnableSLL プロパティを true に設定しなくても、すべて問題なく動作します。

誰かこれについて何か考えがありますか?

編集:コードをfallowsとして変更しました:

reqFTP = (FtpWebRequest)FtpWebRequest.Create(new Uri(m_ftpAddress.Trim()));
reqFTP.UseBinary = true;
reqFTP.Credentials = new NetworkCredential(m_ftpUsername, m_ftpPassword);
reqFTP.Method = WebRequestMethods.Ftp.ListDirectory;

ServicePointManager.ServerCertificateValidationCallback = new       
     System.Net.Security.RemoteCertificateValidationCallback(ValidateServerCertificate);

reqFTP.ClientCertificates.Add(cert);
reqFTP.AuthenticationLevel = AuthenticationLevel.MutualAuthRequested;
reqFTP.ImpersonationLevel = System.Security.Principal.TokenImpersonationLevel.Identification
reqFTP.EnableSsl = true;

ValidateServerCertificate常にtrueを返します。この変更の後、効果はありません。

そして、私は理解していません:

  • この時点で、アプリケーションはサーバー証明書を使用していますよね?
  • そして、変更前は私のものも使用していましたか?

誰かがこれがどのように機能するかを説明できますか?

編集:ホスティング会社と何度もメールをやり取りした結果、FTP ソフトウェアに問題があり、コードには問題がないことが判明しました。

4

1 に答える 1

1

ホストが FTPS または SFTP を使用しているかどうかを確認しましたか?

それらは異なるプロトコルであり、ホストはあなたが間違ったプロトコルについて話していると想定した可能性があります.

于 2010-11-12T03:30:16.970 に答える