none
Exchange 2010 : Probleme de TLS - Subject Mismatch (Event ID 11005) vers passerelle EXIM RRS feed

  • Question

  • Bonjour a tous.

    Ayant finalisé le déploiement de notre infra interne Exchange, je réalise les tests de recette de mise en production et je tombe sur un os..
    J'ai déployé un connecteur pour l'envoi des messages vers les domaines externe en passant via une passerelle Exim qui est opérationnelle (nous recevons bien les mails en entrant depuis internet), et j'ai installé sur le serveur un certificat GEOTrust.

    Voici les informations technique relative au connecteur / Certificat :

    Connecteur : 
    FQDN : email.domaine.fr
    Router vers les hotes : hermes.intra.domaine.fr
    Authentification : de Base sur TLS, avec identifiant / mot de Passe fourni et opérationnel sur le serveur exim
    Serveur Source : exchcas01 / exchcas02 (fqdn du CasArray : email.domaine.fr, FQDN des machines : exchcas01/02.domaine.fr)

    Certificat : email.domaine.fr

    CN = email.domain.fr
    OU = Domain Control Validated - GeoTrust(R) SSL Trial
    OU = www.geotrust.com/resources/cps
    OU = GT64190758
    SERIALNUMBER = tfxBIpITE3PepOKk3/eueEOfVnhdapP/


    Passerelle Exim :
    Nom de la machine : hermes.domaine.fr
    Certificat Serveur par defaut : email.intra.domaine.fr
    E = internet@domaine.fr
    CN = email.intra.domaine.fr
    OU = Service Internet
    O = Organisation
    L = Nantes
    S = Loire Atlantique
    C = FR

    Comme indiqué dans le sujet, j'ai ce message d'erreur dans l'observateur d’évènement Exchange : 

    Impossible de valider le certificat TLS de l'hôte actif pour le connecteur Envoi vers Exterieure. L'erreur de validation du certificat est SubjectMismatch. Si le problème persiste, contactez l'administrateur de l'hôte actif pour résoudre le problème.

    Et ce log sur Exim : 

    17:59:02 26535 sender_fullhost = [10.10.20.1]
    17:59:02 26535 sender_rcvhost = [10.10.20.1]
    17:59:02 26535 Process 26535 is handling incoming connection from [10.10.20.1]
    17:59:02 26535 host in host_lookup? no (option unset)
    17:59:02 26535 set_process_info: 26535 handling incoming connection from [10.10.20.1]
    17:59:02 26535 host in host_reject_connection? no (option unset)
    17:59:02 26535 host in sender_unqualified_hosts? no (option unset)
    17:59:02 26535 host in recipient_unqualified_hosts? no (option unset)
    17:59:02 26535 host in helo_verify_hosts? no (option unset)
    17:59:02 26535 host in helo_try_verify_hosts? no (option unset)
    17:59:02 26535 host in helo_accept_junk_hosts? no (option unset)
    17:59:02 26535 using ACL "acl_connect"
    17:59:02 26535 processing "accept"
    17:59:02 26535 check hosts = *
    17:59:02 26535 host in "*"? yes (matched "*")
    17:59:02 26535 accept: condition test succeeded
    17:59:02 26535 expanding: $smtp_active_hostname ESMTP Exim $version_number $tod_full
    17:59:02 26535    result: hermes.domaine.fr ESMTP Exim 4.72 Fri, 04 May 2012 17:59:02 +0200
    17:59:02 26535 SMTP>> 220 hermes.domaine.fr ESMTP Exim 4.72 Fri, 04 May 2012 17:59:02 +0200
    17:59:02 26535 Process 26535 is ready for new message
    17:59:02 26535 smtp_setup_msg entered
    17:59:02 26535 SMTP<< EHLO email.domaine.fr
    17:59:02 26535 email.domaine.fr in helo_lookup_domains? no (end of list)
    17:59:02 26535 sender_fullhost = (email.domaine.fr) [10.10.20.1]
    17:59:02 26535 sender_rcvhost = [10.10.20.1] (helo=email.domaine.fr)
    17:59:02 26535 set_process_info: 26535 handling incoming connection from (email.domaine.fr) [10.10.20.1]
    17:59:02 26535 using ACL "acl_check_helo"
    17:59:02 26535 processing "accept"
    17:59:02 26535 check hosts = @[] : @
    17:59:02 26535 Actual local interface address is 127.0.0.1 (lo)
    17:59:02 26535 Actual local interface address is 192.168.44.30 (eth0)
    17:59:02 26535 Actual local interface address is ::1 (lo)
    17:59:02 26535 Actual local interface address is fe80::250:56ff:feab:6962 (eth0)
    17:59:02 26535 gethostbyname2(af=inet6) returned 1 (HOST_NOT_FOUND)
    17:59:02 26535 gethostbyname2(af=inet) returned 1 (HOST_NOT_FOUND)
    17:59:02 26535 no IP address found for host hermes.domaine.fr (during SMTP connection from (email.domaine.fr) [10.10.20.1])
    17:59:02 26535 LOG: host_lookup_failed MAIN
    17:59:02 26535   no IP address found for host hermes.domaine.fr (during SMTP connection from (email.domaine.fr) [10.10.20.1])
    17:59:02 26535 host in "@[] : @"? no (failed to find IP address for hermes.domaine.fr)
    17:59:02 26535 accept: condition test failed
    17:59:02 26535 processing "deny"
    17:59:02 26535 expanding: $sender_helo_name
    17:59:02 26535    result: email.domaine.fr
    17:59:02 26535 expanding: $smtp_active_hostname
    17:59:02 26535    result: hermes.domaine.fr
    17:59:02 26535 expanding: $sender_helo_name
    17:59:02 26535    result: email.domaine.fr
    17:59:02 26535 expanding: [$interface_address]
    17:59:02 26535    result: [192.168.44.30]
    17:59:02 26535 condition: or { {match{$sender_helo_name}{$smtp_active_hostname}} {eq{$sender_helo_name}{[$interface_address]}} }
    17:59:02 26535    result: false
    17:59:02 26535 expanding: true
    17:59:02 26535    result: true
    17:59:02 26535 skipping: result is not used
    17:59:02 26535 expanding: false
    17:59:02 26535    result: false
    17:59:02 26535 expanding: ${if or { {match{$sender_helo_name}{$smtp_active_hostname}} {eq{$sender_helo_name}{[$interface_address]}} } {true}{false} }
    17:59:02 26535    result: false
    17:59:02 26535 check condition = ${if or { {match{$sender_helo_name}{$smtp_active_hostname}} {eq{$sender_helo_name}{[$interface_address]}} } {true}{false} }
    17:59:02 26535                 = false
    17:59:02 26535 deny: condition test failed
    17:59:02 26535 processing "deny"
    17:59:02 26535 expanding: $sender_helo_name
    17:59:02 26535    result: email.domaine.fr
    17:59:02 26535 condition: isip{$sender_helo_name}
    17:59:02 26535    result: false
    17:59:02 26535 expanding: ${if isip{$sender_helo_name}}
    17:59:02 26535    result:
    17:59:02 26535 check condition = ${if isip{$sender_helo_name}}
    17:59:02 26535                 =
    17:59:02 26535 deny: condition test failed
    17:59:02 26535 processing "deny"
    17:59:02 26535 expanding: $sender_helo_name
    17:59:02 26535    result: email.domaine.fr
    17:59:02 26535 expanding: +local_domains
    17:59:02 26535    result: +local_domains
    17:59:02 26535 search_open: lsearch "/etc/exim4/domaine/domains"
    17:59:02 26535 search_find: file="/etc/exim4/domaine/domains"
    17:59:02 26535   key="email.domaine.fr" partial=-1 affix=NULL starflags=0
    17:59:02 26535 LRU list:
    17:59:02 26535   :/etc/exim4/domaine/domains
    17:59:02 26535   End
    17:59:02 26535 internal_search_find: file="/etc/exim4/domaine/domains"
    17:59:02 26535   type=lsearch key="email.domaine.fr"
    17:59:02 26535 file lookup required for email.domaine.fr
    17:59:02 26535   in /etc/exim4/domaine/domains
    17:59:02 26535 lookup failed
    17:59:02 26535 email.domaine.fr in "lsearch;/etc/exim4/domaine/domains"? no (end of list)
    17:59:02 26535 email.domaine.fr in "+local_domains"? no (end of list)
    17:59:02 26535 condition: match_domain{$sender_helo_name}{+local_domains}
    17:59:02 26535    result: false
    17:59:02 26535 expanding: true
    17:59:02 26535    result: true
    17:59:02 26535 skipping: result is not used
    17:59:02 26535 expanding: false
    17:59:02 26535    result: false
    17:59:02 26535 expanding: ${if match_domain{$sender_helo_name}{+local_domains}{true}{false}}
    17:59:02 26535    result: false
    17:59:02 26535 check condition = ${if match_domain{$sender_helo_name}{+local_domains}{true}{false}}
    17:59:02 26535                 = false
    17:59:02 26535 deny: condition test failed
    17:59:02 26535 processing "accept"
    17:59:02 26535 accept: condition test succeeded
    17:59:02 26535 host in pipelining_advertise_hosts? yes (matched "*")
    17:59:02 26535 host in auth_advertise_hosts? yes (matched "*")
    17:59:02 26535 host in tls_advertise_hosts? yes (matched "*")
    17:59:02 26535 SMTP>> 250-hermes.domaine.fr Hello email.domaine.fr [10.10.20.1]
    17:59:02 26535 250-SIZE 52428800
    17:59:02 26535 250-PIPELINING
    17:59:02 26535 250-STARTTLS
    17:59:02 26535 250 HELP
    17:59:02 26535 SMTP<< STARTTLS
    17:59:02 26535 initializing GnuTLS as a server
    17:59:02 26535 read D-H parameters from file
    17:59:02 26535 initialized D-H parameters
    17:59:02 26535 certificate file = /etc/exim4/exim.crt
    17:59:02 26535 key file = /etc/exim4/exim.key
    17:59:02 26535 expanding: /etc/ssl/certs/ca-certificates.crt
    17:59:02 26535    result: /etc/ssl/certs/ca-certificates.crt
    17:59:02 26535 condition: exists{/etc/ssl/certs/ca-certificates.crt}
    17:59:02 26535    result: true
    17:59:02 26535 expanding: /etc/ssl/certs/ca-certificates.crt
    17:59:02 26535    result: /etc/ssl/certs/ca-certificates.crt
    17:59:02 26535 expanding: /dev/null
    17:59:02 26535    result: /dev/null
    17:59:02 26535 skipping: result is not used
    17:59:02 26535 expanding: ${if exists{/etc/ssl/certs/ca-certificates.crt}{/etc/ssl/certs/ca-certificates.crt}{/dev/null}}
    17:59:02 26535    result: /etc/ssl/certs/ca-certificates.crt
    17:59:02 26535 verify certificates = /etc/ssl/certs/ca-certificates.crt size=47765
    17:59:02 26535 initialized certificate stuff
    17:59:02 26535 host in tls_verify_hosts? no (option unset)
    17:59:02 26535 host in tls_try_verify_hosts? yes (matched "*")
    17:59:02 26535 adjusted cipher priorities: 5 4 3 2
    17:59:02 26535 initialized GnuTLS session
    17:59:02 26535 SMTP>> 220 TLS go ahead
    17:59:03 26535 gnutls_handshake was successful
    17:59:03 26535 TLS certificate verified: peerdn=serialNumber=tfxBIpITE3PepOKk3/eueEOfVnhdapP/,OU=GT64190758,OU=www.geotrust.com/resources/cps,OU=Domain Control Validated - GeoTrust(R) SSL Trial,CN=email.domaine.fr
    17:59:03 26535 cipher: TLS1.0:RSA_AES_128_CBC_SHA1:16
    17:59:03 26535 sender_fullhost = [10.10.20.1]
    17:59:03 26535 sender_rcvhost = [10.10.20.1]
    17:59:03 26535 set_process_info: 26535 handling incoming TLS connection from [10.10.20.1]
    17:59:03 26535 TLS active
    17:59:03 26535 Calling gnutls_record_recv(1434340, 1435cb0, 4096)
    17:59:03 26535 SMTP<< QUIT
    17:59:03 26535 SMTP>> 221 hermes.domaine.fr closing connection
    17:59:03 26535 tls_do_write(13f75a0, 41)
    17:59:03 26535 gnutls_record_send(SSL, 13f75a0, 41)
    17:59:03 26535 outbytes=41
    17:59:03 26535 tls_close(): shutting down TLS
    17:59:03 26535 LOG: smtp_connection MAIN
    17:59:03 26535   SMTP connection from [10.10.20.1] closed by QUIT
    17:59:03 26535 search_tidyup called
    17:59:03 25527 child 26535 ended: status=0x0
    17:59:03 25527 0 SMTP accept processes now running
    17:59:03 25527 Listening...


    Est ce que quelqu'un pourrait me mettre sur la piste à savoir quel nom FQDN n'est pas le bon sur le certificat ? 

    Merci d'avance

    PS : A savoir, lors de la mise en production, nous aurons un certificat wildcard : *.domaine.fr
    Est ce que cela changerait le comportement sans reconfiguration supplémentaire ?


    • Modifié tdldp1 vendredi 4 mai 2012 16:10
    vendredi 4 mai 2012 16:07

Réponses

  • Plus simple là :)

    Il suffit de récuperer la chaine de certificats approuvant le certificat "hermes", et de les rajouter dans les magasins de certificat du serveur exchange :

    - le top dans les trusted root

    - les intermédiaires dans les intermediate certification authority

    Attention, en ajoutant ces certificats vous approuvez TOUS les certificats issus par ces autorités, ce qui a un impact en terme de sécurité.

    • Proposé comme réponse Florin Ciuca mardi 8 mai 2012 12:54
    • Marqué comme réponse tdldp1 mercredi 9 mai 2012 10:31
    lundi 7 mai 2012 12:06
    Modérateur
  • Il ne faut pas oublier qu'un certificat, au dela de la notion de chiffrement des données, assure avant tout l'identité du partenaire. Pour la petite histoire, le chiffrement proprement dit des données se fait en général AES  (ou un autre chiffrement symétrique) et non pas sur l'algorithme asymétrique lié au certificat, qui ne sert qu'a transmettre la clé de chiffrement symétrique.

    A l'origine 1 certificat = 1 nom, hors on rencontre de plus en plus de sites qui peuvent être accédé par plusieurs noms différents. Il y a deux réponses à ce problème : les certificats wildcard (*.mondomaine.fr) et les SAN : un certificat peut contenir plusieurs noms différents (mail.mondomaine.fr, autodiscover.mondomaine2.fr, etc.). L'avantage du SAN est de ne contenir que les noms souhaités (et pas tout un domaine), et ces noms peuvent représenter des domaines différents.

    Dans un SAN vous avez un champs supplémentaire (Subject Alterntive Name), ou vous pouvez rajouter des enregistrement DNS supplémentaires avec les FQDN souhaités.

    Si vous avez une autorité interne, elle doit être en 2008 au minimum pour pouvoir délivrer des certificats avec SAN, sinon vous pouvez passer par les sites publics, le prix est supérieur à celui d'un certificat classique.

     

     

     

     

    • Proposé comme réponse Florin Ciuca mardi 8 mai 2012 12:54
    • Marqué comme réponse tdldp1 mercredi 9 mai 2012 10:31
    lundi 7 mai 2012 08:31
    Modérateur
  • Bien pour ceux que ca interesserait : 
    Via MMC, avec le SNAP IN Certificats, ajouter le certificat du serveur de relais de messagerie exim (Meme autosigné) dans Autorité de certification racine de confiance en plus de l'ajouter aux certificats exchange sur les 2 serveurs CAS.

    Ce probleme est résolu, pour la problématique exposé. Par contre je vais ouvrir un autre sujet relatif au non acheminement des messages sur la passerelle (meme si exchange me dit que le message a été soumis)

    Merci encore pour votre aide..


    • Marqué comme réponse tdldp1 mercredi 9 mai 2012 10:35
    mercredi 9 mai 2012 10:34

