Il certificato remoto non è valido secondo la procedura di convalida. utilizzando il server SMTP di Gmail

Il certificato remoto non è valido secondo la procedura di convalida. utilizzando il server SMTP di Gmail

Come soluzione alternativa, puoi disattivare la convalida del certificato. Fallo sempre e solo per ottenere la conferma che l'errore viene generato a causa di un certificato errato.

Chiama questo metodo prima di chiamare smtpclient.Send() :

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

Il link qui ha risolto il mio problema.

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

Sono andato all'URL del servizio web (sul server che presentava il problema), ho fatto clic sulla piccola icona di sicurezza in IE, che ha visualizzato il certificato. Ho quindi fatto clic sulla scheda Dettagli, fatto clic sul pulsante Copia su file, che mi ha permesso di esportare il certificato come file .cer. Una volta ottenuto il certificato in locale, sono stato in grado di importarlo nell'archivio certificati sul server utilizzando le istruzioni seguenti.

Avvia un nuovo file MMC --> Aggiungi/Rimuovi snap-in... Fai clic su Aggiungi... Scegli certificati e fai clic su Aggiungi. Controlla il pulsante di opzione "Account computer". Fare clic su Avanti.

Scegli il computer client nella schermata successiva. Fare clic su Fine. Fare clic su Chiudi. Fare clic su OK. ORA installa il certificato nell'archivio certificati delle autorità di certificazione radice attendibili. Ciò consentirà a tutti gli utenti di considerare attendibile il certificato.


Un po' in ritardo per la festa, ma se stai cercando una soluzione come quella di Yury, il codice seguente ti aiuterà a identificare se il problema è correlato a un certificato di autofirma e, in tal caso, ignora l'errore di autofirma. Ovviamente potresti verificare la presenza di altri errori SSL se lo desideri.

Il codice che utilizziamo (per gentile concessione di Microsoft - http://msdn.microsoft.com/en-us/library/office/dd633677(v=exchg.80).aspx) è il seguente:

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