2009-04-15 5 views
8

Je dois écrire un programme Java pour me connecter à un serveur HTTPS (site Web du DoD). Le site Web nécessite l'authentification CAC (DoD Common Access Card). Si vous accédez à ce site via un navigateur, vous devez d'abord insérer votre CAC, puis entrer un code PIN.Comment se connecter au serveur HTTPS à l'aide de la carte d'accès commune

J'ai besoin d'accomplir le processus d'authentification par programmation en java (sorte d'agir comme navigateur). Comment puis-je récupérer les informations du CAC? J'ai été googler autour et lu le guide de référence de Java PKCS # 11. On dirait que le fournisseur Sun PKCS # 11 peut le faire, mais vous avez besoin de l'implémentation du jeton natif PKCS # 11.

Ai-je raison? Est-ce que quelqu'un a déjà fait ça? Toute suggestion ou commentaire sera grandement apprécié.

+0

jetez un oeil à http://stackoverflow.com/questions/544056/common-access-card-cac-authentication-using-java cela pourrait vous donner quelques indications. –

Répondre

3

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.

Questions connexes