Saltar al contenido

“El certificado remoto no es válido según el procedimiento de validación”. utilizando el servidor SMTP de Gmail

Por fin luego de mucho batallar pudimos encontrar el arreglo de esta dificultad que algunos lectores de este sitio han presentado. Si deseas aportar algún detalle no dudes en dejar tu información.

Solución:

Advertencia: ¡No use esto en el código de producción!

Como solución alternativa, puede desactivar la validación de certificados. Haga esto solo para obtener confirmación de que el error se está produciendo debido a un certificado incorrecto.

Llame a este método antes de llamar 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;
            ;
    

El enlace aquí resolvió mi problema.

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

Fui a la URL del servicio web (en el servidor que tenía el problema), hice clic en el pequeño ícono de seguridad en IE, que me mostró el certificado. Luego hice clic en la pestaña Detalles, luego en el botón Copiar a archivo, lo que me permitió exportar el certificado como un archivo .cer. Una vez que tuve el certificado localmente, pude importarlo al almacén de certificados en el servidor siguiendo las instrucciones a continuación.

Inicie una nueva MMC. Archivo –> Agregar/Eliminar complemento… Haga clic en Agregar… Elija Certificados y haga clic en Agregar. Marque el botón de opción “Cuenta de equipo”. Haga clic en Siguiente.

Elija la computadora cliente en la siguiente pantalla. Haga clic en Finalizar. Haga clic en Cerrar. Haga clic en Aceptar. AHORA instale el certificado en el almacén de certificados de las autoridades de certificación raíz de confianza. Esto permitirá que todos los usuarios confíen en el certificado.

Un poco tarde para la fiesta, pero si está buscando una solución como la de Yury, el siguiente código lo ayudará a identificar si el problema está relacionado con un certificado de autofirma y, de ser así, ignore el error de autofirma. Obviamente, puede comprobar si hay otros errores de SSL si así lo desea.

El código que usamos (cortesía de Microsoft: http://msdn.microsoft.com/en-us/library/office/dd633677(v=exchg.80).aspx) es el siguiente:

  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;
  

Reseñas y valoraciones

Tienes la opción de añadir valor a nuestra información participando con tu experiencia en las críticas.

¡Haz clic para puntuar esta entrada!
(Votos: 0 Promedio: 0)



Utiliza Nuestro Buscador

Deja una respuesta

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *