2010-03-16 1 views
4

Je me connecte à partir de Windows Server 2008 R2 à un serveur FTP Linux exécutant vsFTPd 2.0.7. Je me connecte via SSL.Comment réparer: L'établissement de liaison a échoué en raison d'un format de paquet inattendu?

Voici la ligne de code, il échoue sur:

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

Voici le journal:

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

Je reçois l'erreur suivante:

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) 

Répondre

1

De mon google recherche, il semble que c'est un problème commun pour vsftpd.
http://www.question-defense.com/2010/02/04/vsftpd-error-gnutls-error-9-a-tls-packet-with-unexpected-length-was-received

Vous pouvez consulter cet article pour obtenir des conseils à une solution

Il se résume à:

  • Configurer vsftpd pour FTPES (fichier Protocole Transer avec Explicite TLS/SSL)
  • Vérification de la génération d'un certificat SSL, ou en générer un si nécessaire
  • modifier vsftpd.conf pour autoriser les connexions/transferts FTPES
  • vsftpd Redémarrer pour que les modifications prennent effet
  • vérifiez que vous utilisez la dernière version et mise à niveau si nécessaire

mise à jour
Quelque chose d'autre pour vérifier est: http://ftps.codeplex.com/Thread/View.aspx?ThreadId=63605 que les pourparlers de discussion sur la différence entre le mode implicite et le mode explicite avec l'exemple de bloc de code suivant:

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; 
}