“Het externe certificaat is ongeldig volgens de validatieprocedure.” met Gmail SMTP-server

Ik krijg deze foutmelding:

Het externe certificaat is ongeldig volgens de validatieprocedure.

wanneer ik e-mail probeer te verzenden met de SMTP-server van Gmail in mijn C#-code.
Kan iemand mij in de juiste richting wijzen voor een oplossing voor dit probleem?

Het volgende is de stacktracering…

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)

Antwoord 1, autoriteit 100%

Waarschuwing: gebruik dit niet in productiecode!

Als tijdelijke oplossing kunt u certificaatvalidatie uitschakelen. Doe dit alleen om bevestiging te krijgen dat de fout wordt gegenereerd vanwege een slecht certificaat.

Noem deze methode voordat u smtpclient.Send()aanroept:

   [Obsolete("Do not use this in Production code!!!",true)]
    static void NEVER_EAT_POISON_Disable_CertificateValidation()
    {
        // Disabling certificate validation can expose you to a man-in-the-middle attack
        // which may allow your encrypted message to be read by an attacker
        // https://stackoverflow.com/a/14907718/740639
        ServicePointManager.ServerCertificateValidationCallback =
            delegate (
                object s,
                X509Certificate certificate,
                X509Chain chain,
                SslPolicyErrors sslPolicyErrors
            ) {
                return true;
            };
    }

Antwoord 2, autoriteit 21%

De link hier heeft mijn probleem opgelost.

http://brainof-dave.blogspot.com .au/2008/08/remote-certificate-is-invalid-according.html

Ik ging naar de url van de webservice (op de server die het probleem had), klikte op het kleine beveiligingspictogram in IE, waardoor het certificaat tevoorschijn kwam. Ik klikte toen op het tabblad Details, klikte op de knop Kopiëren naar bestand, waardoor ik het certificaat als een .cer-bestand kon exporteren. Nadat ik het certificaat lokaal had, kon ik het importeren in het certificaatarchief op de server met behulp van de onderstaande instructies.

Start een nieuwe MMC.
Bestand –> Module toevoegen/verwijderen…
Klik op Toevoegen…
Kies Certificaten en klik op Toevoegen.
Vink het keuzerondje “Computeraccount” aan. Klik op Volgende.

Kies de clientcomputer in het volgende scherm. Klik op Voltooien.
Klik op Sluiten.
Klik OK.
Installeer NU het certificaat in het certificaatarchief van Trusted Root Certification Authorities. Hierdoor kunnen alle gebruikers het certificaat vertrouwen.


Antwoord 3, autoriteit 13%

Een beetje laat op het feest, maar als u op zoek bent naar een oplossing zoals Yury’s de volgende code helpt u te identificeren of het probleem is gerelateerd aan een self-sign-certificaat en, zo ja, negeert u de self-sign-fout. U kunt uiteraard controleren op andere SSL-fouten als u dit gewenst bent.

De code die we gebruiken (met dank aan Microsoft – http: / /MSDN.Microsoft.com/en-US/library/Ofice/dd633677(v=exchg.80).aspx ) is als volgt:

 private static bool CertificateValidationCallBack(
         object sender,
         System.Security.Cryptography.X509Certificates.X509Certificate certificate,
         System.Security.Cryptography.X509Certificates.X509Chain chain,
         System.Net.Security.SslPolicyErrors sslPolicyErrors)
    {
  // If the certificate is a valid, signed certificate, return true.
  if (sslPolicyErrors == System.Net.Security.SslPolicyErrors.None)
  {
    return true;
  }
  // If there are errors in the certificate chain, look at each error to determine the cause.
  if ((sslPolicyErrors & System.Net.Security.SslPolicyErrors.RemoteCertificateChainErrors) != 0)
  {
    if (chain != null && chain.ChainStatus != null)
    {
      foreach (System.Security.Cryptography.X509Certificates.X509ChainStatus status in chain.ChainStatus)
      {
        if ((certificate.Subject == certificate.Issuer) &&
           (status.Status == System.Security.Cryptography.X509Certificates.X509ChainStatusFlags.UntrustedRoot))
        {
          // Self-signed certificates with an untrusted root are valid. 
          continue;
        }
        else
        {
          if (status.Status != System.Security.Cryptography.X509Certificates.X509ChainStatusFlags.NoError)
          {
            // If there are any other errors in the certificate chain, the certificate is invalid,
         // so the method returns false.
            return false;
          }
        }
      }
    }
    // When processing reaches this line, the only errors in the certificate chain are 
// untrusted root errors for self-signed certificates. These certificates are valid
// for default Exchange server installations, so return true.
    return true;
  }
  else
  {
 // In all other cases, return false.
    return false;
  }
}

