Obtenir "Le certificat distant est invalide selon la procédure de validation" lorsque le serveur SMPT possède un certificat valide

Cela semble une erreur commune, mais bien que j'ai trouvé un travail (voir ci-dessous) je ne peux pas cerner la raison pour laquelle je suis arriver en premier lieu.

Je suis en train d'écrire SMTP fonctionnalités de notre application, et je suis d'essayer d'ajouter la fonctionnalité SSL pour le travail SMTP que nous avons déjà.

Je suis en train de tester l'utilisation de notre société MS Exchange server et plus précisément le webmail option est activée. Je peux envoyer des e-mails en interne par le biais de mon code par pas authentifier ma connexion et l'envoi de façon anonyme, cependant, ces e-mails ne seront pas de relais à des adresses e-mail externes en raison de nos sociétés politiques. En outre, je suis de la programmation, cette pour nos clients, et ils ne sont pas tous d'autoriser l'ouverture de relais et/ou les connexions anonymes.

Je crois que le serveur Exchange est Explicite à l'aide de SSL/TLS. J'ai essayé de telnet à l'adresse du serveur sur le port 25 et a obtenu une réponse de texte, lisible par l'homme de la réponse, qui, selon certains de mes recherches précédemment signifie qu'il est Explicite à l'aide de SSL/TLS.

J'ai le test code suivant

SmtpClient SMTPClient = new SmtpClient(webmailaddress);
SMTPClient.Port = 25;
SMTPClient.UseDefaultCredentials = true;
SMTPClient.EnableSsl = true;
System.Net.Mail.MailMessage Message = new `
System.Net.Mail.MailMessage(emailFrom,emailTo,subject,body);
SMTPClient.Send(Message);

Au cours de ma recherche d'une solution, je suis tombé sur ce "La distance certificat n'est pas valide selon la procédure de validation." à l'aide de SMTP de Gmail serveur

À partir de laquelle j'ai obtenu le code suivant...

ServicePointManager.ServerCertificateValidationCallback = new RemoteCertificateValidationCallback(ValidateServerCertificate);

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

Cela fonctionne dans mon code de test. TOUTEFOIS, le processus réel je suis en train d'écrire (plutôt que mon code de test) va s'exécuter en arrière-plan et ne peut pas vraiment demander à l'utilisateur (au lieu de cela, il signale les erreurs dans windows journal des erreurs).

Que j'ai commencé, ma question est vraiment pourquoi je me fais de cette erreur. Si je vais à l'https:webmail.ourdomain.co.uk dans un navigateur, il montre un certificat valide et il n'y a pas d'option pour installer le certificat (comme je l'aurais fait si c'était un auto-signé).

Obtenir
Cependant, quand je lance mon code, avec un saut de débogage poing dans la ValidateServerCertificate méthode, je regarde le certificat de valeurs et de voir un émetteur de notre serveur et à ne pas utiliser avant", et "ne pas utiliser après" propriétés d'aujourd'hui. Cela ne correspond pas au certificat que j'obtiens.

J'ai également vérifié que le sslPolicyErrors les drapeaux sont dans le débogage de ValidateServerCertificate, et ils se montrent "RemoteCertificateChainErrors" et "RemoteCertificateNameMismatch".

Que suis-je en manquant à ce sujet... pourquoi n'est-il pas en utilisant le certificat correct? Si il y a des étapes à suivre pour installer le certificat localement pour qu'il utilise alors j'ai besoin de savoir afin que je puisse le dire à mes clients ce qu'ils doivent faire s'ils le reçoivent.

Je ne veux pas juste de passer outre le contrôle par retour véritable de la ValidateServerCertificate méthode, et parce que c'est un processus d'arrière-plan, je ne peux pas demander à l'utilisateur, donc j'ai besoin de comprendre comment obtenir mon code pour utiliser le bon/certificat de confiance.

Espère que quelqu'un pourra vous conseiller.

source d'informationauteur RosieC