Sous Java, la procédure normale pour utiliser des certificats PKI SSL est de les importer dans le Trust Store et Key Store en utilisant l’outil keytool disponible dans le JDK. Un autre bon outil pour manipuler les keystore est Key Store Explorer (KSE)
Par contre, sous Windows, les certificats sont installés dans Windows Certificate Store. Est-il réellement nécessaire de les exporter (ce qui implique avoir accès à la clé privé), les transformer (avec OpenSSL) et de les importer dans les fichiers JKS de Java?
Bien, il s’avère que non, puisqu’il soit possible de lancer une JVM avec les paramètres suivants pour utiliser les certificats de Windows directement:
java -Djavax.net.ssl.trustStoreType=Windows-ROOT -Djavax.net.ssl.keyStoreType=Windows-MY
Ceci est rendu possible grâce au SunMSCAPI JCE Provider et cela fontionne bien pour des certificats générés à partir d’un crypto basée sur RSA.
Par contre, pour des certificats générés en utilisant la crypto moderne, bien Java 8 supporte les certificats de la nouvelle génération stockés dans les fichiers JKS, SunMSCAPI, qui n’a pas évolué, ne supporte pas CNG (CryptoAPI Next Generation).
Ainsi, avec Java 8 et des certificats moderne, de retour à la case départ…
À quand une nouvelle génération du provider SunMSCAPI (ou une alternative) permettant d’aller lire directement les certificats CNG dans le Microsoft Certificate store? Car, pour l’instant, il semble qu’il existe au moyen outre codé soi-même en JNI / JNA une interface à CNG.
Pheox JCAPI offre bien une alternative à SunMSCAPI, mais ce produit commercial n’a pas évolué avec le temps et ne supporte pas CNG.