2012-02-21 24 views
1
でSSLを有効に接続することができませんでし

私はこの下の例外が発生しました はFileZillaのは後にしたFtpWebRequest

FileStream outputStream = new FileStream(fileName, FileMode.Append); 
      reqFTP = (FtpWebRequest)FtpWebRequest.Create(new Uri("ftp://" + ftpserverIp + "/" + file)); 
      reqFTP.EnableSsl = true; 
      reqFTP.Method = WebRequestMethods.Ftp.DownloadFile; 
      reqFTP.UseBinary = true; 
      reqFTP.KeepAlive = false; 
      reqFTP.Timeout = -1; 
      reqFTP.UsePassive = true; 
      reqFTP.Credentials = new NetworkCredential("sh", "SE"); 
      FtpWebResponse response = (FtpWebResponse)reqFTP.GetResponse(); 
      Stream ftpStream = response.GetResponseStream(); 
      long cl = response.ContentLength; 
      // reqFTP.Method = WebRequestMethods.Ftp.ListDirectory; 
      int bufferSize = 4096; 
      int readCount; 
      byte[] buffer = new byte[bufferSize]; 
      readCount = ftpStream.Read(buffer, 0, bufferSize); 
      Console.WriteLine("Connected: Downloading File"); 
      while (readCount > 0) 
      { 
       outputStream.Write(buffer, 0, readCount); 
       readCount = ftpStream.Read(buffer, 0, bufferSize); 
       //Console.WriteLine(readCount.ToString()); 
      } 

      ftpStream.Close(); 
      outputStream.Close(); 
      response.Close(); 

下回るようにしたFtpWebRequestでSSLを使用しようとしていました検証手順。私のグーグルに基づいて

証明書に秘密鍵の部分を削除し、今では

431をスロー処理を開始、私は、これまでの任意のアイデアの男を何の結果をグーグルでいないが、試してみましたSSL接続

を初期化できませんでした。

FileZillaに接続しようとしています。

答えて

1

答えは簡単です.FtpWebRequestはFTPSを十分にサポートしていないという単純な答えです。 http://ftps.codeplex.com/

の.NET Frameworkが提供するSystem.Net.FTPWebRequestクラスから引用

は、(例えば、ダウンロードまたはファイルをアップロードまたはディレクトリのリストを取得する)単純なタスクのために完全であるとを経由しても、SSLをサポートしていますEnableSslプロパティ参照:http://blogs.msdn.com/adarshk/archive/2005/04/22/410925.aspxを参照してください。だからこそなぜ新しいクラスですか?

要点は、FTPでのSSLサポートがオン/オフスイッチ(HTTP/HTTPSなど)以上であることです。 FTPには、コマンド(制御接続)とデータ(データ接続)、ダウンロード、アップロード、ディレクトリ一覧の2つの接続が必要です。 FTPWebRequest.EnableSslは、両方でSSLを使用するだけです。問題は、これが必ずしも適切ではないということです。

マイクロソフトは彼らだけでは、Windows Server 2008および上記のためのFTP 7.5を提供する場合、サーバー側でFTPSをサポートするために開始します。これまでのところ、Internet ExplorerやWindowsエクスプローラでFTPSをサポートしていません。 .NET Framework BCLにはFTPSサポートが欠けています。

+0

、あなたは私を訂正してください。その場合、私はSSLを使用できません。SSLを有効にするにはどうすればftpサーバ(私はURIを意味しますか)をftpのように呼び出すことができますか? – Usher

+0

自分で証明書を正しく処理する方法については、http://blogs.msdn.com/b/adarshk/archive/2005/04/22/410925.aspxを参照してください。 –

0

コードのこの部分には:new Uri("ftp://" + ftpserverIp + "/" + file)「ftp」と表示されているSSL以外のftpサーバーに接続しようとしています。

+0

、私はftpsを使って試してみました。まさに "URIプレフィックスが認識されません"ということです。 – Usher

+0

うーん...うーん、グーグルが少しこれを持って来た:http://forum.filezilla-project.org/viewtopic.php?f=2&t=11545 - 私はそれが助けて欲しい。 –

+0

@Matt Tは、URLによって提供された提案に基づいて、 "FTPES://" + ftpserverIp + "/" + file "のようにURLを変更しましたが、" URIプレフィックスは認識されません " – Usher

0

あなたが欠けているステップは、証明書の検証のためのポリシーを確立することです。

これは、次のコードで行われます。

public static bool ValidateCertificate(object sender, 
         X509Certificate certificate, X509Chain chain, 
         SslPolicyErrors sslPolicyErrors) { 
    /** 
    * validation steps for the certificate go here 
    * if you want them, but it may be expedient to 
    * just accept whatever the FTP server gave you. 
    * The channel will be encrypted regardless of 
    * how trusted the certificate is. 
    */ 
    return true; 
} 

、その後、あなたは、証明書のチェックを取得するときにヒットするように、上記の方法を設定する:

ServicePointManager.ServerCertificateValidationCallback = 
    new RemoteCertificateValidationCallback(ValidateCertificate); 

を与えられた例では、.NET 3.5で動作します現在受け入れられている答えの時に、この設定が不可能であったという陳述は、すでに間違っていました。

関連する問題