2016-08-18 1 views
1

J'essaie de me connecter à un serveur SMTP à partir d'une machine .NetCore/Ubuntu via Mailkit.Inattendu "Le certificat distant n'est pas valide selon la procédure de validation."

Je tente de me connecter au port 25 sur le serveur avec le protocole SSL désactivé.

Le serveur de messagerie est un serveur Windows sur le réseau local et fonctionne correctement avec les autres machines avec les mêmes paramètres que ceux utilisés sur la machine Ubuntu concernée.

Le code utilisé pour se connecter est la suivante:

  using (var client = new SmtpClient()) 
      { 
       client.Connect("smtp.mydomain.com", 25,false); 
       client.Authenticate(username, password); 
       client.Send(emailMessage); 
       client.Disconnect(true); 
      } 

Cependant, cela jette une exception immédiatement après la ligne .Connect avec le message d'erreur « Le certificat à distance est invalide selon la procédure de validation. "

Je suis surpris que les certificats sont impliqués à tous sur le port de vanille 25.

Quelqu'un at-il des idées ce qui se passe?

Répondre

2

Le serveur est probablement en train d'activer TLS dans le cadre de SMTP. C'est assez commun, c'est le verbe STARTTLS.

Si cela fonctionne sur d'autres boîtes Windows, êtes-vous dans un AD? Si tel est le cas, il existe probablement une autorité de certification sur les certificats d'émission AD qui sont automatiquement approuvés via la stratégie de groupe. Donc, vous avez besoin de configure OpenSSL on your Ubuntu machine to trust that CA aussi.

Ou vous pouvez simplement dire merde, et dire StmpClient d'ignorer la sécurité avec

client.EnableSsl = true; 
+0

Merci pour votre réponse. J'ai été capable de contourner ce problème en transmettant SecureSocketOptions.None; en tant que troisième paramètre de la méthode Connect(). – Hughgo

0

La raison pour laquelle vous voyez un certificat SSL sur le port 25 est dû à la raison pour laquelle le serveur offre une starttls sur ce Port. Pour savoir quel certificat SSL est utilisé, vous pouvez utiliser de la manière suivante comme mentionné here via OpenSSL:

OpenSSL s_client -connect exchange01.int.contoso.com:25 -starttls smtp

Il pourrait Soit que ce certificat SSL utilisé ici est autosigné, alors vous pouvez le remplacer par un certificat de confiance (si vous le pouvez) ou vous pouvez faire confiance au certificat autosigné.