How can I fix: handshake failed due to unexpected packet format?

I am connecting from Windows Server 2008 R2 to a Linux FTP server running vsFTPd 2.0.7. I am connecting via SSL.

Here is a line of code in which it does not work:

sslStream = new SslStream(stream, false, CertificateValidation); 

Here is the log:

 220 (vsFTPd 2.0.7) AUTH SSL 234 Proceed with negotiation. 

I get the following error:

 System.IO.IOException: The handshake failed due to an unexpected packet format. at System.Net.Security.SslState.StartReadFrame(Byte[] buffer, Int32 readBytes, AsyncProtocolRequest asyncRequest) at System.Net.Security.SslState.StartReceiveBlob(Byte[] buffer, AsyncProtocolRequest asyncRequest) at System.Net.Security.SslState.ForceAuthentication(Boolean receiveFirst, Byte[] buffer, AsyncProtocolRequest asyncRequest) at System.Net.Security.SslState.ProcessAuthentication(LazyAsyncResult lazyResult) at KellermanSoftware.NetFtpLibrary.ProxySocket.InitSsl() at KellermanSoftware.NetFtpLibrary.FTP.Connect(Boolean implicitConnection) 
+4
source share
1 answer

From my google search, it seems like this is a common problem for vsftpd.
http://www.question-defense.com/2010/02/04/vsftpd-error-gnutls-error-9-a-tls-packet-with-unexpected-length-was-received

You can check this article for tips to solve.

It comes down to:

  • Configure vsftpd for ftpes (File Transer Protocol with explicit TLS / SSL)
  • Check for the generated SSL certificate or generate it if necessary
  • modify vsftpd.conf to allow FTPES connections / transfers
  • Restart vsftpd for the change to take effect.
  • make sure you are using the latest version and updating if necessary

Update
Something else to check: http://ftps.codeplex.com/Thread/View.aspx?ThreadId=63605 This thread talks about the difference between implicit and explicit modes with the following code example:

 private Stream GetDataStream() { Stream s = null; if (SslSupportCurrentMode == ESSLSupportMode.Implicit) { s = dataClient.GetStream(); } else if ((sslSupportCurrentMode & ESSLSupportMode.DataChannelRequested) == ESSLSupportMode.DataChannelRequested) { if (dataSslStream == null) dataSslStream = CreateSSlStream(dataClient.GetStream(), false); s = dataSslStream; } else { s = dataClient.GetStream(); } return s; } 
+1
source

Source: https://habr.com/ru/post/1304291/


All Articles