6

私は C# で FTP サーバーを開発していますSslStream。クラスを使用して FTPS 明示モード機能の実装を完了したばかりで、すべてがほぼ問題ありません。

fileZilla > 3.0.11 をクライアントとして使用すると問題が発生します。私は周りをグーグルで調べましたが、sslstream実装が接続を適切に閉じていないようです。close_notify(アラートを送信しない)。WinScp、SmartFTP、および lftp を使用すると、すべて正常に動作します。

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

close_notifyまたは、アラートをハードコーディングして送信する方法はありますか?

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

sslStream の作成:

_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 エラー ログ:

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.
4

4 に答える 4

5

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

于 2013-04-02T08:54:40.610 に答える
3

ここに投稿した回避策をご覧ください。一緒にこの回避策を改善できれば素晴らしいことです。

于 2014-03-25T06:30:30.203 に答える
0

どうですか

_sslStream.Dispose();

Dispose メソッドがclose_notify.

于 2013-04-11T00:16:06.333 に答える