2013-07-31 3 views
2

Je travaille sur une application embarquée (exécutant MQX RTOS, écrite en C) qui a la fonctionnalité SMTP. Récemment, le support TLS a été ajouté en utilisant la bibliothèque Mocana NanoSSL. Je suis actuellement en mesure d'envoyer des courriels avec succès via Gmail, Yahoo et les serveurs d'échange privés. Malheureusement, Hotmail ne fonctionne pas. Voici les paramètres de connexion que j'ai utilisé:Echec de la connexion Hotmail/Outlook.com sur les commandes AUTH

Serveur: smtp.live.com
Port: 25 et 587
méthode AUTH: PLAIN et LOGIN

Fondamentalement, je suis en mesure de Connectez-vous au serveur avec succès, effectuez la liaison SSL/TLS (en utilisant STARTTLS) et envoyez le message EHLO chiffré au serveur (en recevant une réponse). Selon cette réponse, le serveur prend en charge à la fois AUTH PLAIN et AUTH LOGIN. Toutefois, une fois que j'envoie l'une de ces commandes, l'appel SSL_recv() suivant que je fais pour obtenir la réponse échoue avec un délai d'expiration ou connection reset by peer. OK, donc après quelques expériences, il semblerait que mon problème se situe au niveau de la bibliothèque SSL et non pas avec le serveur SMTP de Microsoft. J'ai essayé de remplacer les appels SSL_recv() par des appels standard recv() RTCS socket et j'ai pu recevoir et afficher des données cryptées. En désactivant la vérification de mes réponses, j'ai ensuite pu continuer le processus SMTP et envoyer un message avec succès. À ce moment je ne suis pas sûr pourquoi les appels de SSL_recv() sont incapables d'obtenir les données de douille, mais je continuerai à creuser et j'espère trouver une réponse.

+0

Parfois, les serveurs de messagerie abandonnent simplement les connexions au lieu d'être polis afin de réduire le temps perdu sur les robots de spam. Cela indique probablement une légère erreur dans le message reçu n'étant pas 100% à la norme. –

+0

Le problème semble maintenant être dans la pile SSL quelque part. J'ai désactivé ma vérification de réponse et j'ai supprimé les appels SSL_recv (en les remplaçant par des appels RTCS recv()), et maintenant tout fonctionne. Cela signifie qu'il a fonctionné tout le long, et que ce sont les appels à SSL_recv qui ont échoué et pas le serveur de messagerie. Je mettrai à jour ce problème avec d'autres informations au fur et à mesure. – Hippopatimus

Répondre

0

Ainsi, il est la bibliothèque SSL lui-même qui semble me défaut ici. J'ai réussi à contourner le problème et à envoyer des courriels en n'appelant simplement pas SSL_recv() pour vérifier les réponses du serveur. Je ne suis évidemment pas en mesure de vérifier les erreurs ou d'obtenir des retours d'erreur significatifs, mais pour un cas d'utilisation réussi où le serveur accepte tous mes messages SMTP, l'e-mail est envoyé.

1

Eh bien, je l'ai aussi fait fonctionner ici aussi. J'ai dû remplacer le

ssl_ctx = SSL_CTX_new (SSLv23_client_method());

avec soit:

ssl_ctx=SSL_CTX_new(SSLv3_client_method()); 

ou

ssl_ctx=SSL_CTX_new(TLSv1_client_method()); 

Ma compréhension est que la méthode 23_client envoie un client SSL2 bonjour d'abord et ce embrouille le serveur. Je lis cela dans le tutoriel de programmation SSL HP:

http://h71000.www7.hp.com/doc/83final/ba554_90007/ch04s03.html

il est dit: « Cependant, le client SSL à l'aide de la méthode SSLv23 ne peut pas établir une connexion avec le serveur SSL avec la méthode SSLv3/TLSv1 parce SSLv2 bonjour message est envoyé par le client. " SSL3 fonctionne aussi puisque vous pouvez continuer après STARTTLS avec SSL, vous n'avez pas besoin d'utiliser TLS.

Voir ici: https://www.fastmail.fm/help/technology_ssl_vs_tls_starttls.html

+0

Malheureusement SSLv3 et TLSv1 donnent les mêmes résultats pour moi. Cependant, je n'utilise pas OpenSSL, ce qui est une différence importante ici. – Hippopatimus

+0

C'est délicat ici. Cela ne semble fonctionner que si le protocole est fixé et non négocié. Je l'ai maintenant mis à TLSv1 pour smtp.live.com. Il fonctionne également sur le port 25 uniquement. Je ne testerai pas quel paramètre fonctionnera sur le port 587. – Georg

Questions connexes