IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

API standards et tierces Java Discussion :

[JavaMail] Erreur en fonction de l'OS


Sujet :

API standards et tierces Java

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre confirmé Avatar de Jose.N70
    Homme Profil pro
    Développeur Java
    Inscrit en
    Mars 2009
    Messages
    162
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 44
    Localisation : France, Hauts de Seine (Île de France)

    Informations professionnelles :
    Activité : Développeur Java
    Secteur : Service public

    Informations forums :
    Inscription : Mars 2009
    Messages : 162
    Par défaut [JavaMail] Erreur en fonction de l'OS
    Bonjour, question qui peut paraitre bête mais que je souhaite comprendre et surtout résoudre.

    J'utilise plusieurs postes, aussi bien linux que windows, lorsque je vais sur un linux et que transmets un mail ca marche bien, mais sous windows j'ai une erreur qui est levée à savoir :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    javax.mail.MessagingException: Could not convert socket to TLS;
         nested exception is:
         javax.net.ssl.SSLHandshakeException: sun.security.validator.ValidatorException: PKIX path building failed: sun.security.provider.certpath.SunCertPathBuilderException: unable to find valid certification path to requested target
         at com.sun.mail.smtp.SMTPTransport.startTLS(SMTPTransport.java:1918)
         at com.sun.mail.smtp.SMTPTransport.protocolConnect(SMTPTransport.java:652)
         at javax.mail.Service.connect(Service.java:317)
         at javax.mail.Service.connect(Service.java:176)
         at javax.mail.Service.connect(Service.java:125)
         at javax.mail.Transport.send0(Transport.java:194)
         at javax.mail.Transport.send(Transport.java:124)
    Si je comprends bien il ne trouve pas de certification valide.... pourriez vous me guider sur la compréhension et la résolution de ce problème ?

    Pour le code j'utilise :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
     
    	props.put("mail.transport.protocol","smtp");
    	props.put("defaultEncoding","text/html; charset=ISO-8859-1");
    	props.put("mail.smtp.host",domaine);
    	props.put("mail.smtp.starttls.enable","true");
    	props.put("mail.smtp.auth","true");

  2. #2
    Membre chevronné
    Homme Profil pro
    Inscrit en
    Octobre 2011
    Messages
    251
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Belgique

    Informations forums :
    Inscription : Octobre 2011
    Messages : 251
    Par défaut
    Plus exactement il ne trouve pas soit le certificat SSL en lui-même soit l'autorité de certification qui a servi à générer le certificat.
    Lors de l'établissement de la connexion SSL, la validité du certificat ainsi que l'autorité de certification ayant servi à le générer sont vérifiées.
    Si l'une des deux vérifications échoue, l'établissement de la connexion SSL échoue également.
    Le certificat SSL à utiliser est généralement paramétré en tant qu'argument de la JVM avec le paramètre -Djavax.net.ssl.keyStore et -Djavax.net.ssl.keyStorePassword.
    Les autorités de certification sont généralement stockées dans le fichiers cacerts du jdk (JAVA_HOME/jre/lib/security).
    Il est possible de passer un truststore particulier avec l'argument de VM -Djavax.net.ssl.trustStore
    Pour avoir plus d'informations sur l'établissement de la connexion SSL, tu peux positionner l'argument suivant au démarrage de la JVM: -Djavax.net.debug=all ou -Djavax.net.debug=ssl.
    Cela te donnera les informations de debug nécessaires à la résolution de ton problème (fichier keystore non paramétré, autorité de certification non trouvée, ...)

  3. #3
    Membre confirmé Avatar de Jose.N70
    Homme Profil pro
    Développeur Java
    Inscrit en
    Mars 2009
    Messages
    162
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 44
    Localisation : France, Hauts de Seine (Île de France)

    Informations professionnelles :
    Activité : Développeur Java
    Secteur : Service public

    Informations forums :
    Inscription : Mars 2009
    Messages : 162
    Par défaut
    bonjour et merci pour cette réponse.

    J'ai alors essayé, mais je reconnais avoir du mal :

    Sous linux ( des données ont été masquées par des ***** ) :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
     
    DEBUG: setDebug: JavaMail version 1.4.5
    DEBUG: setDebug: JavaMail version 1.4.5
    DEBUG: getProvider() returning javax.mail.Provider[TRANSPORT,smtp,com.sun.mail.smtp.SMTPTransport,Sun Microsystems, Inc]
    DEBUG SMTP: useEhlo true, useAuth true
    DEBUG SMTP: useEhlo true, useAuth true
    DEBUG SMTP: trying to connect to host "******", port 25, isSSL false
    220 ******.fr ESMTP Postfix (Debian/GNU)
     
    DEBUG SMTP: connected to host "******.fr", port: 25
     
    EHLO ******.fr
     
    250-******.fr
     
    250-PIPELINING
     
    250-SIZE 8192000
     
    250-VRFY
     
    250-ETRN
     
    250-STARTTLS
     
    250-ENHANCEDSTATUSCODES
     
    250-8BITMIME
     
    250 DSN
     
    DEBUG SMTP: Found extension "PIPELINING", arg ""
    DEBUG SMTP: Found extension "SIZE", arg "8192000"
    DEBUG SMTP: Found extension "VRFY", arg ""
    DEBUG SMTP: Found extension "ETRN", arg ""
    DEBUG SMTP: Found extension "STARTTLS", arg ""
    DEBUG SMTP: Found extension "ENHANCEDSTATUSCODES", arg ""
    DEBUG SMTP: Found extension "8BITMIME", arg ""
    DEBUG SMTP: Found extension "DSN", arg ""
    STARTTLS
     
    220 2.0.0 Ready to start TLS
     
    keyStore is : 
    keyStore type is : jks
    keyStore provider is : 
    init keystore
    init keymanager of type SunX509
    trustStore is: /usr/lib/jvm/java-6-sun-1.6.0.16/jre/lib/security/cacerts
    trustStore type is : jks
    trustStore provider is : 
    init truststore
    adding as trusted cert:
    Puis une liste de certificats

    Sous windows ( des données ont été masquées par des ***** ):

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
    58
    59
    60
    61
    62
    63
    64
    65
    66
    67
    68
    69
    70
    71
    72
    73
    74
    75
    76
    77
    78
    79
    80
     
    DEBUG: setDebug: JavaMail version 1.4.5
     
    DEBUG: getProvider() returning javax.mail.Provider[TRANSPORT,smtp,com.sun.mail.smtp.SMTPTransport,Sun Microsystems, Inc]
     
    DEBUG SMTP: useEhlo true, useAuth true
     
    DEBUG SMTP: useEhlo true, useAuth true
     
    DEBUG SMTP: trying to connect to host "**********.fr", port 25, isSSL false
     
    220 **********.fr ESMTP Postfix (Debian/GNU)
     
    DEBUG SMTP: connected to host "**********.fr", port: 25
     
     
     
    EHLO **********.FR
     
    250-**********.fr
     
    250-PIPELINING
     
    250-SIZE 8192000
     
    250-VRFY
     
    250-ETRN
     
    250-STARTTLS
     
    250-ENHANCEDSTATUSCODES
     
    250-8BITMIME
     
    250 DSN
     
    DEBUG SMTP: Found extension "PIPELINING", arg ""
     
    DEBUG SMTP: Found extension "SIZE", arg "8192000"
     
    DEBUG SMTP: Found extension "VRFY", arg ""
     
    DEBUG SMTP: Found extension "ETRN", arg ""
     
    DEBUG SMTP: Found extension "STARTTLS", arg ""
     
    DEBUG SMTP: Found extension "ENHANCEDSTATUSCODES", arg ""
     
    DEBUG SMTP: Found extension "8BITMIME", arg ""
     
    DEBUG SMTP: Found extension "DSN", arg ""
     
    STARTTLS
     
    220 2.0.0 Ready to start TLS
     
    javax.mail.MessagingException: Could not convert socket to TLS;
     
      nested exception is:
     
    	javax.net.ssl.SSLHandshakeException: sun.security.validator.ValidatorException: PKIX path building failed: sun.security.provider.certpath.SunCertPathBuilderException: unable to find valid certification path to requested target
     
    	at com.sun.mail.smtp.SMTPTransport.startTLS(SMTPTransport.java:1918)
     
    	at com.sun.mail.smtp.SMTPTransport.protocolConnect(SMTPTransport.java:652)
     
    	at javax.mail.Service.connect(Service.java:317)
     
    	at javax.mail.Service.connect(Service.java:176)
     
    	at javax.mail.Service.connect(Service.java:125)
     
    	at javax.mail.Transport.send0(Transport.java:194)
     
    	at javax.mail.Transport.send(Transport.java:124)
     
     
    ..............................
    Could not convert socket to TLS

  4. #4
    Membre chevronné
    Homme Profil pro
    Inscrit en
    Octobre 2011
    Messages
    251
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Belgique

    Informations forums :
    Inscription : Octobre 2011
    Messages : 251
    Par défaut
    C'est rarement simple lorsque l'on touche à la couche SSL, c'est même très souvent le merdier .
    Vu la stacktrace, il semble qu'il ne trouve par l'autorité de certification nécessaire à l'établissement de la connexion.
    Cette autorité de certification est à priori absente de la liste des certificats du truststore de la jvm (liste des certificats après la log "adding as trusted cert").
    Tu as précisé dans ton premier post que cela fonctionnait sous linux, c'est donc que l'autorité de certification est bien présente dans le trustore de ton jdk sous linux.
    Il faut que tu détermines quelle autorité de certification est présente dans le cacerts sous linux et absente du cacerts sous windows.
    Petit détail, je ne vois pas dans les logs pour la plateforme windows de trace du type "trustStore is", est-ce que les arguments de la VM sont les mêmes sous windows et linux ?

  5. #5
    Membre confirmé Avatar de Jose.N70
    Homme Profil pro
    Développeur Java
    Inscrit en
    Mars 2009
    Messages
    162
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 44
    Localisation : France, Hauts de Seine (Île de France)

    Informations professionnelles :
    Activité : Développeur Java
    Secteur : Service public

    Informations forums :
    Inscription : Mars 2009
    Messages : 162
    Par défaut
    Oui l'application est lancée de la même façon sous linux et sous windows.

  6. #6
    Membre chevronné
    Homme Profil pro
    Inscrit en
    Octobre 2011
    Messages
    251
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Belgique

    Informations forums :
    Inscription : Octobre 2011
    Messages : 251
    Par défaut
    As-tu des différences lorsque tu listes les autorités de certification dans le ficheir cacerts dans tes différents environnements?

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    $JAVA_HOME$/bin/keytool -list -keystore storepass changeit -v $JAVA_HOME$/jre/lib/security/cacerts
    Si tes installations sont identiques (même version de jdk), au pire tu peux essayer de copier le fichier cacerts de ton installation linux sous windows dans le répertoire jre/lib/security.

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. [VBA] Erreur avec fonction Dcount
    Par Virgile59 dans le forum Access
    Réponses: 6
    Dernier message: 15/06/2006, 09h56
  2. Erreur de fonction
    Par Anduriel dans le forum Général JavaScript
    Réponses: 2
    Dernier message: 29/11/2005, 20h56
  3. Erreur de fonction
    Par Anduriel dans le forum Langage
    Réponses: 15
    Dernier message: 26/11/2005, 14h49
  4. [JavaMail]Erreur avec JavaMail
    Par Ethylene dans le forum API standards et tierces
    Réponses: 9
    Dernier message: 23/08/2005, 14h22
  5. [javamail] erreur d'execution
    Par bibx dans le forum API standards et tierces
    Réponses: 11
    Dernier message: 05/12/2003, 11h04

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo