Ich erhalte diesen Fehler:
Das Remote-Zertifikat ist gemäß dem Validierungsverfahren ungültig.
Wann immer ich versuche, E-Mails über den SMTP-Server von Google Mail in meinem C # -Code zu senden. Kann mich jemand in die richtige Richtung weisen, um eine Lösung für dieses Problem zu finden?
Das Folgende ist die Stapelverfolgung ...
at System.Net.Security.SslState.StartSendAuthResetSignal(ProtocolToken message, AsyncProtocolRequest asyncRequest, Exception exception)
at System.Net.Security.SslState.CheckCompletionBeforeNextReceive(ProtocolToken message, AsyncProtocolRequest asyncRequest)
at System.Net.Security.SslState.StartSendBlob(Byte[] incoming, Int32 count, AsyncProtocolRequest asyncRequest)
at System.Net.Security.SslState.ProcessReceivedBlob(Byte[] buffer, Int32 count, AsyncProtocolRequest asyncRequest)
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.CheckCompletionBeforeNextReceive(ProtocolToken message, AsyncProtocolRequest asyncRequest)
at System.Net.Security.SslState.StartSendBlob(Byte[] incoming, Int32 count, AsyncProtocolRequest asyncRequest)
at System.Net.Security.SslState.ProcessReceivedBlob(Byte[] buffer, Int32 count, AsyncProtocolRequest asyncRequest)
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.CheckCompletionBeforeNextReceive(ProtocolToken message, AsyncProtocolRequest asyncRequest)
at System.Net.Security.SslState.StartSendBlob(Byte[] incoming, Int32 count, AsyncProtocolRequest asyncRequest)
at System.Net.Security.SslState.ProcessReceivedBlob(Byte[] buffer, Int32 count, AsyncProtocolRequest asyncRequest)
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.CheckCompletionBeforeNextReceive(ProtocolToken message, AsyncProtocolRequest asyncRequest)
at System.Net.Security.SslState.StartSendBlob(Byte[] incoming, Int32 count, AsyncProtocolRequest asyncRequest)
at System.Net.Security.SslState.ProcessReceivedBlob(Byte[] buffer, Int32 count, AsyncProtocolRequest asyncRequest)
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.CheckCompletionBeforeNextReceive(ProtocolToken message, AsyncProtocolRequest asyncRequest)
at System.Net.Security.SslState.StartSendBlob(Byte[] incoming, Int32 count, AsyncProtocolRequest asyncRequest)
at System.Net.Security.SslState.ProcessReceivedBlob(Byte[] buffer, Int32 count, AsyncProtocolRequest asyncRequest)
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.CheckCompletionBeforeNextReceive(ProtocolToken message, AsyncProtocolRequest asyncRequest)
at System.Net.Security.SslState.StartSendBlob(Byte[] incoming, Int32 count, AsyncProtocolRequest asyncRequest)
at System.Net.Security.SslState.ForceAuthentication(Boolean receiveFirst, Byte[] buffer, AsyncProtocolRequest asyncRequest)
at System.Net.Security.SslState.ProcessAuthentication(LazyAsyncResult lazyResult)
at System.Net.TlsStream.CallProcessAuthentication(Object state)
at System.Threading.ExecutionContext.Run(ExecutionContext executionContext, ContextCallback callback, Object state)
at System.Net.TlsStream.ProcessAuthentication(LazyAsyncResult result)
at System.Net.TlsStream.Write(Byte[] buffer, Int32 offset, Int32 size)
at System.Net.PooledStream.Write(Byte[] buffer, Int32 offset, Int32 size)
at System.Net.Mail.SmtpConnection.Flush()
at System.Net.Mail.SmtpConnection.GetConnection(String host, Int32 port)
at System.Net.Mail.SmtpTransport.GetConnection(String host, Int32 port)
at System.Net.Mail.SmtpClient.GetConnection()
at System.Net.Mail.SmtpClient.Send(MailMessage message)
at BulkEmail.frmemail.mailsending(String toaddress, String fromaddress, String fromname, String subject, String pwd, String attachements, String mailmessage, String htmlmessage, Int32 i, Int32 j, String replytoaddress)
Antworten:
Um dieses Problem zu umgehen, können Sie die Zertifikatsüberprüfung deaktivieren. Tun Sie dies immer nur, um die Bestätigung zu erhalten, dass der Fehler aufgrund eines fehlerhaften Zertifikats ausgelöst wird.
Rufen Sie diese Methode auf, bevor Sie Folgendes aufrufen
smtpclient.Send()
:quelle
Der Link hier hat mein Problem gelöst.
http://brainof-dave.blogspot.com.au/2008/08/remote-certificate-is-invalid-according.html
Ich ging zur URL des Webdienstes (auf dem Server, auf dem das Problem aufgetreten war) und klickte auf das kleine Sicherheitssymbol im IE, das das Zertifikat aufrief. Ich klickte dann auf die Registerkarte Details und dann auf die Schaltfläche In Datei kopieren, wodurch ich das Zertifikat als CER-Datei exportieren konnte. Nachdem ich das Zertifikat lokal hatte, konnte ich es mithilfe der folgenden Anweisungen in den Zertifikatspeicher auf dem Server importieren.
Starten Sie eine neue MMC. Datei -> Snap-In hinzufügen / entfernen ... Klicken Sie auf Hinzufügen ... Wählen Sie Zertifikate und klicken Sie auf Hinzufügen. Aktivieren Sie das Optionsfeld "Computerkonto". Weiter klicken.
Wählen Sie im nächsten Bildschirm den Client-Computer aus. Klicken Sie auf Fertig stellen. Klicken Sie auf Schließen. OK klicken. Installieren Sie das Zertifikat JETZT im Zertifikatspeicher der vertrauenswürdigen Stammzertifizierungsstellen. Dadurch können alle Benutzer dem Zertifikat vertrauen.
quelle
certutil -f -p test -importPFX Root devcert.pfx
undcertutil -f -p test -importPFX MY devcert.pfx
.test
Sie können den Code verbessern, indem Sie den Benutzer fragen, ob das Zertifikat ungültig ist, ob er fortfahren möchte oder nicht. Wollen Sie fortfahren? Wie nachstehend:
Und fügen Sie eine Methode wie diese hinzu:
quelle
Ein bisschen zu spät zur Party, aber wenn Sie nach einer Lösung wie der von Yury suchen, hilft Ihnen der folgende Code zu identifizieren, ob das Problem mit einem Selbstsignaturzertifikat zusammenhängt, und wenn ja, ignorieren Sie den Selbstsignaturfehler. Sie können natürlich nach anderen SSL-Fehlern suchen, wenn Sie dies wünschen.
Der von uns verwendete Code (mit freundlicher Genehmigung von Microsoft - http://msdn.microsoft.com/en-us/library/office/dd633677(v=exchg.80).aspx ) lautet wie folgt:
quelle
Ich hatte genau das gleiche Problem und stellte fest, dass beim Mail Shield von Avast Antivirus standardmäßig die "SSL-Verbindung scannen" aktiviert war. Stellen Sie sicher, dass Sie das ausschalten .
Meines Wissens nach "öffnet" Avast die E-Mail, scannt sie auf Viren und signiert sie dann mit einem eigenen Zertifikat, damit die E-Mail nicht mehr vom Google Mail-Zertifikat signiert wird, was diesen Fehler verursacht.
Lösung 1:
Lösung 2 (sollte die beste Sicherheit sein):
quelle
Erhalten Sie den gleichen Fehler beim Senden aus Outlook wegen ssl. Versuchte Einstellung EnableSSL = false hat das Problem behoben.
Beispiel:
quelle
Sind Sie sicher, dass Sie die richtige SMTP-Serveradresse verwenden?
Sowohl smtp.google.com als auch smtp.gmail.com funktionieren, aber das SSL-Zertifikat wird für das zweite ausgestellt.
quelle
Ich hatte den gleichen Fehler, als ich versuchte, E-Mails mit zu senden
SmtpClient
über einen Proxyserver (Usergate) .Überprüft, ob das Zertifikat die Adresse des Servers enthält, die nicht der Adresse des Proxyservers entspricht, daher der Fehler. Meine Lösung: Wenn beim Überprüfen des Zertifikats ein Fehler auftritt, empfangen Sie das Zertifikat, exportieren Sie es und überprüfen Sie es.
Vollständiger Code meiner E-Mail-Absenderklasse:
}}
quelle
Ich weiß, dass ich ziemlich spät in diesem Spiel bin, aber ich habe hier keine Antwort gesehen, die auf die system.diagnostics-Protokolle für den TLS-Stream verweist.
Bevor Sie Änderungen an Ihrem Code vornehmen, stellen Sie sicher, dass Sie verstehen, worum es bei dem Problem geht. Das
AuthenticationException
ist eine dieser sehr allgemeinen Ausnahmen, die nicht viel sagt. Um zu erfahren, was unter der Haube vor sich geht, bearbeiten Sie die Datei app.config für Ihre Anwendung (oder erstellen Sie eine neue) und stellen Sie sicher, dass im Abschnitt die System.Net-Tracequelle aktiviertsystem.diagnostics
ist. Beispiel:Führen Sie Ihre Anwendung erneut aus und überprüfen Sie die Datei c: \ network.log. Dort sollten detaillierte Informationen zu Ihrer TLS (SSL) -Verbindung angezeigt werden, zum Beispiel:
Wenn Sie wissen, was das Problem verursacht, sollten Sie es beheben oder zumindest Ihre Google-Suche eingrenzen können.
quelle
Mein Problem war unter Windows 2003 Server beim Aufrufen von AuthenticateAsClient. Die oben genannten Lösungen (z. B. Umgehen
ServicePointManager.ServerCertificateValidationCallback
) haben nicht funktioniert.Es stellt sich heraus, dass dies ein Fehler in Windows 2003 ist und es einen Hotfix gibt:
"Anwendungen, die die Kryptografie-API verwenden, können ein X.509-Zertifikat in Windows Server 2003 nicht validieren."
https://support.microsoft.com/en-us/kb/938397
Durch die Installation dieses Hotfixes wurde mein Problem behoben.
quelle
Ihr Website-Ordner benötigt Netzwerkdienstsicherheit. Besonders die web.config. Es verwendet dieses Konto, um auf Ihre Registrierung für die Zertifikate zuzugreifen. Dadurch müssen Sie Ihrem Code keinen Hack mehr hinzufügen.
quelle
Mein Problem war nicht, dass ich den Server anhand der IP-Adresse anstelle der URL referenzierte. Ich hatte ein signiertes Zertifikat von einer Zertifizierungsstelle zur Verwendung in einem privaten Netzwerk gekauft. Die im Zertifikat angegebene URL spielt beim Verweisen auf den Server eine Rolle. Nachdem ich den Server über die URL im Zertifikat referenziert hatte, begann alles zu funktionieren.
quelle
Überprüfen Sie Datum und Uhrzeit Ihres Computers. Wenn es falsch ist, aktualisieren Sie es auf die aktuelle Zeit oder stellen Sie es automatisch ein, um die Zeit aus dem Internet abzurufen.
Da Zertifikate an einen festen Zeitraum gebunden sind, werden Sie wahrscheinlich Fehler wie diese erhalten, wenn Ihre Uhr falsch ist. In diesem Szenario wird das Problem durch Festlegen der Zeit behoben.
quelle
Für diejenigen, die denselben Fehler beim Herstellen einer Verbindung zu einer lokalen Site mit einem selbstsignierten Zertifikat feststellen, hat mir der folgende Blog-Beitrag geholfen.
http://brainof-dave.blogspot.com.au/2008/08/remote-certificate-is-invalid-according.html
quelle
In unserem Fall wurde das Problem durch das IIS-Serverzertifikat verursacht. Der Betreff des Zertifikats wurde auf den DNS-Namen festgelegt, und Benutzer haben versucht, über die IP-Adresse auf die Website zuzugreifen, sodass die Überprüfung der .NET-Zertifizierung fehlgeschlagen ist. Das Problem verschwand, als Benutzer den DNS-Namen verwendeten.
Sie müssen also Ihre Provider-URL in https: //CertificateSubject/xxx/xxx.application ändern
quelle
Es gibt einen MSDN-Blogartikel zur Untersuchung dieser Art von Problemen:
Fehlerbehebung bei ASP.NET - Das Remote-Zertifikat ist gemäß dem Validierungsverfahren ungültig:
http://blogs.msdn.com/b/jpsanders/archive/2009/09/16/troubleshooter-asp-net-the-remote-certificate- ist-ungültig-gemäß-der-Validierungs-Prozedur.aspx
quelle
Das Hinzufügen dieser Zeile hat bei mir funktioniert. Dies vertraut in der Tat allen hier erwähnten Zertifikaten . Dies kann jedoch hauptsächlich zur Fehlerbehebung verwendet werden. Wenn dies für Sie funktioniert, bedeutet dies, dass das Zertifikat des Remoteservers nicht als vertrauenswürdiges Zertifikat auf Ihrem Computer hinzugefügt wird.
Vollständiger Code ist
quelle
Es hat mein Problem gelöst
// Mit Bezug auf // Problem tritt nur auf Verwenden Sie die obige Zeile, um false SSl festzulegen, um Fehler zu beheben, wenn Benutzername und Passwort in den SMTP-Einstellungen eingegeben werden.
quelle
Hier ist die Lösung, für die ich mich entschieden habe.
quelle
Der Code aus der akzeptierten Antwort half mir, das Problem zu beheben. Dann wurde mir klar, dass das SN-Feld des
certificate
Arguments nicht mit dem übereinstimmte, was ich für meinen SMTP-Server hielt. Durch Setzen derHost
Eigenschaft der SmtpClient-Instanz auf den SN-Wert des Zertifikats konnte ich das Problem beheben.quelle