2013-04-02 14 views
5

私はC#でFTPサーバを開発していますが、私はちょうどSslStreamクラスを使用してFTPS明示モード機能の実装を完了しました。.NET SslStreamを使用しているFTPSサーバ

fileZilla> 3.0.11をクライアントとして使用する際に問題が発生しています。私はGoogleのarround、そしてそれはsslstream実装が接続を適切に閉じていないようだ。 (close_notify警告を送信しない)。 WinScpを使用すると、SmartFTPとlftpのeverithingは正常に動作します。

アイデアやその他のSSLライブラリはありますか?

close_notifyアラートをハードコードして送信する方法はありますか?

具体的なコード例は素晴らしいでしょう!

_sslStream = new SslStream(socket.GetStream());  
var _cert = new X509Certificate2(certPath,pass);  
_sslStream.AuthenticateAsServer(_cert); 

閉会の接続::

_sslStream.Close(); 
socket.Close(); 
_sslStream = null; 
socket = null; 

FileZillaは3.6.0.2エラーログ:sslStream作成

Response: 150 Opening data connection for LIST 
Trace: CFtpControlSocket::TransferParseResponse() 
Trace: code = 1 
Trace: state = 4 
Trace: CFtpControlSocket::SendNextCommand() 
Trace: CFtpControlSocket::TransferSend() 
Trace: state = 5 
Trace: CTlsSocket::OnRead() 
Trace: CTlsSocket::ContinueHandshake() 
Trace: TLS Handshake successful 
Trace: TLS Session resumed 
Trace: Cipher: AES-128-CBC, MAC: SHA1 
Trace: CTransferSocket::OnConnect 
Trace: CTransferSocket::OnReceive(), m_transferMode=0 
Trace: CTlsSocket::Failure(-110, 0) 
Error: GnuTLS error -110 in gnutls_record_recv: The TLS connection was non-properly terminated. 
Error: Could not read from transfer socket: ECONNABORTED - Connection aborted 
Trace: CTransferSocket::TransferEnd(3) 
Trace: CFtpControlSocket::TransferEnd() 
Trace: CTlsSocket::OnRead() 
Trace: CFtpControlSocket::OnReceive() 
Response: 226 LIST successful. 
+0

どのように蒸気を閉じますか?あなたのコードを示してください。 – Polyfun

+1

私はちょうど思い出しました - FTPSサーバーを実装していたときにFilezillaと同じ問題がありました。 SSLクラスを修正して解決しましたが、SSLストリームを使用してこれを選択する必要はありません。あなたは1)Filezillaを無視することができます2)このエラーを無視するGnuTLSへのパッチを提出してください:) 3)Microsoftフォーラムのどこかでケースを開く - この動作は標準に準拠していません。接続の書き込み側を閉じる前にclose_notifyアラートが表示されます。 –

+0

同じ問題がありましたが、これまでに実用的なソリューションを見つけましたか? –

答えて

5

私が思うには、あなたが再発明する本当の理由を持っています車輪。すでにSecureBlackboxのようなC#/ .NETにFTPSサーバーを実装しているライブラリがあります(しかし、商用です)。

+0

ありがとうございます。とにかく、あなたは無料の図書館を知っていますか? – Morvader

+0

FTPSサーバーの場合 - 残念ながら、いいえ。しかし、SSL/TLSの場合は、BouncyCastleライブラリフリーとオープンソースがあります。 –

+0

@Morvader SecureBlackboxは、SSL/TLSレイヤー(BouncyCastleよりはるかに柔軟で強力)と2つのFTPSサーバーコンポーネント(低レベルコンポーネントと高レベルコンポーネント)の両方を提供します。 –

0

ソケットを閉じる前にシャットダウンを呼び出すとどうなりますか?

Disposeメソッドが close_notifyを扱う場合、私は思ったんだけどいかが

_sslStream.Dispose(); 

socket.Shutdown(SocketShutdown.Both); 
+0

同じエラー:(お手伝いがありがたいです! – Morvader

0

+0

問題を解決できません:(おめでとうございます! – Morvader

3

私はhereを掲載した回避策を見てください。この回避策を一層良くすることができれば幸いです。

関連する問題