Antwoord 4, autoriteit 11%

U kunt de code verbeteren door de gebruiker te vragen wanneer het certificaat niet geldig is of hij wil doorgaan of niet. Wilt u doorgaan?Zoals hieronder:

ServicePointManager.ServerCertificateValidationCallback = 
    new RemoteCertificateValidationCallback(ValidateServerCertificate);

En voeg een methode toe zoals deze:

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

Antwoord 5, autoriteit 7%

Ik had exact hetzelfde probleem en kwam erachter dat het Mail Shieldvan Avast antivirus standaard de “Scan SSL-verbinding”had geactiveerd. Zorg ervoor dat u dat uitschakelt.

Voor zover ik weet, zal Avast de e-mail ‘openen’, deze scannen op virussen en vervolgens ondertekenen met zijn eigen certificaatzodat de e-mail niet wordt ondertekend door het gmail-certificaat meer die die fout produceert.

Oplossing 1:

  • Schakel de SSL-scans van uw antivirusprogramma (of het volledige e-mailschild) uit.

Oplossing 2 (zou de beste beveiliging moeten zijn):

  • Krijg op de een of andere manier het certificaat dat door de antivirus wordt gebruikt (Avast heeft een optie om het te exporteren)
  • Importeer het in je imap/pop/smtp-client voordat je verbinding maakt met de Gmail-server.

Antwoord 6, autoriteit 5%

Krijg dezelfde fout bij het verzenden vanuit Outlook vanwege ssl. Geprobeerde instelling EnableSSL = false loste het probleem op.

voorbeeld:

var smtp = new SmtpClient
                {
                    Host = "smtp.gmail.com",                   
                    Port = 587,
                    EnableSsl = false,
                    DeliveryMethod = SmtpDeliveryMethod.Network,
                    UseDefaultCredentials = false,                   
                    Credentials = new NetworkCredential("[email protected]", "xxxxx")
                };

Antwoord 7, autoriteit 5%

Ik weet dat ik vrij laat in dit spel ben, maar ik heb hier geen antwoord gezien dat verwijst naar de system.diagnostics-logboeken voor de TLS-stream.

Voordat u wijzigingen aanbrengt in uw code, moet u ervoor zorgen dat u begrijpt waar het probleem over gaat. De AuthenticationExceptionis een van die zeer generieke uitzonderingen die niet veel zeggen. Om erachter te komen wat er onder de motorkap gebeurt, bewerkt u het app.config-bestand voor uw toepassing (of maakt u een nieuwe) en zorgt u ervoor dat de traceerbron System.Netis ingeschakeld in de system.diagnosticssectie, bijvoorbeeld:

<?xml version="1.0" encoding="utf-8" ?>
<configuration>
  <system.diagnostics>
    <trace autoflush="true" />
    <sharedListeners>
      <add name="file" initializeData="c:\network.log" type="System.Diagnostics.TextWriterTraceListener" />
    </sharedListeners>
    <sources>
      <source name="System.Net" switchValue="Verbose">
        <listeners>
          <add name="file" />
        </listeners>
      </source>
    </sources>
  </system.diagnostics>
</configuration>

Voer uw toepassing opnieuw uit en controleer het bestand c:\network.log. U zou daar gedetailleerde informatie over uw TLS (SSL)-verbinding moeten zien, bijvoorbeeld:

System.Net Information: 0 : [12764] InitializeSecurityContext(credential = System.Net.SafeFreeCredential_SECURITY, context = f44368:535f958, targetName = localhost, inFlags = ReplayDetect, SequenceDetect, Confidentiality, AllocateMemory, InitManualCredValidation)
System.Net Information: 0 : [12764] InitializeSecurityContext(In-Buffers count=2, Out-Buffer length=0, returned code=OK).
System.Net Information: 0 : [12764] Remote certificate: [Version]
  V3
[Subject]
  CN=test
  Simple Name: test
  DNS Name: example.com
[Issuer]
  CN=Root CA
  Simple Name: Root CA
  DNS Name: Root CA
