Je dois utiliser PKCS # 11 avec Java 7 sur Windows 64 bits pour lire les certificats à partir de cartes à puce. La documentation oracle indique qu'il n'y a pas de PKCS Sun # 11 fournisseur pour Windows 64 bits. Si je comprends bien, cela signifie que même si j'ai une bibliothèque native PKCS # 11, je n'ai pas les classes Java "bridge" pour interagir avec l'implémentation native PKCS # 11. Quelles sont mes options? Je peux penser à ceux-ci:

  • Utilisez un programme externe, par ex. un utilitaire de ligne de commande pour interagir avec la carte à puce et diriger la sortie dans mon application Java
  • Implémenter d'une manière ou d'une autre le fournisseur PKCS # 11 manquant en Java? (Je veux éviter le travail)
  • Utiliser une bibliothèque Java tierce qui implémente le fournisseur Sun manquant?

Après de nombreuses recherches, je n'ai pas trouvé de solution. Le plus proche était une implémentation d'OpenJDK, mais je ne peux pas passer d'Oracle JDK à OpenJDK.

Est-ce que je manque quelque chose? Pourquoi n'y a-t-il pas de solutions évidentes? Quelles sont mes options?

Merci beaucoup.

1
Atuos 4 janv. 2016 à 17:31

2 réponses

Meilleure réponse

La raison pour laquelle il n'y a pas d'options dans Java 7 lui-même est que vous utilisez un produit en fin de vie. Vous devriez vraiment passer à Java 8.

Cela dit, le fournisseur Sun / Oracle PKCS # 11 repose sur un wrapper PKCS # 11 de IAIK. Puisqu'il existe une version 64 bits du fournisseur pour Java 8, cela signifie probablement qu'il est également possible de le compiler pour Java 7.

Cependant, même si vous faites fonctionner le wrapper, cela ne signifie pas nécessairement que le fournisseur Java 7 fonctionne avec lui. Les fournisseurs Java 7 doivent également être signés, vous risqueriez donc de rencontrer des problèmes même si vous pouviez obliger le fournisseur à travailler avec le fournisseur Java 7 PKCS # 11. Vous pouvez cependant utiliser directement la fonctionnalité PKCS # 11. Bien sûr, vous perdriez les avantages du fournisseur, principalement l'interopérabilité avec les API de niveau supérieur pour TLS, XML-digsig, etc.

Bien sûr, IAIK vend également son propre fournisseur, qui a fait l'objet d'une évaluation de sécurité, etc. Une partie de la documentation se lit comme suit:

Remarque: si vous disposez d'un module PKCS # 11 64 bits de votre matériel de chiffrement, vous devez également utiliser la version 64 bits de la bibliothèque native Wrapper, et vous devez également utiliser une machine virtuelle Java ™ 64 bits (par exemple, java -d64 ...).

1
Maarten Bodewes 8 janv. 2016 à 01:31

Toutes les options sont possibles.

Le programme externe nécessite que vous écriviez le code natif de chaque plateforme.

L'implémentation d'un fournisseur manquant peut être possible, surtout s'il en existe un dans OpenJDK et que vous pouvez l'emprunter à partir de là (si la licence le permet).

En ce qui concerne les bibliothèques tierces, je ne connais que notre propre SecureBlackbox qui implémente toute la sécurité en interne et fonctionne avec les périphériques PKCS # 11 via JNI.

0
Eugene Mayevski 'Callback 4 janv. 2016 à 22:06