C# FtpWebRequest über SSL - Zertifikatsproblem



  • Hallo,

    komme mal wieder mit einer kleinen Frage zu euch.
    Es geht um eine Verbindung zu einem FTP-Server der über SSL sendet.
    Ohne SSL funktioniert mein Code perfekt nur mit macht mit das ganze noch ein paar Probleme.

    Beim Verbinden bekomm ich eine "500 - Syntaxerror, Befehl unbekannt" Exception zurück. Ich vermute das das ganze an dem Zertifikat liegt das ich nicht richtig behandle, bzw. eigentlich garnicht!?

    Folgender Code der dafür verantwortlich zu sein scheint:

    public List<string> GetFileList()
            {
                FtpWebRequest oFTP = (FtpWebRequest)FtpWebRequest.Create(FTPSite + CurrentDirectory);
    
                oFTP.EnableSsl = true;
                oFTP.Credentials = new NetworkCredential(UserName, Password);
    
                oFTP.KeepAlive = KeepAlive;
                // Validate the server certificate with
                // ServerCertificateValidationCallBack
                if (UseSSL) 
                    ServicePointManager.ServerCertificateValidationCallback = new RemoteCertificateValidationCallback(ValidateServerCertificate);
    
                //oFTP.ClientCertificates.Add(???);
    
                oFTP.Method = WebRequestMethods.Ftp.ListDirectory;
    
    ........
    }
    
            public static bool ValidateServerCertificate(object sender, X509Certificate certificate, X509Chain chain, SslPolicyErrors sslPolicyErrors)
            {
                if (sslPolicyErrors == SslPolicyErrors.RemoteCertificateChainErrors)
                {
                    return false;
                }
                else if (sslPolicyErrors == SslPolicyErrors.RemoteCertificateNameMismatch)
                {
                    System.Security.Policy.Zone z = System.Security.Policy.Zone.CreateFromUrl
                       (((HttpWebRequest)sender).RequestUri.ToString());
                    if (z.SecurityZone == System.Security.SecurityZone.Intranet ||
                       z.SecurityZone == System.Security.SecurityZone.MyComputer)
                    {
                        return true;
                    }
                    return false;
                }
                return true;
            }
    

    Wie geschrieben, ich vermute das der Fehler hier liegt "//oFTP.ClientCertificates.Add(???);"

    Bin mir aber nicht sicher!? Wie binde ich da mein Zertifikat ein das ich von Server erhalte? Oder bin ich hier total auf dem Holzweg und muss was ganz anderes machen?



  • Hi,

    vom code her kann ich Dir nich helfen.
    Denke aber es kann daran liegen, dass FTP
    anders abläuft, es gibt ja aktiv FTP und Passiv FTP .
    Und es gibt die möglichkeit von implizit SSL und explizit SLL.

    Guck Dir mal das Diagramm an
    [url]
    http://help.globalscape.com/help/secureserver2/Explicit_versus_implicit_SS.htm
    [/url]

    Vielleicht liegt dort der Fehler.



  • Ah, Okay vielen vielen Dank adonis!!!!!

    Offensichtlich muss ich das auch ganz anders machen, weil:
    "The current (.NET 2.0 and 3.5) version of FtpWebRequest supports Explicit SSL only."

    Auf jedenfall weiss ich jetzt warum.

    Hab was von third-party FTP/SSL components mit Namen "Rebex FTP/SSL" gelesen.
    Die sollen das beides Explicit und Implicit hinbekommen!

    Werde das mal versuchen!!

    Danke nochmals für die super Hilfe!!

    Mfg


Anmelden zum Antworten