Je reçois cette erreur:
Le certificat distant n'est pas valide selon la procédure de validation.
chaque fois que j'essaie d'envoyer des e-mails à l'aide du serveur SMTP de Gmail dans mon code C #. Quelqu'un peut-il m'orienter dans la bonne direction pour trouver une solution à ce problème?
Ce qui suit est la trace de la pile ...
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)
Réponses:
Pour contourner ce problème, vous pouvez désactiver la validation de certificat. Ne faites cela que pour obtenir la confirmation que l'erreur est lancée en raison d'un mauvais certificat.
Appelez cette méthode avant d'appeler
smtpclient.Send()
:la source
Le lien ici a résolu mon problème.
http://brainof-dave.blogspot.com.au/2008/08/remote-certificate-is-invalid-according.html
Je suis allé à l'URL du service Web (sur le serveur qui avait le problème), j'ai cliqué sur la petite icône de sécurité dans IE, qui a fait apparaître le certificat. J'ai ensuite cliqué sur l'onglet Détails, cliqué sur le bouton Copier dans un fichier, ce qui m'a permis d'exporter le certificat sous forme de fichier .cer. Une fois que j'ai eu le certificat localement, j'ai pu l'importer dans le magasin de certificats sur le serveur en utilisant les instructions ci-dessous.
Démarrez une nouvelle console MMC. Fichier -> Ajouter / Supprimer un composant logiciel enfichable ... Cliquez sur Ajouter ... Choisissez Certificats et cliquez sur Ajouter. Cochez la case d'option "Compte d'ordinateur". Cliquez sur Suivant.
Choisissez l'ordinateur client dans l'écran suivant. Cliquez sur Terminer. Cliquez sur Fermer. Cliquez sur OK. Installez MAINTENANT le certificat dans le magasin de certificats des autorités de certification racines de confiance. Cela permettra à tous les utilisateurs de faire confiance au certificat.
la source
certutil -f -p test -importPFX Root devcert.pfx
etcertutil -f -p test -importPFX MY devcert.pfx
. Doit être exécuté dans une invite de commande d'administration (en supposant que le mot de passe PFX esttest
)Vous pouvez améliorer le code en demandant à l'utilisateur lorsque le certificat n'est pas valide s'il souhaite continuer ou non. Voulez-vous continuer? Comme ci-dessous:
Et ajoutez une méthode comme celle-ci:
la source
Un peu tard pour la fête, mais si vous cherchez une solution comme celle de Yury, le code suivant vous aidera à identifier si le problème est lié à un certificat d'auto-signature et, si tel est le cas, ignorez l'erreur d'auto-signature. Vous pouvez évidemment rechercher d'autres erreurs SSL si vous le souhaitez.
Le code que nous utilisons (avec l'aimable autorisation de Microsoft - http://msdn.microsoft.com/en-us/library/office/dd633677(v=exchg.80).aspx ) est le suivant:
la source
J'ai eu exactement le même problème et j'ai compris que par défaut l' antivirus Mail Shield d'Avast avait la "Scan SSL connection" activée. Assurez-vous de désactiver cela .
D'après mes connaissances, Avast "ouvrira" le courrier, le recherchera pour détecter tout virus, puis le signera en utilisant son propre certificat afin que le courrier ne soit plus signé par le certificat de gmail qui produit cette erreur.
Solution 1:
Solution 2 (devrait être la meilleure solution de sécurité):
la source
Obtenez la même erreur lors de l'envoi à partir d'Outlook en raison de SSL. Le paramètre essayé EnableSSL = false a résolu le problème.
exemple:
la source
Êtes-vous sûr d'utiliser la bonne adresse de serveur SMTP?
Smtp.google.com et smtp.gmail.com fonctionnent tous les deux, mais un certificat SSL est émis pour le second.
la source
J'ai eu la même erreur lorsque j'ai essayé d'envoyer des e-mails
SmtpClient
via un serveur proxy (Usergate).Vérifie que le certificat contenait l'adresse du serveur, qui n'est pas égale à l'adresse du serveur proxy, d'où l'erreur. Ma solution: lorsqu'une erreur survient lors de la vérification du certificat, recevez le certificat, exportez-le et vérifiez.
Code complet de ma classe d'expéditeur d'email:
}
la source
Je sais que je suis assez tard dans ce jeu, mais je n'ai pas vu de réponse pointant ici vers les journaux system.diagnostics pour le flux TLS.
Avant d’apporter des modifications à votre code, assurez-vous de bien comprendre le problème. Le
AuthenticationException
fait partie de cette exception très générique qui ne dit pas grand-chose. Pour savoir ce qui se passe sous le capot, modifiez le fichier app.config de votre application (ou créez-en un nouveau) et assurez-vous que la source de trace System.Net est activée dans lasystem.diagnostics
section, par exemple:Relancez votre application et vérifiez le fichier c: \ network.log. Vous devriez y voir des informations détaillées sur votre connexion TLS (SSL), par exemple:
Sachant ce qui cause le problème, vous devriez pouvoir le résoudre ou au moins affiner vos recherches Google.
la source
Mon problème était sur Windows 2003 Server, lors de l'appel d'AuthenticateAsClient. Les solutions ci-dessus (par exemple contourner
ServicePointManager.ServerCertificateValidationCallback
) n'ont pas fonctionné.Il s'avère que c'est un bogue dans Windows 2003, et il y a un correctif:
"Les applications qui utilisent l'API de cryptographie ne peuvent pas valider un certificat X.509 dans Windows Server 2003"
https://support.microsoft.com/en-us/kb/938397
L'installation de ce correctif a résolu mon problème.
la source
Mon problème n'était pas que je référençais le serveur par l'adresse IP au lieu de l'URL. J'avais acheté un certificat signé auprès d'une autorité de certification pour l'utiliser dans un réseau privé. L'URL spécifiée sur le certificat importe lors du référencement du serveur. Une fois que j'ai référencé le serveur par l'URL dans le certificat, tout a commencé à fonctionner.
la source
Le dossier de votre site Web a besoin de la sécurité du service réseau. Surtout le web.config. Il utilise ce compte pour accéder à votre registre pour les certificats. Cela arrêtera le besoin d'ajouter un hack à votre code.
la source
Vérifiez la date et l'heure de votre ordinateur. Si elle est incorrecte, mettez-la à jour à l'heure actuelle ou réglez-la automatiquement pour obtenir l'heure sur Internet.
Étant donné que les certificats sont liés à une période de temps fixe, si votre horloge est incorrecte, vous risquez d'obtenir des erreurs comme celle-ci. Dans ce scénario, en fixant l'heure, le problème sera résolu.
la source
Pour ceux qui rencontrent cette même erreur lors de la connexion à un site local avec un certificat auto-signé, le billet de blog suivant m'a aidé.
http://brainof-dave.blogspot.com.au/2008/08/remote-certificate-is-invalid-according.html
la source
Dans notre cas, le problème a été causé par le certificat du serveur IIS. Le sujet du certificat a été défini sur le nom DNS et les utilisateurs tentaient d'accéder au site Web par adresse IP, la validation de la certification .NET a donc échoué. Le problème a disparu lorsque les utilisateurs ont commencé à utiliser le nom DNS.
Vous devez donc modifier l'URL de votre fournisseur en https: //CertificateSubject/xxx/xxx.application
la source
Il existe un article de blog MSDN sur la recherche de ce type de problèmes:
Dépannage d'ASP.NET - Le certificat distant n'est pas valide selon la procédure de validation:
http://blogs.msdn.com/b/jpsanders/archive/2009/09/16/troubleshooting-asp-net-the-remote-certificate- est-invalide-selon-la-procédure-de-validation.aspx
la source
L'ajout de cette ligne a fonctionné pour moi. En fait, cela fait confiance à tous les certificats comme mentionné ici . Cependant, cela peut être utilisé principalement pour le dépannage. Si cela fonctionne pour vous, cela signifie que le certificat du serveur distant n'est pas ajouté en tant que certificat approuvé sur votre ordinateur.
Le code complet est
la source
Cela a résolu mon problème
// Avec référence à // Le problème vient uniquement Utilisez la ligne ci-dessus pour définir un faux SSl afin de résoudre l'erreur lorsque le nom d'utilisateur et le mot de passe sont entrés dans les paramètres SMTP.
la source
voici la solution que j'ai décidé d'utiliser.
la source
Le code de la réponse acceptée m'a aidé à déboguer le problème. J'ai alors réalisé que le champ SN de l'
certificate
argument n'était pas le même que ce que je pensais être mon serveur SMTP. En définissant laHost
propriété de l'instance SmtpClient sur la valeur SN du certificat, j'ai pu résoudre le problème.la source