...
[Signature Algorithm]
  sha256RSA(1.2.840.113549.1.1.11)
[Public Key]
  Algorithm: RSA
  Length: 2048
  Key Blob: ....
System.Net Information: 0 : [12764] SecureChannel#38496415 - Remote certificate has errors:
System.Net Information: 0 : [12764] SecureChannel#38496415 -    Certificate name mismatch.
System.Net Information: 0 : [12764] SecureChannel#38496415 - Remote certificate was verified as invalid by the user.
System.Net Error: 0 : [12764] Exception in AppDomain#10923418::UnhandledExceptionHandler - The remote certificate is invalid according to the validation procedure..

Als u weet wat de oorzaak van het probleem is, zou u het moeten kunnen oplossen of op zijn minst uw Google-zoekopdrachten kunnen verfijnen.


Antwoord 8, autoriteit 3%

Weet u zeker dat u het juiste SMTP-serveradres gebruikt?

Zowel smtp.google.com als smtp.gmail.com werken, maar SSL-certificaat wordt uitgegeven aan de tweede.


Antwoord 9, autoriteit 3%

Ik had dezelfde fout toen ik probeerde e-mail te verzenden met SmtpClientvia proxyserver (Usergate).

Controleert of het certificaat het adres van de server bevat, wat niet gelijk is aan het adres van de proxyserver, vandaar de fout.
Mijn oplossing: wanneer er een fout optreedt tijdens het controleren van het certificaat, ontvang het certificaat, exporteer het en controleer.

public static bool RemoteServerCertificateValidationCallback(Object sender, X509Certificate certificate, X509Chain chain, SslPolicyErrors sslPolicyErrors)
    {
        if (sslPolicyErrors == SslPolicyErrors.None)
            return true;
        // if got an cert auth error
        if (sslPolicyErrors != SslPolicyErrors.RemoteCertificateNameMismatch) return false;
        const string sertFileName = "smpthost.cer";
        // check if cert file exists
        if (File.Exists(sertFileName))
        {
            var actualCertificate = X509Certificate.CreateFromCertFile(sertFileName);
            return certificate.Equals(actualCertificate);
        }
        // export and check if cert not exists
        using (var file = File.Create(sertFileName))
        {
            var cert = certificate.Export(X509ContentType.Cert);
            file.Write(cert, 0, cert.Length);
        }
        var createdCertificate = X509Certificate.CreateFromCertFile(sertFileName);
        return certificate.Equals(createdCertificate);
    }

Volledige code van mijn e-mailafzenderklasse:

public class EmailSender
{
    private readonly SmtpClient _smtpServer;
    private readonly MailAddress _fromAddress;
    public EmailSender()
    {
        ServicePointManager.ServerCertificateValidationCallback = RemoteServerCertificateValidationCallback;
        _smtpServer = new SmtpClient();
    }
    public EmailSender(string smtpHost, int smtpPort, bool enableSsl, string userName, string password, string fromEmail, string fromName) : this()
    {
        _smtpServer.Host = smtpHost;
        _smtpServer.Port = smtpPort;
        _smtpServer.UseDefaultCredentials = false;
        _smtpServer.EnableSsl = enableSsl;
        _smtpServer.Credentials = new NetworkCredential(userName, password);
        _fromAddress = new MailAddress(fromEmail, fromName);
    }
    public bool Send(string address, string mailSubject, string htmlMessageBody,
        string fileName = null)
    {
        return Send(new List<MailAddress> { new MailAddress(address) }, mailSubject, htmlMessageBody, fileName);
    }
    public bool Send(List<MailAddress> addressList, string mailSubject, string htmlMessageBody,
        string fileName = null)
    {
        var mailMessage = new MailMessage();
        try
        {
            if (_fromAddress != null)
                mailMessage.From = _fromAddress;
            foreach (var addr in addressList)
                mailMessage.To.Add(addr);
            mailMessage.SubjectEncoding = Encoding.UTF8;
            mailMessage.Subject = mailSubject;
            mailMessage.Body = htmlMessageBody;
            mailMessage.BodyEncoding = Encoding.UTF8;
            mailMessage.IsBodyHtml = true;
            if ((fileName != null) && (System.IO.File.Exists(fileName)))
            {
                var attach = new Attachment(fileName, MediaTypeNames.Application.Octet);
                attach.ContentDisposition.CreationDate = System.IO.File.GetCreationTime(fileName);
                attach.ContentDisposition.ModificationDate = System.IO.File.GetLastWriteTime(fileName);
                attach.ContentDisposition.ReadDate = System.IO.File.GetLastAccessTime(fileName);
                mailMessage.Attachments.Add(attach);
            }
            _smtpServer.Send(mailMessage);
        }
        catch (Exception e)
        {
            // TODO lor error
            return false;
        }
        return true;
    }
    public static bool RemoteServerCertificateValidationCallback(Object sender, X509Certificate certificate, X509Chain chain, SslPolicyErrors sslPolicyErrors)
{
    if (sslPolicyErrors == SslPolicyErrors.None)
        return true;
    // if got an cert auth error
    if (sslPolicyErrors != SslPolicyErrors.RemoteCertificateNameMismatch) return false;
    const string sertFileName = "smpthost.cer";
    // check if cert file exists
    if (File.Exists(sertFileName))
    {
        var actualCertificate = X509Certificate.CreateFromCertFile(sertFileName);
        return certificate.Equals(actualCertificate);
    }
    // export and check if cert not exists
    using (var file = File.Create(sertFileName))
    {
        var cert = certificate.Export(X509ContentType.Cert);
        file.Write(cert, 0, cert.Length);
    }
    var createdCertificate = X509Certificate.CreateFromCertFile(sertFileName);
    return certificate.Equals(createdCertificate);
}

}


