Recibo este error:
El certificado remoto no es válido según el procedimiento de validación.
cada vez que intento enviar un correo electrónico utilizando el servidor SMTP de Gmail en mi código C #. ¿Alguien puede señalarme la dirección correcta para una solución a este problema?
El siguiente es el seguimiento de la pila ...
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)
Respuestas:
Como solución alternativa, puede desactivar la validación de certificados. Solo haga esto para obtener la confirmación de que el error se está lanzando debido a un certificado incorrecto.
Llame a este método antes de llamar
smtpclient.Send()
:fuente
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 trajo el certificado. Luego hice clic en la pestaña Detalles, hice clic 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 usando las instrucciones a continuación.
Comience una nueva MMC. Archivo -> Agregar / Eliminar complemento ... Haga clic en Agregar ... Elija certificados y haga clic en Agregar. Marque el botón de radio "Cuenta de computadora". Haga clic en Siguiente.
Elija la computadora cliente en la siguiente pantalla. Haz clic en Finalizar. Haga clic en Cerrar Haga clic en Aceptar. AHORA instale el certificado en el almacén de certificados de Trusted Root Certification Authority. Esto permitirá que todos los usuarios confíen en el certificado.
fuente
certutil -f -p test -importPFX Root devcert.pfx
ycertutil -f -p test -importPFX MY devcert.pfx
. Debe ejecutarse en un símbolo del sistema de administración (suponiendo que la contraseña PFX seatest
)Puede mejorar el código preguntando al usuario cuándo el certificado no es válido si desea continuar o no. ¿Quieres continuar? Como a continuación:
Y agregue un método como este:
fuente
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 firma propia y, si es así, ignore el error de firma propia. Obviamente, puede verificar si hay otros errores SSL si así lo desea.
El código que utilizamos (cortesía de Microsoft - http://msdn.microsoft.com/en-us/library/office/dd633677(v=exchg.80).aspx ) es el siguiente:
fuente
Tuve exactamente el mismo problema y descubrí que por defecto el Mail Shield del antivirus Avast tenía activada la "Conexión de escaneo SSL" . Asegúrate de apagar eso .
Que yo sepa, Avast "abrirá" el correo, lo escaneará en busca de virus y luego lo firmará utilizando su propio certificado para que el correo ya no esté firmado por el certificado de gmail, lo que produce ese error.
Solución 1:
Solución 2 (debería ser la mejor seguridad hablando):
fuente
Obtenga el mismo error al enviar desde Outlook debido a SSL. La configuración probada EnableSSL = false resolvió el problema.
ejemplo:
fuente
¿Está seguro de que está utilizando la dirección correcta del servidor SMTP?
Tanto smtp.google.com como smtp.gmail.com funcionan, pero el certificado SSL se emite para el segundo.
fuente
Tuve el mismo error cuando intenté enviar un correo electrónico
SmtpClient
mediante un servidor proxy (Usergate).Verifica que el certificado contenga la dirección del servidor, que no es igual a la dirección del servidor proxy, de ahí el error. Mi solución: cuando se produce un error al verificar el certificado, recibir el certificado, exportarlo y verificar.
Código completo de mi clase de remitente de correo electrónico:
}
fuente
Sé que llego bastante tarde en este juego, pero no he visto una respuesta aquí que apunte a los registros de system.diagnostics para TLS Stream.
Antes de hacer cualquier cambio en su código, asegúrese de entender de qué se trata el problema. El
AuthenticationException
es uno de esa excepción muy genérico que no dice mucho. Para saber qué sucede debajo del capó, edite el archivo app.config para su aplicación (o cree uno nuevo) y asegúrese de tener habilitado el origen de rastreo System.Net en lasystem.diagnostics
sección, por ejemplo:Vuelva a ejecutar su aplicación y verifique el archivo c: \ network.log. Debería ver información detallada sobre su conexión TLS (SSL), por ejemplo:
Sabiendo qué causa el problema, debería poder resolverlo o al menos limitar sus búsquedas en Google.
fuente
Mi problema fue en Windows 2003 Server, cuando llamé a AuthenticateAsClient. Las soluciones anteriores (por ejemplo, eludir
ServicePointManager.ServerCertificateValidationCallback
) no funcionaron.Resulta que esto es un error en Windows 2003, y hay una revisión:
"Las aplicaciones que usan la API de criptografía no pueden validar un certificado X.509 en Windows Server 2003"
https://support.microsoft.com/en-us/kb/938397
La instalación de esta revisión resolvió mi problema.
fuente
La carpeta de su sitio web necesita seguridad del servicio de red. Especialmente el web.config. Utiliza esta cuenta para acceder a su registro para los certificados. Esto detendrá la necesidad de agregar un hack a su código.
fuente
Mi problema no era que estaba haciendo referencia al servidor por la dirección IP en lugar de la URL. Había comprado un certificado firmado de una CA para usar dentro de una red privada. La URL especificada en el certificado es importante cuando se hace referencia al servidor. Una vez que hice referencia al servidor por la URL en el certificado, todo comenzó a funcionar.
fuente
Verifique la fecha y hora de su computadora. Si está mal, actualícelo a la hora actual o configúrelo automáticamente para obtener la hora de Internet.
Debido a que los certificados están vinculados a un período de tiempo fijo, si su reloj está equivocado, es probable que obtenga errores como este. En ese escenario, al arreglar el tiempo, el problema se solucionará.
fuente
Para aquellos que encuentran este mismo error al conectarse a un sitio local con un certificado autofirmado, la siguiente publicación de blog me ayudó.
http://brainof-dave.blogspot.com.au/2008/08/remote-certificate-is-invalid-according.html
fuente
En nuestro caso, el problema fue causado por el certificado del servidor IIS. El sujeto del certificado se estableció en nombre DNS y los usuarios intentaban acceder al sitio web por dirección IP, por lo que la validación de la certificación .NET falló. El problema desapareció cuando los usuarios comenzaron a usar el nombre DNS.
Por lo tanto, debe cambiar la URL de su proveedor a https: //CertificateSubject/xxx/xxx.application
fuente
Hay un artículo de blog de MSDN sobre la investigación de este tipo de problemas:
Solución de problemas de ASP.NET: el certificado remoto no es válido según el procedimiento de validación:
http://blogs.msdn.com/b/jpsanders/archive/2009/09/16/troubleshooting-asp-net-the-remote-certificate- no es válido según el procedimiento de validación.aspx
fuente
Agregar esta línea funcionó para mí. De hecho, esto confía en todos los certificados como se menciona aquí . Sin embargo, esto se puede usar principalmente para la resolución de problemas. Si esto funciona para usted, significa que el certificado del servidor remoto no se agrega como un certificado de confianza en su máquina.
El código completo es
fuente
Resolvió mi problema
// Con referencia a // El problema solo viene Use la línea anterior para establecer un SSl falso para resolver el error cuando el nombre de usuario y la contraseña se ingresan en la configuración SMTP.
fuente
Aquí está la solución que decidí usar.
fuente
El código de la respuesta aceptada me ayudó a depurar el problema. Entonces me di cuenta de que el campo SN del
certificate
argumento no era el mismo que pensaba que era mi servidor SMTP. Al establecer laHost
propiedad de la instancia SmtpClient en el valor SN del certificado, pude solucionar el problema.fuente