Toutes les réponses

  • Bonsoir,

    Il y a beaucoup de noms qui ne correspondent pas, et dont on ne sait pas s'ils sont dans le certificat !

    la route "hermes.intra.domaine.fr" ?

    email.intra.domaine.fr ?

    A noter que le connecteur d'envoi se sert pas pour la réception, comme le nom l'indique!

    A suivre...


    Thierry DEMAN. Exchange MVP. https://www.mcpvirtualbusinesscard.com/VBCServer/MVPtdeman/profile (69 MCPs) http://base.faqexchange.info

    vendredi 4 mai 2012 18:29
    Modérateur
  • SubjectMismatch -> le nom du serveur est différent du nom sur le certificat.

    Vous indiquez : Passerelle Exim :
    Nom de la machine : hermes.domaine.fr
    Certificat Serveur par defaut : email.intra.domaine.fr
    E = internet@domaine.fr
    CN = email.intra.domaine.fr
    OU = Service Internet
    O = Organisation
    L = Nantes
    S = Loire Atlantique
    C = FR

    Le subjectname devrait être de la forme CN=hermes.domaine.fr (avec idéalement les CN,OU,O,L,S,C mais cela n'aura pas forcement d'impact), ou alors un Subject Alternative Name de la forme DNS=hermes.domaine.fr. Je ne suis pas familier d'Exim, mais apparament Exchange renvoi bien son certificat mail.domaine.fr (17:59:03 26535 TLS certificate verified: peerdn=serialNumber=tfxBIpITE3PepOKk3/eueEOfVnhdapP/,OU=GT64190758,OU=www.geotrust.com/resources/cps,OU=Domain Control Validated - GeoTrust(R) SSL Trial,CN=email.domaine.fr)

    lundi 7 mai 2012 07:59
    Modérateur
  • Bonjour et
    Merci Thierry et Bruce pour votre temps et les réponses apporté...

    Donc pour bien comprendre et ne pas me tromper, exchange attend sur le certificat qu'il recoit du serveur que le nom du certificat corresponde au nom de la machine et non à un FQDN de service c'est bien cela ? et donc dans le cas d'exemple mais qui ne sera pas la version en production, hermes.domaine.fr au lieu de email.intra.domaine.fr 
    (Ce qui va un peu à l'encontre du fonctionnement d'exchange en lui même qui me semble reposer sur des FQDN de services (CasArray, DAG etc..) et non sur celui des machines (enfin pour ce qui est de OWA, ECP, etc..).

    En ce qui concerne le SAN, je suis pas du tout familier de sa mise en oeuvre, ni de son fonctionnement et son intégration dans exchange.. Vous auriez une documentation "compréhensible" qqpart (meme en anglais) ? 

    Merci encore et je vous tiens informé des tests avec le changement de CN du serveur exim, voir du passage en certificat wildcard..

    Tdldp


    • Modifié tdldp1 lundi 7 mai 2012 08:19
    lundi 7 mai 2012 08:18
  • Il ne faut pas oublier qu'un certificat, au dela de la notion de chiffrement des données, assure avant tout l'identité du partenaire. Pour la petite histoire, le chiffrement proprement dit des données se fait en général AES  (ou un autre chiffrement symétrique) et non pas sur l'algorithme asymétrique lié au certificat, qui ne sert qu'a transmettre la clé de chiffrement symétrique.

    A l'origine 1 certificat = 1 nom, hors on rencontre de plus en plus de sites qui peuvent être accédé par plusieurs noms différents. Il y a deux réponses à ce problème : les certificats wildcard (*.mondomaine.fr) et les SAN : un certificat peut contenir plusieurs noms différents (mail.mondomaine.fr, autodiscover.mondomaine2.fr, etc.). L'avantage du SAN est de ne contenir que les noms souhaités (et pas tout un domaine), et ces noms peuvent représenter des domaines différents.

    Dans un SAN vous avez un champs supplémentaire (Subject Alterntive Name), ou vous pouvez rajouter des enregistrement DNS supplémentaires avec les FQDN souhaités.

    Si vous avez une autorité interne, elle doit être en 2008 au minimum pour pouvoir délivrer des certificats avec SAN, sinon vous pouvez passer par les sites publics, le prix est supérieur à celui d'un certificat classique.

     

     

     

     

    • Proposé comme réponse Florin Ciuca mardi 8 mai 2012 12:54
    • Marqué comme réponse tdldp1 mercredi 9 mai 2012 10:31
    lundi 7 mai 2012 08:31
    Modérateur
  • En terme de prix, pour le SAN, c'est kif kif avec un wildcard par un site public... (A 20 € pret). Le problème n'est clairement pas d'ordre financier...  

    Avantage du wildcard (ou inconvénient c'est selon), c'est qu'on peut couvrir plusieurs besoins distinct  (ex: exchange (identité), paiement en ligne (SSL), intranet / extranet, etc..) sur autant de serveur que l'on souhaite... Le SAN etant limité en nombre d'installation (de ce que j'en ai lue, mais je peux me tromper)

    Je vais aussi regarder du coté de l'autorité interne avec l'exploit, toutefois il me semblait que l'autorité interne n'est pas systématiquement compatible avec tous les outils mobile (de type  : Blackberry, Iphone). Comme nous avons une population de commerciaux dont le matériel est particulièrement hétéroclite, je me pose la question du bien-fondé de ce type de certificat (je recherche à ce sujet un retour d’expérience, mais vais aussi parcourir le forum à ce sujet..)

    Bref.. Je test ;)

    Tdldp

    EDIT : Pour le coup, en modifiant le certificat exim sur le fqdn : hermes.domaine.fr j'ai désormais le message:
    Impossible de valider le certificat TLS de l'hôte actif pour le connecteur Envoi vers Exterieure. L'erreur de validation du certificat est UntrustedRoot. Si le problème persiste, contactez l'administrateur de l'hôte actif pour résoudre le problème.


    • Modifié tdldp1 lundi 7 mai 2012 09:38
    lundi 7 mai 2012 08:38
  • Plus simple là :)

    Il suffit de récuperer la chaine de certificats approuvant le certificat "hermes", et de les rajouter dans les magasins de certificat du serveur exchange :

    - le top dans les trusted root

    - les intermédiaires dans les intermediate certification authority

    Attention, en ajoutant ces certificats vous approuvez TOUS les certificats issus par ces autorités, ce qui a un impact en terme de sécurité.

    • Proposé comme réponse Florin Ciuca mardi 8 mai 2012 12:54
    • Marqué comme réponse tdldp1 mercredi 9 mai 2012 10:31
    lundi 7 mai 2012 12:06
    Modérateur
  • Bonjour

    Juste une question annexe, si le certificat est autosigné en attendant le wildcard, c'est la même procédure ? (Je met le certificat dans le magasin autorité de confiance, intermédiaire de confiance, et editeur aprouvé ? 

    Mais je crois connaitre déjà la réponse : Pas de self-signed.. ;)

    tdldp

    Edit : Bon j'ai ajouté le certificat aux magasin des 2 serveurs CAS, ainsi qu'a la console exchange... Il me fait pas d'erreur au moment de l'intégration, mais toujours le untrusted root... A tout hasard faut pas redemarrer les serveurs après l'intégration des certificats ?

    • Modifié tdldp1 lundi 7 mai 2012 15:37
    lundi 7 mai 2012 15:22
  • Bien pour ceux que ca interesserait : 
    Via MMC, avec le SNAP IN Certificats, ajouter le certificat du serveur de relais de messagerie exim (Meme autosigné) dans Autorité de certification racine de confiance en plus de l'ajouter aux certificats exchange sur les 2 serveurs CAS.

    Ce probleme est résolu, pour la problématique exposé. Par contre je vais ouvrir un autre sujet relatif au non acheminement des messages sur la passerelle (meme si exchange me dit que le message a été soumis)

    Merci encore pour votre aide..


    • Marqué comme réponse tdldp1 mercredi 9 mai 2012 10:35
    mercredi 9 mai 2012 10:34