2009-11-18 14 views
8

Le fournisseur de sécurité JCE PKCS11 de Sun ne dispose pas des fonctionnalités dont nous avons besoin.
J'ai donc écrit une version améliorée en utilisant les sources originales.Comment signer un fournisseur de sécurité JCE personnalisé

Malheureusement, l'infrastructure JCE rejette le nouveau fournisseur
« entreprise criminelle commune ne peut pas authentifier le fournisseur »
parce qu'il est pas correctement signé.

javax.crypto.JceSecurity.verifyProviderJar(...) jette.
(il appelle javax.crypto.JarVerifier.verify())

Toute suggestion comment signer le nouveau fournisseur pour le faire travailler avec JCE?

+3

Pour votre information: nous avons demandé un certificat de Sun et l'avons obtenu dans 3 jours ouvrables, sans tracas. Le certificat peut être utilisé pour signer autant de versions dont nous avons besoin. Comme cette procédure peut dépendre de votre emplacement, il peut être utile de mentionner que nous opérons depuis la Suisse, l'Europe. – 3dGrabber

Répondre

7

Le processus est décrit dans le document, "How to Implement a Provider."

Il consiste à envoyer Sun Oracle quelques informations (y compris la responsabilité sociale que vous avez généré votre clé de signature), puis faxer un document de confirmation. Obtenir votre certificat signé peut prendre une semaine ou plus, alors planifiez à l'avance.

Vous avez seulement besoin de signer votre fournisseur s'il fournit des services qui sont limités par certains gouvernements (répressifs). Par exemple, une implémentation Cipher est un "service" restreint, alors que MessageDigest est un service non restreint. Je suppose qu'avec le message que vous recevez, vous essayez de fournir des services restreints.

Si vous fournissez l'un de ces services, est impossible: Vous avez besoin d'un certificat de signature de code émis par Sun. (Un d'IBM pourrait aussi fonctionner, si je me souviens bien, leur AC de signature de code est supportée, mais je ne sais rien de leur processus d'émission.)

2

Vous devez signer le JAR avec "JCE Code Signing CA". ". Dans toutes les distributions Java actuelles, seules deux CA (Sun et IBM) sont intégrées (codées en dur) et il est impossible d'ajouter les vôtres. Nous avons essayé de travailler avec Sun pour signer notre fournisseur et c'est presque impossible. Ils ne délivreraient pas de certificat de CA intermédiaire, ce qui signifie que vous devez résoudre les problèmes chaque fois que vous effectuez un changement. Pourquoi ne pas simplement utiliser votre propre bibliothèque?

Vous utilisez l'API standard pour l'interopérabilité entre différents JCE. Mais ce n'est pas réaliste pour les choses de CryptoKi/SmartCard en ce moment, vous avez presque toujours besoin d'écrire du code personnalisé pour interagir avec l'API spécifique au fournisseur. Vous pouvez même faire en sorte que votre code imite l'API JCE pour minimiser les changements de code.

+0

J'ai reçu deux certificats de Sun, sans aucun problème. Ils ont été très utiles et réactifs. – erickson

+1

Voulez-vous dire que vous obtenez "certificat de signature de code JCE" de Sun? Ils utilisent une racine CA spéciale pour JCE "JCE Code Signing CA". Le code de signature de code régulier ne fonctionne donc pas. –

+0

Oui, je veux dire le certificat que vous devez signer un fournisseur JCE. – erickson

3

Une alternative est de concevoir votre fournisseur personnalisé en utilisant OpenJDK. C'est le projet open-source sponsorisé par Sun/Oracle, et fournit la base de code pour leur sortie officielle. OpenJDK ne nécessite pas de signature des fournisseurs. OpenJDK est disponible (par défaut, maintenant) sur plusieurs distributions Linux. Malheureusement, il ne semble pas être facilement disponible sur Windows ou Macintosh. Si vous utilisez Windows ou Macintosh, je recommande d'installer Linux sur une machine virtuelle. Cependant, si vous devez développer sur Windows ou Mac, vous pouvez copier le fichier jce.jar d'une installation OpenJDK sur jce.jar (dans votre répertoire lib Java) d'une installation officielle. Cela contournera efficacement le processus d'authentification Jar. Assurez-vous de remettre le fichier jce.jar d'origine lorsque vous avez fini de le développer.

0

Uniquement pour info, j'ai eu cette même exception quand je construis un fichier JAR (Eclipse Juno) avec l'option « Les bibliothèques Extrait nécessaire dans JAR généré » au lieu CORRECTEMENT « Package Les bibliothèques nécessaires dans JAR généré »