Antwoord 10, Autoriteit 2%

Mijn probleem was op Windows 2003-server, bij het bellen van authenticateasclient. De bovenstaande oplossingen (b.v. Omzeild ServicePointManager.ServerCertificateValidationCallback) Werkte niet.

Hieruit is dit een bug in Windows 2003 en er is een hotfix:

“Toepassingen die gebruik maken van de Cryptography API kunnen geen X.509-certificaat in Windows Server 2003”

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

Installeren van deze hotfix is ​​mijn probleem opgelost.


Antwoord 11, Autoriteit 2%

Mijn probleem was niet dat ik de server door het IP-adres verwijst in plaats van de URL. Ik had een ondertekend certificaat gekocht van een CA voor gebruik in een privé-netwerk. De URL die is opgegeven op het certificaat doet er toe bij het verwijzen naar de server. Zodra ik de server heb verwezen door de URL in het certificaat dat alles begon te werken.


Antwoord 12

Uw websitefmap heeft netwerkdienstveiligheid nodig. Vooral het web.config. Het gebruikt dit account om toegang te krijgen tot uw register voor de certificaten. Dit stopt de noodzaak om een ​​hack toe te voegen aan uw code.


Antwoord 13

In ons geval is het probleem veroorzaakt door het IIS-servercertificaat. Het onderwerp van het certificaat is ingesteld op DNS-naam en gebruikers probeerden toegang te krijgen tot de website door IP-adres, dus .NET-certificeringsvalidatie is mislukt.
Probleem verdwenen wanneer gebruikers de naam van DNS begonnen te gebruiken.

Dus u moet uw provider-URL wijzigen op https: //certificatesubject/xxx/xxx.Application


Antwoord 14

Controleer de datum en tijd van uw computer. Als het verkeerd is, update dan naar de huidige tijd of stel deze automatisch in om de tijd van het internet te krijgen.

Omdat certificaten vastgebonden zijn aan een vaste periode, als uw klok verkeerd is, krijgt u waarschijnlijk fouten als deze. In dat scenario, door het oplossen van de tijd, wordt het probleem opgelost.


Antwoord 15

Voor degenen die dezelfde fout ondervinden bij het aansluiten op een lokale site met een zelfondertekend certificaat, hielp het volgende blogpost mij.

http: // brainof- dave.blogspot.com.au/2008/08/Remote-certificate-is-invalid-according.html


Antwoord 16

Er is een MSDN-blogartikel over het onderzoeken van dit soort problemen:

Probleemoplossing ASP.NET – Het externe certificaat is ongeldig volgens de validatieprocedure:
http://blogs.msDN.com/b/jpsanders/Archive/2009/09/16/Troubleshooting-asp-net-the-remote-certificate-is-invalid-according -To-the-validatie-procedure.aspx


Antwoord 17

Voeg deze regel voor mij toe. Dit vertrouwt in feite alle certificaten zoals vermeld hier . Dit kan echter voornamelijk worden gebruikt voor het oplossen van problemen. Als dit voor u werkt, dan betekent dit dat het certificaat van de externe server niet wordt toegevoegd als een vertrouwd certificaat in uw machine.

