it-swarm.com.de

Abrufen "Das Remote-Zertifikat ist gemäß dem Validierungsverfahren ungültig", wenn der SMTP-Server über ein gültiges Zertifikat verfügt

Dies scheint ein häufiger Fehler zu sein, aber während ich eine Problemumgehung gefunden habe (siehe unten), kann ich den Grund nicht genau festlegen, warum ich ihn überhaupt bekomme.

Ich schreibe SMTP-Funktionalität in unsere Anwendung und versuche, die funktionierende SMTP, die wir bereits haben, mit SSL-Funktionalität zu versehen.

Ich teste mit dem MS Exchange-Server unseres Unternehmens und insbesondere der darauf aktivierten Webmail-Option. Ich kann E-Mails intern über meinen Code versenden, indem ich meine Verbindung nicht authentifiziert und anonym sendet. Diese E-Mails werden jedoch aufgrund unserer Unternehmensrichtlinien nicht an externe E-Mail-Adressen weitergeleitet. Außerdem programmiere ich dies für unsere Kunden und sie erlauben nicht alle offene Relais- und/oder anonyme Verbindungen.

Ich glaube, dass der Exchange-Server explizites SSL/TLS verwendet. Ich habe Telnet an die Adresse des Servers an Port 25 ausprobiert und eine Textantwort erhalten, eine für Menschen lesbare Antwort, die nach einigen meiner Suchvorgänge zuvor bedeutet, dass explizite SSL/TLS verwendet wird.

Ich habe den folgenden Testcode

SmtpClient SMTPClient = new SmtpClient(webmailaddress);
SMTPClient.Port = 25;
SMTPClient.UseDefaultCredentials = true;
SMTPClient.EnableSsl = true;
System.Net.Mail.MailMessage Message = new `
System.Net.Mail.MailMessage(emailFrom,emailTo,subject,body);
SMTPClient.Send(Message);

Bei meiner Suche nach einer Lösung stieß ich auf dieses "Das Remote-Zertifikat ist gemäß dem Validierungsverfahren ungültig." Google Mail SMTP-Server verwenden

Woraus ich folgenden Code bekam ...

ServicePointManager.ServerCertificateValidationCallback = new RemoteCertificateValidationCallback(ValidateServerCertificate);

public static bool ValidateServerCertificate(object sender,X509Certificate certificate,X509Chain chain,SslPolicyErrors sslPolicyErrors)
{
    if (sslPolicyErrors == SslPolicyErrors.None)
        return true;
    else
    {
        if (System.Windows.Forms.MessageBox.Show("The server certificate is not valid.\nAccept?", "Certificate Validation", System.Windows.Forms.MessageBoxButtons.YesNo, System.Windows.Forms.MessageBoxIcon.Question) == System.Windows.Forms.DialogResult.Yes)
            return true;
        else
            return false;
    }
}

Das funktioniert in meinem Testcode. Der eigentliche Prozess, den ich schreibe (anstelle meines Testcodes), wird jedoch im Hintergrund ausgeführt und kann den Benutzer nicht wirklich fragen (stattdessen meldet er Fehler im Windows-Fehlerprotokoll).

Als ich anfing, ist meine Frage wirklich, warum ich diesen Fehler überhaupt bekomme. Wenn ich in einem Browser zu https: webmail.ourdomain.co.uk gehe, wird ein gültiges Zertifikat angezeigt, und es gibt keine Option zum Installieren des Zertifikats (wie ich es bei einem selbstsignierten tun würde).

Certificate ScreenshotWenn ich jedoch meinen Code mit einem Debug Break Poing in der ValidateServerCertificate-Methode ausführte, schaue ich mir die Zertifikatswerte an und sehe einen Aussteller unseres lokalen Servers und "nicht verwenden" und "nicht danach verwenden" 'Eigenschaften von heute. Dies stimmt nicht mit dem Zertifikat überein, das ich erhalte.

Ich habe auch überprüft, was die sslPolicyErrors-Flags im Debug von ValidateServerCertificate sind, und sie zeigen "RemoteCertificateChainErrors" und "RemoteCertificateNameMismatch" an.

Was fehlt mir dabei? Warum verwendet es nicht das richtige Zertifikat? Wenn es Schritte gibt, die erforderlich sind, um das Zertifikat lokal zu installieren, damit es verwendet werden kann, muss ich sie kennen, damit ich meinen Kunden sagen kann, was sie tun sollen, wenn sie dies erhalten.

Ich möchte die Prüfung nicht einfach umgehen, indem Sie true aus der ValidateServerCertificate-Methode zurückgibt. Da es sich um einen Hintergrundprozess handelt, kann ich den Benutzer nicht fragen. Daher muss ich verstehen, wie mein Code die korrekte/vertrauenswürdige Version verwendet Zertifikat.

Hoffe, dass jemand beraten kann.

15
RosieC

Die Antwort, die ich schließlich gefunden habe, ist, dass der SMTP-Dienst auf dem Server nicht dasselbe Zertifikat wie https verwendet.

Die Diagnoseschritte, die ich hier gelesen habe gehen davon aus, dass sie dasselbe Zertifikat verwenden. Jedes Mal, wenn ich dies in der Vergangenheit ausprobiert habe, haben sie es getan und die Diagnoseschritte sind genau das, was ich getan habe, um das Problem mehrmals zu lösen .

In diesem Fall funktionierten diese Schritte nicht, weil die verwendeten Zertifikate unterschiedlich waren, und die Möglichkeit dazu war etwas, auf das ich noch nie gestoßen war.

Die Lösung besteht entweder darin, das eigentliche Zertifikat vom Server zu exportieren und dann als vertrauenswürdiges Zertifikat auf meinem Computer zu installieren, oder ein anderes gültiges/vertrauenswürdiges Zertifikat für den SMTP-Dienst auf dem Server zu erhalten. Dies ist derzeit bei unserer IT-Abteilung, die die Server verwaltet, um zu entscheiden, was sie tun möchten.

7
RosieC

Alter Beitrag, aber wie Sie sagten "Warum verwendet es nicht das richtige Zertifikat?" Ich möchte einen Weg anbieten, um herauszufinden, welches SSL-Zertifikat für SMTP verwendet wird (siehe hier ), welches OpenSSL benötigt:

openssl s_client -connect exchange01.int.contoso.com:25 -starttls smtp

Dadurch wird das verwendete SSL-Zertifikat für den SMTP-Dienst beschrieben. Basierend auf dem, was Sie hier sehen, können Sie das falsche Zertifikat (wie Sie es bereits getan haben) durch ein korrektes ersetzen (oder dem Zertifikat manuell vertrauen).

2
BastianW

Alte Post, aber ich dachte, ich würde meine Lösung teilen, weil es für dieses Problem nicht viele Lösungen gibt.

Wenn Sie einen alten Windows Server 2003-Computer ausführen, müssen Sie wahrscheinlich einen Hotfix (KB938397) installieren. 

Dieses Problem tritt auf, weil die Cryptography API 2 (CAPI2) in Windows Server 2003 unterstützt die SHA2-Familie von Hash-Algorithmen nicht . CAPI2 ist der Teil der Cryptography-API, der Zertifikate verarbeitet.

https://support.Microsoft.com/en-us/kb/938397

Aus irgendeinem Grund möchte Microsoft Ihnen diesen Hotfix per E-Mail senden, anstatt Ihnen den direkten Download zu ermöglichen. Hier ist ein direkter Link zum Hotfix aus der E-Mail:

http://hotfixv4.Microsoft.com/Windows Server 2003/sp3/Fix200653/3790/free/315159_DEU_x64_Zip.exe

0
user1003916