2017-09-21 4 views
1

SSLを使用してFTPサーバーと通信する必要があります。フィンガープリントを使用するFTPS

私はそれは、私は信じて、WinSCPのコマンドを使用していることを行う方法についての例を受け取った:

open ftpes://SomeUser:[email protected]/ -certificate="xx:xx:xx:xx:xx:xx:xx:xx:xx:xx:xx:xx:xx:xx:xx:xx:xx:xx:xx:xx" 

質問は、アプリケーションで-certificate一部を使用する方法ですか?文字列をファイルに保存する必要がありますか?例えば

我々はC#のたFtpWebRequest使用する場合:

FtpWebRequest ftp = (FtpWebRequest)WebRequest.Create(downlaodLocation); 

どのように我々はこのフィンガープリントを使用することができますか?

X509Certificateクラスには、byte []を受け入れるコンストラクタがあります。

byte[] toBytes = Encoding.ASCII.GetBytes("xx:xx:xx:xx:xx:xx:xx:xx:xx:xx:xx:xx:xx:xx:xx:xx:xx:xx:xx:xx"); 
ftp.ClientCertificates.Add(new X509Certificate(toBytes)); 

これは証明書フィンガープリントを使用する正しい方法ですか?

+0

可能な複製(https://stackoverflow.com/questions/526711/using-a-self-signed-certificate-with-nets- http://webquest-response) –

答えて

1

最終的に私はファイルをアップロードするために別のアプローチをとり、WinScpをc#libに使っていました。 [.NETのHttpWebRequestの/レスポンスで自己署名証明書を使用する]の

  SessionOptions sessionOptions = new SessionOptions 
      { 
       Protocol = Protocol.Sftp, 
       HostName = ConfigurationManager.AppSettings["FTP.HOSTNAME"], 
       UserName = ConfigurationManager.AppSettings["FTP.USERNAME"], 
       Password = ConfigurationManager.AppSettings["FTP.PASSWORD"], 
      }; 
      if (port.HasValue) 
      { 
       sessionOptions.PortNumber = port.Value; 
      } 

       sessionOptions.SshHostKeyFingerprint = ConfigurationManager.AppSettings["FTP.CERT.FINGERPRINT"].Trim(); 

      using (Session session = new Session()) 
      { 
       if (!string.IsNullOrWhiteSpace(ConfigurationManager.AppSettings["LOG.PATH"])) 
       { 
        session.SessionLogPath = ConfigurationManager.AppSettings["LOG.PATH"]; 
       } 
       session.Open(sessionOptions); 
       TransferOptions transferOptions = new TransferOptions 
       { 
        TransferMode = TransferMode.Binary 
       }; 

       TransferOperationResult transferResult = session.PutFiles(ConfigurationManager.AppSettings["FILE.TO.UPLOAD"], ConfigurationManager.AppSettings["FILE.DESTINATION.NAME"], true, transferOptions); 

       transferResult.Check(); 

       StringBuilder result = new StringBuilder(); 
       foreach (TransferEventArgs transfer in transferResult.Transfers) 
       { 
        result.Append(string.Format("Upload of {0} : {1}", transfer.FileName, transfer.Error)); 
       } 
       Console.WriteLine(result.ToString()); 
      } 
+0

FTP用のSSL/TLSフィンガープリントについて質問しました(WinSCP .NETアセンブリで実際に解決できるもの)。しかし、実際にはあなたは最後にSSH/SFTPを使用しています。全く異なるプロトコルとは何ですか?あなたの答えはそれを説明するべきです。 –

+0

あなたのコード 'if(ShouldUseSSL())sessionOptions.SshHostKeyFingerprint = ...'はほとんど意味がありません。最初に、SSLとSSHは全く異なる2つのプロトコルです。第二に、無条件にSSH/SFTPを使用するので、無条件に 'SshHostKeyFingerprint'を設定する必要があります。 'Protocol = Protocol.Sftp'を設定することはできますが、' SshHostKeyFingerprint'を設定することはできません。 –

+0

@ MartinPrikryl Thnaksの発言、マーティン。私は 'ShouldUseSSL'部分を削除しました。私はSO答えのコードを単純化しましたが、そこに 'if'を削除するのを忘れました。私の意図は、質問のコマンドと同じ結果を達成することだったので、これは私のために働いたものです。 –

関連する問題