Dans ton exemple de code ton socket je suppose que c'est la référence "conduit" de la classe HTTPConduit (une classe perso visiblement). Ce conduit provient au final d'un proxy. Là on est dans des classes non standard donc j'aurai du mal à t'aider.
Les conditions permettent de définir à partir de quelle source on va chercher le certificat d'authentification.
Soit par un magasin PKCS#12, c'est un magasin standard de stockage de certificats et de clefs privées.
Soit par un magasin PKCS#11, c'est à dire le magasin sur ta CPS.
Visiblement, l'algorithme est le suivant :
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19
|
SI paramètres SSL = null ALORS
Récupérer IP et Port du Proxy // définies dans les Properties
SI PKCS#12 paramétré dans les Properties ALORS
Récupérer le magasin
SINON
Récupérer un magasin PKCS#11
FIN SI
Configuration des paramètres SSL
Ouverture du canal HTTP
SINON // les paramètres sont déjà définis
Ouverture du canal HTTP
FIN SI |
En gros c'est l'idée.
Ceci dit il y a des utilisations bizarres.
Cette ligne par exemple :
X509Certificate[] certificatesChain = new X509Certificate[1];
Ton environnement est visiblement pré-configuré via la classe Properties dont les infos peuvent être chargées depuis un fichier texte (genre ini ou XML).
Sur un plan plus théorique, il te faut maitriser les concepts de PKI, de chaines de certifications, de certificats, etc ... Tout ce qui touche aux fonctions de sécurité. Ce n'est pas spécifique à Java, je parle de connaissances théoriques.
Sur un plan métier, je sais que la sécu dispose d'une PKI complète, avec un annuaire LDAP où les certificats sont publiés. La chaine de certification jusqu'aux certificats racines (il y a plusieurs branches) est disponible sur cet annuaire.
Ces certificats racines doivent être importés dans le magasin de la JVM qui s'appelle cacerts. C'est le magasin contenant tous les certificats racines reconnus par Java, exactement comme un navigateur web ou un système d'exploitation contiennent un magasin listant les autorités de confiance.
Lors qu'une connexion SSL est initiée, lors du handshake, le certificat proposé par le site web est vérifié (cf chaine de certification) par ton programme Java, c'est l'option 1 proposée par ton tutoriel. L'option 2 doit être ignorée, surtout pour dialoguer avec la sécu.
Ça c'est pour vérifier que le serveur est bien celui qu'il prétend être.
Ensuite il y a la notion d'authentification. C'est à dire que pour que le serveur t'autorise à te connecter à lui, il faut disposer d'un certificat émis par la PKI du serveur. Ce certificat est visiblement contenu soit sur la carte à puce, soit dans un magasin PKCS#12.
Tout ce processus est transparent pour le développeur, il faut juste configurer la connexion (ce qui est fait visiblement dans ton exemple de code mais je suis pas certain des détails j'ai pas compris tout le code) et l'API standard de Java fait le reste. Lorsqu'il y a un problème (certificat invalide, non reconnu, etc ...) tu manges une exception, sinon tu obtiens ton socket connecté.
Voilà, je sais pas trop quoi te dire de plus pour t'aiguiller. Tu as en fait pas mal de recherches à faire ^^
Partager