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