D'abord, vous devez installer le support PKCS # 11. C'est un code natif qui vient probablement avec votre lecteur de carte qui fournit un fichier .dll (ou .so) qui fournit une interface PKCS # 11. D'autres logiciels sur le système, comme les produits Mozilla et le fournisseur PKCS # 11 de Sun, utilisent cette bibliothèque. (Les produits Microsoft utilisent souvent une interface différente, "CAPI".)
Ensuite, en suivant les instructions du PKCS #11 Reference Guide,, configurez un fournisseur SunPKCS11
. Les seules propriétés que j'ai dû fournir dans ma configuration sont l'emplacement de la «bibliothèque» native installée et le suffixe «name» pour ce fournisseur. La propriété "name" est ajoutée à "SunPKCS11-", donc si vous spécifiez "CAC" pour le nom, vous pouvez rechercher le Provider
plus tard avec Security.getProvider("SunPKCS11-CAC")
.
Ensuite, vous pouvez utiliser les propriétés standard du système JSSE javax.net.ssl.keyStore
(avec une valeur de "NONE"
) et javax.net.ssl.keyStoreType
(avec une valeur de "PKCS11"
) pour donner l'accès JSSE au matériel clé du CAC. Vous n'avez pas besoin de définir la propriété de mot de passe, car le code natif doit inviter l'utilisateur à entrer son code PIN si nécessaire. L'inconvénient est que seul le certificat de "l'entité finale" de l'utilisateur est disponible à partir du CAC. Pour créer une chaîne sécurisée, la plupart des serveurs attendent du client qu'il envoie des certificats intermédiaires. Travailler autour de cela est possible, mais compliqué, car il implique la mise en œuvre de votre propre javax.net.ssl.X509KeyManager
. Si le serveur avec lequel vous travaillez nécessite une chaîne complète, postez une question complémentaire.
jetez un oeil à http://stackoverflow.com/questions/544056/common-access-card-cac-authentication-using-java cela pourrait vous donner quelques indications. –