Senden von E-Mails via C# Mailkit / Mimekit aber server-Zertifikat-Fehler kommt

0-Code in Visual Studio 2015

1 ich bin mit Mailkit neueste version (1.18.1.1) für das senden einer E-Mail von meiner eigenen E-Mail-server.

2 Die E-Mail-server mit einem selbst signierten Zertifikat, das nicht VERTRAUENSWÜRDIG ist.

3 habe ich aufgenommen, die beiden folgenden Zeilen in meinem code, zu ignorieren, die SERVER-ZERTIFIKAT-Fehler:

client.ServerCertificateValidationCallback = (mysender, certificate, chain, sslPolicyErrors) => { return true; };
client.CheckCertificateRevocation = false;

4, Aber mein Programm immer noch abstürzt.

5 In E-Mail-server-Protokolle, es zeigt den Fehler:

SSL_accept Fehler von unknown[xxx.xxx.xxx.xxx]: Connection reset by
peer

ich glaube, das kommt, weil der Server-Zertifikats-Problem. Da im Wireshark-capture, sobald ich das SERVER-Zertifikat wird die Verbindung beendet.

6 habe ich auch installiert, das nicht VERTRAUENSWÜRDIGE Zertifikat von E-Mail-server in meinem system aber immer noch das problem weiterhin besteht.

7 Folgenden ist die detaillierte Abbildung der Fehler
Senden von E-Mails via C# Mailkit /Mimekit aber server-Zertifikat-Fehler kommt

8 Komplette code:

using (var client = new SmtpClient(neue ProtocolLogger(„logging.log“)))

                    {

                        //For demo-purposes, accept all SSL certificates (in case the server supports STARTTLS)
                        client.ServerCertificateValidationCallback = (mysender, certificate, chain, sslPolicyErrors) => { return true; };
                        client.CheckCertificateRevocation = false;



                        client.Connect("xxx.com", 465, true);
                        //Note: since we don't have an OAuth2 token, disable
                        //the XOAUTH2 authentication mechanism.
                        client.AuthenticationMechanisms.Remove("XOAUTH2");

                        //Note: only needed if the SMTP server requires authentication
                        client.Authenticate("[email protected]","123456");

                        client.Send(message);
                        client.Disconnect(true);
}
  • Hat Ihr server benötigen Sie ein SSL-Zertifikat?
  • Tatsächlich, „Connection reset by peer“ deutet darauf hin, dass Ihre Netzwerkverbindung kaputt irgendwie und ist nicht SSL-bezogenen.
  • wie kann ich wissen, dass mein server erfordert ssl-Zertifikat ?
  • Tatsächlich, „Connection reset by peer“ deutet darauf hin, dass Ihre Netzwerkverbindung kaputt irgendwie und ist nicht SSL-verwandten, Aber wie kann die Verbindung unterbrochen everysingle Zeit, die ich versuchen, es zu benutzen ?
  • was ich denke, connection reset by peer bedeutet, dass mein Programm/Anwendung nicht akzeptieren Sie das server-Zertifikat (es war self-signed) und sofort die Verbindung geschlossen.
  • BUMP !!! !!! !!!
  • Die server-ssl-Zertifikat akzeptiert oder abgelehnt von SslStream.
  • das Zertifikat wird nicht akzeptiert, indem Sie C# – Anwendung. ich lief den gleichen code mit einem vertrauenswürdigen Zertifikat und es funktionierte ???
  • Nein, weil Sie für die remote-Zertifikat-Validierungs-callback-immer akzeptieren Sie das Zertifikat.
  • dann, was dieses Problem verursacht?
  • bump !!! !!! !!!!
  • gleiche Fehlermeldung kommt, wenn ich versuche, mit dem IMAP-client, zum abrufen meiner E-Mail-Posteingang? allerdings, die E-Mail funktioniert einwandfrei mit THUNDERBIRD …. ich habe wireshark und mein client (C# – app) schickt 21-Chiffre, dann server sendet „server hello done“ – Paket und wählt die Ziffer “ Cipher Suite: TLS_RSA_WITH_AES_128_CBC_SHA256 (0x003c)‘ sofort nach, dass CLIENT sendet FIN, ACK, und die Verbindung wird geschlossen ???
  • Klingt wie ein bug in SslStream, sollten Sie einen bug-report gegen ihn.
  • Man könnte auch versuchen das Spiel mit diesem: mimekit.net/docs/html/P_MailKit_MailService_SslProtocols.htm – standardmäßig MailKit deaktiviert SSLv3.

InformationsquelleAutor Fuzed Mass | 2017-09-26



2 Replies
  1. 1

    Wenn Sie die Kontrolle über beide enden der Verbindung haben, möchten Sie vielleicht zunächst prüfen, senden, ohne TLS, um sicherzustellen, dass das problem nur Auftritt, wenn man mit TLS.

    Auch versuchen, ohne wireshark, fiddler ‚ oder andere man-in-the-middle Sniffer/proxies, um sicherzustellen, gibt es kein problem, den server erreichen, in einer sicheren Weise. Überprüfen Sie Ihre antivirus oder internet security-system ist nicht das schließen der Verbindung, weil von den nicht vertrauenswürdigen Zertifikat.

    Andere Sache, möchten Sie vielleicht, um sicherzustellen, ist, dass Ihr client und server teilen sich die gleichen Protokolle: ich weiß, dass ältere TLS-und SSL-Protokolle geworden sind veraltet, so dass es möglich ist, dass es kein gemeinsames Protokoll zwischen dem client und dem server.

    Können Sie auch versuchen, die Aktivierung system.net tracing (verfügbar seit .NET 2.0) und sehen Sie, wenn Sie bekommen einige Besondere Erkenntnis aus den (sehr ausführlichen) logs, die Sie erhalten:
    https://blogs.msdn.microsoft.com/dgorti/2005/09/18/using-system-net-tracing/

    System.Net tracing ist
    1) Pro Prozess
    2) Zeigt threads
    3) Arbeitet für SSL
    4) Funktioniert der Loopback.
    5) Sie brauchen nicht zu kompilieren Sie den code

    [Bearbeiten]

    Ihre Frage scheint ein wenig zu breit für mich, zu erraten das problem, versuchen Sie bitte die Eingrenzung des Problems.. Zum Beispiel:

    • versuchen Sie, die Verbindung ohne TLS;
    • versuchen Sie eine Verbindung zu einem anderen SMTP-server (verwenden Sie eine Sie wissen, dass ein standard-mail-client eine Verbindung herstellen kann);
    • versuchen, die Verbindung zu Ihrem server mit einem anderen client (thunderbird zum Beispiel..)
    • versuchen laufen client und server auf der gleichen Maschine,
    • versuchen, das gleiche auf eine saubere virtuelle Maschine

    Übrigens SSPI scheint verknüpft werden, um den vertrauenswürdigen Sicherheits-Probleme, so auch überprüfen, die Sie nicht konfiguriert haben, dass Ihr server akzeptieren Sie nur Vertrauenswürdige Benutzer.

    [/Edit]

    Ich versuche zu aktualisieren meine Antwort, wenn das nicht genug ist =)

    HTH

    • das ist nicht der Fehler. seine zu tun hatte mit cipher-Suiten angeboten oder angenommen werden . iam nicht sicher, und immer noch stecken, haben nichts mit antivirus oder andere software …
  2. 0

    Mein problem ist gelöst. Ich habe die folgende Zeile meinen code vor dem Befehl VERBINDEN, und die APP (c#) mit der Arbeit begonnen hat !!!

    client.SslProtocols = System.Security.Authentication.SslProtocols.Tls11;
    • Froh, dass Sie fand Sie den Weg! Möchten Sie vielleicht zu prüfen, ob Tls12 auch funktioniert, da die Protokolle vor TLS1.2 werden nun als unsicher.. client.SslProtocols = System.Security.Authentication.SslProtocols.Tls12; ein gemischter Ansatz könnte sein, die Aktivierung 1.1 und 1.2, obwohl ich es nicht empfehlen: client.SslProtocols = System.Security.Authentication.SslProtocols.Tls11 | System.Security.Authentication.SslProtocols.Tls12;
    • Ja, Sie haben Recht, das macht mir sorgen, dass nur TLS1.1 Werke, die beide der folgende Befehl funktioniert nicht, ich habe beide getestet: der client.SslProtocols = System.Sicherheit.Die Authentifizierung.SslProtocols.Tls12; System.Sicherheit.Die Authentifizierung.SslProtocols.Tls11 | System.Sicherheit.Die Authentifizierung.SslProtocols.Tls12; ich denke, irgendeine Art von Problem mit der SSL-Verschlüsselung.
    • Denken Sie daran, dass sowohl der client als auch der server unterstützen muss, TLS1.2, sonst wird es nicht als eine option..
    • ich habe den gleichen server mit Thunderbird E-Mail client und es läuft perfekt mit TLS1.2, so dass das Problem auf der client-Seite.
    • die .NET-framework sind Sie welche? AFAIK .NETTO 4.7 standardmäßig auf TLS1.2, wenn Sie wollen, um zu versuchen…
    • i dont get your point, die MAILKIT verwendet seine eigene TLS-cipher-suites ? doesnt es ?

Schreibe einen Kommentar

Deine E-Mail-Adresse wird nicht veröffentlicht. Erforderliche Felder sind mit * markiert.