Gestion des certificats SSL avec Java

    J’ai eu à développer une application web en Java qui devait récupérer un fichier JSON sur une url en HTTP. Jusque là, aucun problème, j’en ai pour quelques heures…
    Je commence donc la mise en place de l’architecture (Eclipse, Maven, Tomcat, Git, …). Au bout de deux heures, mon projet compile et se déploie sans aucun problème sous Tomcat.

    Il ne me reste plus que la partie concernant le fichier JSON à développer. Donc je me lance. ET là je me rends compte que ce l’url n’est pas en HTTP mais en HTTPS. Je passe donc de la classe HTTPUrlConnection à HTTPSUrlConnection.

    Et là, lors de mes tests, j’obtiens une erreur à chaque appel de cette classe

    sun.security.validator.ValidatorException: PKIX path building failed: sun.security.provider.certpath.SunCertPathBuilderException: unable to find valid certification path to requested target
    ...
    Caused by: sun.security.provider.certpath.SunCertPathBuilderException: unable to find valid certification path to requested target
    ...

    Après quelques recherches sur Internet, je me rends compte qu’en fait, il n’arrive pas à trouver l’autorité de certification de ce certificat SSL. Donc deux solutions s’offrent à moi :

    1. Désactiver la vérification du certificat SSL en créant un TrustManager. Mais cette solution ne m’emballe pas, je préfère vérifier que le certificat SSL est bien valide.
    2. Configurer le gestionnaire de certificats en Java pour qu’il arrive à valider le certificat.C’est cette solution que je vais développer dans la suite de l’article.

    Configuration du gestionnaire de certificat SSL en Java

    En Java, il existe une commande pour gérer les certificats SSL : keytool. Elle est livrée directement avec le JDK d’Oracle.

    Pour vérifier si tout fonctionne en premier, saisissez la commande suivante :

    $> keytool -list
    Il va donc rechercher dans le dossier de l’utilisateur un fichier .keystore. S’il ne le trouve pas, il affiche donc une erreur
    Par exemple, dans mon cas, il m’affiche le message suivant :

    $> erreur keytool : java.lang.Exception: Le fichier de clés n'existe pas : /Users/julien/.keystore

    Dans ce cas là, je vais pouvoir gérer un fichier keystore pour l’utilisateur ‘julien’. Mais dans mon cas, ce n’est pa cela que je souhaite. Comme c’est une application web, il faut que le certificat soit géré au niveau du serveur d’application ou au niveau de la JVM.

    Je choisis donc la deuxième solution. Je vais donc ajouter le certificat au gestionnaire de la JVM.
    Pour cela, il faut trouver le fichier des certificats dans la JVM. Après quelques recherches, le fichier se nomme ‘cacert’ et se trouve dans le répertoire du JRE ‘$JAVA_HOME/lib/security’.

    Pour vérifier qu’il fonctionne bien, on va lancer la commande suivante :
    $> sudo keytool -list -keystore $JAVA_HOME/lib/security/cacerts

    Un mot de passe est demandé à ce moment là. Par défaut, le mot de passe est : changeit

    Entrez le mot de passe du fichier de clés :

    Type de fichier de clés : JKS
    Fournisseur de fichier de clés : SUN

    Votre fichier de clés d'accès contient 79 entrées

    digicertassuredidrootca, 16 avr. 2008, trustedCertEntry,
    Empreinte du certificat (SHA1) : 05:63:B8:63:0D:62:D7:5A:BB:C8:AB:1E:4B:DF:B5:A8:99:B2:4D:43
    trustcenterclass2caii, 29 avr. 2008, trustedCertEntry,
    Empreinte du certificat (SHA1) : AE:50:83:ED:7C:F4:5C:BC:8F:61:C6:21:FE:68:5D:79:42:21:15:6E
    thawtepremiumserverca, 11 déc. 2009, trustedCertEntry,
    Empreinte du certificat (SHA1) : E0:AB:05:94:20:72:54:93:05:60:62:02:36:70:F7:CD:2E:FC:66:66
    swisssignplatinumg2ca, 31 oct. 2008, trustedCertEntry,
    Empreinte du certificat (SHA1) : 56:E0:FA:C0:3B:8F:18:23:55:18:E5:D3:11:CA:E8:C2:43:31:AB:66
    swisssignsilverg2ca, 31 oct. 2008, trustedCertEntry,
    Empreinte du certificat (SHA1) : 9B:AA:E5:9F:56:EE:21:CB:43:5A:BE:25:93:DF:A7:F0:40:D1:1D:CB
    equifaxsecureebusinessca1, 18 juil. 2003, trustedCertEntry,
    Empreinte du certificat (SHA1) : DA:40:18:8B:91:89:A3:ED:EE:AE:DA:97:FE:2F:9D:F5:B7:D1:8A:41
    thawteserverca, 11 déc. 2009, trustedCertEntry,
    Empreinte du certificat (SHA1) : 9F:AD:91:A6:CE:6A:C6:C5:00:47:C4:4E:C9:D4:A5:0D:92:D8:49:79
    utnuserfirstclientauthemailca, 2 mai 2006, trustedCertEntry,
    Empreinte du certificat (SHA1) : B1:72:B1:A5:6D:95:F9:1F:E5:02:87:E1:4D:37:EA:6A:44:63:76:8A
    thawtepersonalfreemailca, 11 déc. 2009, trustedCertEntry,
    Empreinte du certificat (SHA1) : E6:18:83:AE:84:CA:C1:C1:CD:52:AD:E8:E9:25:2B:45:A6:4F:B7:E2
    entrustevca, 23 avr. 2010, trustedCertEntry,
    Empreinte du certificat (SHA1) : B3:1E:B1:B7:40:E3:6C:84:02:DA:DC:37:D4:4D:F5:D4:67:49:52:F9
    utnuserfirsthardwareca, 2 mai 2006, trustedCertEntry,
    Empreinte du certificat (SHA1) : 04:83:ED:33:99:AC:36:08:05:87:22:ED:BC:5E:46:00:E3:BE:F9:D7
    certumca, 23 avr. 2010, trustedCertEntry,
    Empreinte du certificat (SHA1) : 62:52:DC:40:F7:11:43:A2:2F:DE:9E:F7:34:8E:06:42:51:B1:81:18
    entrustrootcag2, 22 juin 2010, trustedCertEntry,
    Empreinte du certificat (SHA1) : 8C:F4:27:FD:79:0C:3A:D1:66:06:8D:E8:1E:57:EF:BB:93:22:72:D4
    addtrustclass1ca, 2 mai 2006, trustedCertEntry,
    Empreinte du certificat (SHA1) : CC:AB:0E:A0:4C:23:01:D6:69:7B:DD:37:9F:CD:12:EB:24:E3:94:9D
    equifaxsecureca, 18 juil. 2003, trustedCertEntry,
    Empreinte du certificat (SHA1) : D2:32:09:AD:23:D3:14:23:21:74:E4:0D:7F:9D:62:13:97:86:63:3A
    quovadisrootca3, 23 avr. 2010, trustedCertEntry,
    Empreinte du certificat (SHA1) : 1F:49:14:F7:D8:74:95:1D:DD:AE:02:C0:BE:FD:3A:2D:82:75:51:85
    quovadisrootca2, 23 avr. 2010, trustedCertEntry,
    Empreinte du certificat (SHA1) : CA:3A:FB:CF:12:40:36:4B:44:B2:16:20:88:80:48:39:19:93:7C:F7
    digicerthighassuranceevrootca, 16 avr. 2008, trustedCertEntry,
    Empreinte du certificat (SHA1) : 5F:B7:EE:06:33:E2:59:DB:AD:0C:4C:9A:E6:D3:8F:1A:61:C7:DC:25
    secomvalicertclass1ca, 2 juin 2008, trustedCertEntry,
    Empreinte du certificat (SHA1) : E5:DF:74:3C:B6:01:C4:9B:98:43:DC:AB:8C:E8:6A:81:10:9F:E4:8E
    equifaxsecureglobalebusinessca1, 18 juil. 2003, trustedCertEntry,
    Empreinte du certificat (SHA1) : 7E:78:4A:10:1C:82:65:CC:2D:E1:F1:6D:47:B4:40:CA:D9:0A:19:45
    geotrustuniversalca, 10 déc. 2009, trustedCertEntry,
    Empreinte du certificat (SHA1) : E6:21:F3:35:43:79:05:9A:4B:68:30:9D:8A:2F:74:22:15:87:EC:79
    verisignclass3ca, 11 déc. 2009, trustedCertEntry,
    Empreinte du certificat (SHA1) : A1:DB:63:93:91:6F:17:E4:18:55:09:40:04:15:C7:02:40:B0:AE:6B
    thawteprimaryrootcag3, 10 déc. 2009, trustedCertEntry,
    Empreinte du certificat (SHA1) : F1:8B:53:8D:1B:E9:03:B6:A6:F0:56:43:5B:17:15:89:CA:F3:6B:F2
    thawteprimaryrootcag2, 10 déc. 2009, trustedCertEntry,
    Empreinte du certificat (SHA1) : AA:DB:BC:22:23:8F:C4:01:A1:27:BB:38:DD:F4:1D:DB:08:9E:F0:12
    deutschetelekomrootca2, 14 nov. 2008, trustedCertEntry,
    Empreinte du certificat (SHA1) : 85:A4:08:C0:9C:19:3E:5D:51:58:7D:CD:D6:13:30:FD:8C:DE:37:BF
    utnuserfirstobjectca, 2 mai 2006, trustedCertEntry,
    Empreinte du certificat (SHA1) : E1:2D:FB:4B:41:D7:D9:C3:2B:30:51:4B:AC:1D:81:D8:38:5E:2D:46
    geotrustprimaryca, 10 déc. 2009, trustedCertEntry,
    Empreinte du certificat (SHA1) : 32:3C:11:8E:1B:F7:B8:B6:52:54:E2:E2:10:0D:D6:02:90:37:F0:96
    verisignclass1ca, 11 déc. 2009, trustedCertEntry,
    Empreinte du certificat (SHA1) : CE:6A:64:A3:09:E4:2F:BB:D9:85:1C:45:3E:64:09:EA:E8:7D:60:F1
    baltimorecodesigningca, 10 mai 2002, trustedCertEntry,
    Empreinte du certificat (SHA1) : 30:46:D8:C8:88:FF:69:30:C3:4A:FC:CD:49:27:08:7C:60:56:7B:0D
    baltimorecybertrustca, 10 mai 2002, trustedCertEntry,
    Empreinte du certificat (SHA1) : D4:DE:20:D0:5E:66:FC:53:FE:1A:50:88:2C:78:DB:28:52:CA:E4:74
    starfieldclass2ca, 20 janv. 2005, trustedCertEntry,
    Empreinte du certificat (SHA1) : AD:7E:1C:28:B0:64:EF:8F:60:03:40:20:14:C3:D0:E3:37:0E:B5:8A
    camerfirmachamberscommerceca, 31 oct. 2008, trustedCertEntry,
    Empreinte du certificat (SHA1) : 6E:3A:55:A4:19:0C:19:5C:93:84:3C:C0:DB:72:2E:31:30:61:F0:B1
    ttelesecglobalrootclass3ca, 23 avr. 2010, trustedCertEntry,
    Empreinte du certificat (SHA1) : 55:A6:72:3E:CB:F2:EC:CD:C3:23:74:70:19:9D:2A:BE:11:E3:81:D1
    verisignclass3g5ca, 10 déc. 2009, trustedCertEntry,
    Empreinte du certificat (SHA1) : 4E:B6:D5:78:49:9B:1C:CF:5F:58:1E:AD:56:BE:3D:9B:67:44:A5:E5
    ttelesecglobalrootclass2ca, 23 avr. 2010, trustedCertEntry,
    Empreinte du certificat (SHA1) : 59:0D:2D:7D:88:4F:40:2E:61:7E:A5:62:32:17:65:CF:17:D8:94:E9
    trustcenteruniversalcai, 29 avr. 2008, trustedCertEntry,
    Empreinte du certificat (SHA1) : 6B:2F:34:AD:89:58:BE:62:FD:B0:6B:5C:CE:BB:9D:D9:4F:4E:39:F3
    verisignclass3g4ca, 10 déc. 2009, trustedCertEntry,
    Empreinte du certificat (SHA1) : 22:D5:D8:DF:8F:02:31:D1:8D:F7:9D:B7:CF:8A:2D:64:C9:3F:6C:3A
    verisignclass3g3ca, 25 mars 2004, trustedCertEntry,
    Empreinte du certificat (SHA1) : 13:2D:0D:45:53:4B:69:97:CD:B2:D5:C3:39:E2:55:76:60:9B:5C:C6
    certumtrustednetworkca, 23 avr. 2010, trustedCertEntry,
    Empreinte du certificat (SHA1) : 07:E0:32:E0:20:B7:2C:3F:19:2F:06:28:A2:59:3A:19:A7:0F:06:9E
    certplusclass3pprimaryca, 23 avr. 2010, trustedCertEntry,
    Empreinte du certificat (SHA1) : 21:6B:2A:29:E6:2A:00:CE:82:01:46:D8:24:41:41:B9:25:11:B2:79
    verisignclass3g2ca, 25 mars 2004, trustedCertEntry,
    Empreinte du certificat (SHA1) : 85:37:1C:A6:E5:50:14:3D:CE:28:03:47:1B:DE:3A:09:E8:F8:77:0F
    globalsignr3ca, 23 avr. 2010, trustedCertEntry,
    Empreinte du certificat (SHA1) : D6:9B:56:11:48:F0:1C:77:C5:45:78:C1:09:26:DF:5B:85:69:76:AD
    utndatacorpsgcca, 2 mai 2006, trustedCertEntry,
    Empreinte du certificat (SHA1) : 58:11:9F:0E:12:82:87:EA:50:FD:D9:87:45:6F:4F:78:DC:FA:D6:D4
    secomscrootca2, 23 avr. 2010, trustedCertEntry,
    Empreinte du certificat (SHA1) : 5F:3B:8C:F2:F8:10:B3:7D:78:B4:CE:EC:19:19:C3:73:34:B9:C7:74
    gtecybertrustglobalca, 10 mai 2002, trustedCertEntry,
    Empreinte du certificat (SHA1) : 97:81:79:50:D8:1C:96:70:CC:34:D8:09:CF:79:44:31:36:7E:F4:74
    secomscrootca1, 2 juin 2008, trustedCertEntry,
    Empreinte du certificat (SHA1) : 36:B1:2B:49:F9:81:9E:D7:4C:9E:BC:38:0F:C6:56:8F:5D:AC:B2:F7
    verisignuniversalrootca, 10 déc. 2009, trustedCertEntry,
    Empreinte du certificat (SHA1) : 36:79:CA:35:66:87:72:30:4D:30:A5:FB:87:3B:0F:A7:7B:B7:0D:54
    trustcenterclass4caii, 29 avr. 2008, trustedCertEntry,
    Empreinte du certificat (SHA1) : A6:9A:91:FD:05:7F:13:6A:42:63:0B:B1:76:0D:2D:51:12:0C:16:50
    globalsignr2ca, 2 août 2007, trustedCertEntry,
    Empreinte du certificat (SHA1) : 75:E0:AB:B6:13:85:12:27:1C:04:F8:5F:DD:DE:38:E4:B7:24:2E:FE
    certplusclass2primaryca, 23 avr. 2010, trustedCertEntry,
    Empreinte du certificat (SHA1) : 74:20:74:41:72:9C:DD:92:EC:79:31:D8:23:10:8D:C2:81:92:E2:BB
    digicertglobalrootca, 16 avr. 2008, trustedCertEntry,
    Empreinte du certificat (SHA1) : A8:98:5D:3A:65:E5:E5:C4:B2:D7:D6:6D:40:C6:DD:2F:B1:9C:54:36
    globalsignca, 19 mars 2008, trustedCertEntry,
    Empreinte du certificat (SHA1) : B1:BC:96:8B:D4:F4:9D:62:2A:A8:9A:81:F2:15:01:52:A4:1D:82:9C
    thawteprimaryrootca, 10 déc. 2009, trustedCertEntry,
    Empreinte du certificat (SHA1) : 91:C6:D6:EE:3E:8A:C8:63:84:E5:48:C2:99:29:5C:75:6C:81:7B:81
    geotrustglobalca, 18 juil. 2003, trustedCertEntry,
    Empreinte du certificat (SHA1) : DE:28:F4:A4:FF:E5:B9:2F:A3:C5:03:D1:A3:49:A7:F9:96:2A:82:12
    soneraclass2ca, 28 mars 2006, trustedCertEntry,
    Empreinte du certificat (SHA1) : 37:F7:6D:E6:07:7C:90:C5:B1:3E:93:1A:B7:41:10:B4:F2:E4:9A:27
    verisigntsaca, 31 oct. 2008, trustedCertEntry,
    Empreinte du certificat (SHA1) : BE:36:A4:56:2F:B2:EE:05:DB:B3:D3:23:23:AD:F4:45:08:4E:D6:56
    quovadisrootca, 23 avr. 2010, trustedCertEntry,
    Empreinte du certificat (SHA1) : DE:3F:40:BD:50:93:D3:9B:6C:60:F6:DA:BC:07:62:01:00:89:76:C9
    soneraclass1ca, 28 mars 2006, trustedCertEntry,
    Empreinte du certificat (SHA1) : 07:47:22:01:99:CE:74:B9:7C:B0:3D:79:B2:64:A2:C8:55:E9:33:FF
    valicertclass2ca, 20 janv. 2005, trustedCertEntry,
    Empreinte du certificat (SHA1) : 31:7A:2A:D0:7F:2B:33:5E:F5:A1:C3:4E:4B:57:E8:B7:D8:F1:FC:A6
    comodoaaaca, 2 mai 2006, trustedCertEntry,
    Empreinte du certificat (SHA1) : D1:EB:23:A4:6D:17:D6:8F:D9:25:64:C2:F1:F1:60:17:64:D8:E3:49
    keynectisrootca, 23 avr. 2010, trustedCertEntry,
    Empreinte du certificat (SHA1) : 9C:61:5C:4D:4D:85:10:3A:53:26:C2:4D:BA:EA:E4:A2:D2:D5:CC:97
    aolrootca2, 19 mars 2008, trustedCertEntry,
    Empreinte du certificat (SHA1) : 85:B5:FF:67:9B:0C:79:96:1F:C8:6E:44:22:00:46:13:DB:17:92:84
    addtrustqualifiedca, 2 mai 2006, trustedCertEntry,
    Empreinte du certificat (SHA1) : 4D:23:78:EC:91:95:39:B5:00:7F:75:8F:03:3B:21:1E:C5:4D:8B:CF
    addtrustexternalca, 2 mai 2006, trustedCertEntry,
    Empreinte du certificat (SHA1) : 02:FA:F3:E2:91:43:54:68:60:78:57:69:4D:F5:E4:5B:68:85:18:68
    aolrootca1, 19 mars 2008, trustedCertEntry,
    Empreinte du certificat (SHA1) : 39:21:C1:15:C1:5D:0E:CA:5C:CB:5B:C4:F0:7D:21:D8:05:0B:56:6A
    verisignclass2g3ca, 25 mars 2004, trustedCertEntry,
    Empreinte du certificat (SHA1) : 61:EF:43:D7:7F:CA:D4:61:51:BC:98:E0:C3:59:12:AF:9F:EB:63:11
    verisignclass2g2ca, 25 mars 2004, trustedCertEntry,
    Empreinte du certificat (SHA1) : B3:EA:C4:47:76:C9:C8:1C:EA:F2:9D:95:B6:CC:A0:08:1B:67:EC:9D
    geotrustprimarycag3, 10 déc. 2009, trustedCertEntry,
    Empreinte du certificat (SHA1) : 03:9E:ED:B8:0B:E7:A0:3C:69:53:89:3B:20:D2:D9:32:3A:4C:2A:FD
    geotrustprimarycag2, 10 déc. 2009, trustedCertEntry,
    Empreinte du certificat (SHA1) : 8D:17:84:D5:37:F3:03:7D:EC:70:FE:57:8B:51:9A:99:E6:10:D7:B0
    swisssigngoldg2ca, 31 oct. 2008, trustedCertEntry,
    Empreinte du certificat (SHA1) : D8:C5:38:8A:B7:30:1B:1B:6E:D4:7A:E6:45:25:3A:6F:9F:1A:27:61
    entrust2048ca, 22 juin 2010, trustedCertEntry,
    Empreinte du certificat (SHA1) : 50:30:06:09:1D:97:D4:F5:AE:39:F7:CB:E7:92:7D:7D:65:2D:34:31
    camerfirmachambersignca, 31 oct. 2008, trustedCertEntry,
    Empreinte du certificat (SHA1) : 4A:BD:EE:EC:95:0D:35:9C:89:AE:C7:52:A1:2C:5B:29:F6:D6:AA:0C
    camerfirmachambersca, 31 oct. 2008, trustedCertEntry,
    Empreinte du certificat (SHA1) : 78:6A:74:AC:76:AB:14:7F:9C:6A:30:50:BA:9E:A8:7E:FE:9A:CE:3C
    entrustsslca, 9 janv. 2003, trustedCertEntry,
    Empreinte du certificat (SHA1) : 99:A6:9B:E6:1A:FE:88:6B:4D:2B:82:00:7C:B8:54:FC:31:7E:15:39
    godaddyclass2ca, 20 janv. 2005, trustedCertEntry,
    Empreinte du certificat (SHA1) : 27:96:BA:E6:3F:18:01:E2:77:26:1B:A0:D7:77:70:02:8F:20:EE:E4
    verisignclass1g3ca, 25 mars 2004, trustedCertEntry,
    Empreinte du certificat (SHA1) : 20:42:85:DC:F7:EB:76:41:95:57:8E:13:6B:D4:B7:D1:E9:8E:46:A5
    secomevrootca1, 2 juin 2008, trustedCertEntry,
    Empreinte du certificat (SHA1) : FE:B8:C4:32:DC:F9:76:9A:CE:AE:3D:D8:90:8F:FD:28:86:65:64:7D
    verisignclass1g2ca, 25 mars 2004, trustedCertEntry,
    Empreinte du certificat (SHA1) : 27:3E:E1:24:57:FD:C4:F9:0C:55:E8:2B:56:16:7F:62:F5:32:E5:47

    Le fichier contient donc par défaut un ensemble de certificats. Nous allons donc pouvoir ajouter le notre à cette liste.
    En premier, nous devons donc récupérer le certificat de notre url HTTPS.
    Pour cela, nous aovns encore deux solutions :

    1. Extraction du certificat en utilisant la commande openssl
    2. Extraction du certificat depuis votre navigateur web (Safari, Firefox, Chrome, Internet Explorer,…)

    Je vais ici développer la première solution. La deuxième est plus facile mais dépend du navigateur que l’on utilise.
    On va donc lancer la commande openssl suivante :

    $> openssl s_client -connect [URL_TO_REACH]:443 > cert.pem

    Nous obtenons donc le certificat cert.pem. Il faut en premier lieu l’ouvrir et supprimer toutes les lignes en dessus de la ligne ‘—–END CERTIFICATE—–‘.

    Une fois fini, il ne nous reste plus qu’à importer le certificat dans le fichier de la JVM. Pour cela , nous allons saisir la commande suivante :

    $> sudo keytool -import -trustcacerts -file cert.pem -alias cert -keystore $JAVA_HOME/lib/security/cacerts

    Il nous demande une nouvelle fois le mot de passe du fichier (ici ‘changeit’) et demande confirmation avant d’ajouter le certificat. Après la réponse ‘oui’, la commande confirme que le certificat a bien été ajouté.

    Pour vérifier que le certificat a bien été pris en compte dans la JVM, nous allons faire un test rapide avec un exécutable Java.
    Nous allons donc télécharger la classe Java SSLPoke

    $> java -Djavax.net.ssl.trustStore=$JAVA_HOME/lib/security/cacerts SSLPoke www.example.com 443
    Si tout se passe bien, vous devriez donc avoir comme réponse
    $> Successfully connected

    Il ne nous reste plus qu’à redémarrer notre serveur d’application web (ici Tomcat) et d’exécuter à nouveau notre Servlet.
    Il ne devrait plus y avoir d’erreur et notre code fonctionne donc correctement maintenant.

    Sur MacOS X

    Si vous utilisez MacOS X, voici quelques informations qui peuvent vous être utiles.

    • La version par défaut du JDK installé par Apple est dans le répertoire : /System/Library/Frameworks/JavaVM.framework/Versions/CurrentJDK.
      Le fichier des certificats est ensuite dans Home/lib/security/cacerts.

      Si vous installez le JDK d’Oracle, il ne s’installe pas du tout dans ce réperoire mais dans /Library/Java/JavaVirtualMachines/.

      Pour connaitre le chemin vers le JDK installé, lancez la commande suivante :


      $> /usr/libexec/java_home -v 1.7
      $> /Library/Java/JavaVirtualMachines/jdk1.7.0_45.jdk/Contents/Home

    • Si vous avez installé le JDK d’Oracle, vous pouvez rencontrer des problèmes de ce genre :

      java.security.InvalidAlgorithmParameterException: the trustAnchors parameter must be non-empty

      Ce problème peut survenir si vous installez / réinstaller le JDK d’Apple ou ce lui d’Oracle, ou à la suite d’une mise à jour système (par exemple Mountain Lion –> Mavericks).
      Il faut donc copier le cacerts du JDK 1.7 dans le répertoire de celui d’apple. Pour cela, nous allons faire un lien symbolique

      Si le répertoire /System/Library/Java/Support/CoreDeploy.bundle/Contents/Home/lib/security n’existe pas, il faut le créer
      $> mkdir -p /System/Library/Java/Support/CoreDeploy.bundle/Contents/Home/lib/security

      Ensuite, on cré le lien symbolique
      $> cp $(/usr/libexec/java_home -v 1.7)/jre/lib/security/cacerts /System/Library/Java/Support/CoreDeploy.bundle/Contents/Home/lib/security/cacerts

      Et ensuite tout devrait refonctionner parfaitement.

    A propos Julien Redondo

    Directeur technique chez Nouveaux Territoires
    Lien pour marque-pages : Permaliens.

    4 Commentaires

    1. Bonjour s’il vous plaît j’ai besoin de votre aide pour développer une application qui permet à des utilisateurs à demander et recevoir un certificat de la part de CA

    Laisser un commentaire