System.Net.ServicePointManager.ServerCertificateValidationCallback = new System.Net.Security.RemoteCertificateValidationCallback(RemoteServerCertificateValidationCallback);

volledige code is

private void sendAMail(String toAddress, String messageBody)
        {
            String msg = "Sending mail to : " + toAddress;
            MailMessage mail = new MailMessage();
            mail.To.Add(toAddress);
            mail.From = new MailAddress("[email protected]");
            mail.Subject = "Subject: Test Mail";
            mail.Body = messageBody;
            mail.IsBodyHtml = true;            
            //Added this line here
            System.Net.ServicePointManager.ServerCertificateValidationCallback = new System.Net.Security.RemoteCertificateValidationCallback(RemoteServerCertificateValidationCallback);
            SmtpClient smtp = new SmtpClient();
            smtp.Host = "myhostname.com";            
            smtp.Credentials = new System.Net.NetworkCredential("[email protected]", "");
            smtp.EnableSsl = true;
            smtp.Port = 587;            
            smtp.Send(mail);            
        }
private bool RemoteServerCertificateValidationCallback(object sender, System.Security.Cryptography.X509Certificates.X509Certificate certificate, System.Security.Cryptography.X509Certificates.X509Chain chain, System.Net.Security.SslPolicyErrors sslPolicyErrors)
{
    //Console.WriteLine(certificate);
    return true;
}

Antwoord 18

Als je deze foutmelding krijgt tijdens het uploaden van bestanden naar S3 met AWS SDK. Zorg ervoor dat je de juiste regio voor S3 hebt geselecteerd.

Als je de verkeerde regio hebt gebruikt. Dat zal zo’n fout retourneren die trouwens niet voor deze fout is bedoeld.


Antwoord 19

Mijn probleem is opgelost

smtpClient.Credentials = new NetworkCredential(sendMail.UserName, sendMail.Password);
smtpClient.EnableSsl = false;//sendMail.EnableSSL;

// Met verwijzing naar // Het probleem komt alleen. Gebruik de bovenstaande regel om een valse SSL in te stellen om de fout op te lossen wanneer gebruikersnaam en wachtwoord worden ingevoerd in de SMTP-instellingen.


Antwoord 20

hier is de oplossing die ik besloot te gebruiken.

       ServicePointManager.ServerCertificateValidationCallback = delegate (object s, X509Certificate certificate, X509Chain chain, SslPolicyErrors sslPolicyErrors)
        {
            string name = certificate.Subject;
            DateTime expirationDate = DateTime.Parse(certificate.GetExpirationDateString());
            if (sslPolicyErrors == SslPolicyErrors.None || (sslPolicyErrors == SslPolicyErrors.RemoteCertificateNameMismatch && name.EndsWith(".acceptabledomain.com") && expirationDate > DateTime.Now))
            {
                return true;
            }
            return false;
        };

Antwoord 21

De code van het geaccepteerde antwoord heeft me geholpen om het probleem op te lossen. Ik realiseerde me toen dat het SN-veld van het argument certificateniet hetzelfde was als wat ik dacht dat mijn SMTP-server was. Door de eigenschap Hostvan de SmtpClient-instantie in te stellen op de SN-waarde van het certificaat, kon ik het probleem oplossen.


Antwoord 22

gebruik mijn functie als problemen met diagnostische certificaten – zie scherm

           System.Net.ServicePointManager.ServerCertificateValidationCallback = Function(s As Object,
                                                                                          cert As System.Security.Cryptography.X509Certificates.X509Certificate,
                                                                                          chain As System.Security.Cryptography.X509Certificates.X509Chain,
                                                                                          err As System.Net.Security.SslPolicyErrors)
                                                                                     Return True
                                                                                 End Function


Antwoord 23

Ik heb nog nooit gezien dat iemand op het voor de hand liggende wijzen, dat als je SSL-problemen veilig wilt debuggen, altijd deze aanpak moet gebruiken:

#if DEBUG
    ServicePointManager.ServerCertificateValidationCallback += (sender, cert, chain, sslPolicyErrors) => true;
#endif

Zelfs als je je code per ongeluk vastlegt, is het nog steeds in orde dat het niet wordt gecompileerd in de release-modus.

Other episodes