12
votes

Comment signer un fournisseur de sécurité personnalisé JCE

Le fournisseur de sécurité PKCS11 du PKCS11 de Sun manque de fonctionnalité dont nous avons besoin.
Donc, j'ai écrit une version améliorée de celui-ci en utilisant les sources d'origine.

Malheureusement, l'infrastructure JCE rejette le nouveau fournisseur
"JCE ne peut pas authentifier le fournisseur"
parce qu'il n'est pas correctement signé.

javax.crypto.jcesecurity.verifyProviderjar (...) lancers.
(Ça appelle javax.crypto.jarverifier.verify () )

Toute suggestion Comment signer le nouveau fournisseur pour le faire Travailler avec JCE?


1 commentaires

FYI: Nous avons demandé un certificat au soleil et l'ai eu 3 jours ouvrables, pas de tracas. Le certificat peut être utilisé pour signer autant de versions dont nous avons besoin. Comme cette procédure dépend de votre emplacement, il peut être intéressant de mentionner que nous opérons en Suisse, en Europe.


5 Réponses :


9
votes

Le processus est décrit dans le document, " Comment mettre en place un fournisseur. "

Cela implique un e-mail Soleil Oracle des informations (y compris la CSR que vous avez générée pour votre clé de signature), puis faxer un document de confirmation. Obtenir votre certificat signé peut prendre une semaine ou plus, alors planifiez à l'avance.

Il vous suffit de signer votre fournisseur s'il fournit des services restreints par certains gouvernements (répresssifs). Par exemple, un implémentation de Cipher est un "service" restreint, tandis que MessageDigest est un service sans restriction. Je suppose avec le message que vous obtenez, que vous essayez de fournir un service restreint.

Si vous fournissez l'un de ces services, Il n'y a aucun moyen de cela: Vous avez besoin d'un certificat de signature de code délivré par Sun. (L'un d'IBM pourrait aussi fonctionner; si je me souviens bien, leur CA signé par code est soutenue, mais je ne sais rien de leur processus d'émission.)


0 commentaires

1
votes

Vous devez signer le pot avec "code JCE Signature de ca". Dans toutes les distributions Java actuelles, seuls 2 CAS (Sun et IBM) sont intégrées (codées dur) et il n'ya aucun moyen d'ajouter la vôtre. Nous avons essayé de travailler avec Sun pour signer notre fournisseur et c'est presque impossible. Ils n'émettraient pas de certificats intermédiaires CA, ce qui signifie que vous devez passer à travers le problème à chaque fois que vous faites un changement.

Pourquoi ne vous utilisez pas votre propre bibliothèque? Vous utilisez une API standard pour l'interopérabilité entre différentes Jces. Mais ce n'est pas réaliste pour Cryptoki / SmartCard Stuff En ce moment, il est presque toujours nécessaire d'écrire un code personnalisé pour interagir avec l'API spécifique du fournisseur. Vous pouvez même faire votre code Mimic JCE API pour minimiser les changements de code.


6 commentaires

J'ai eu deux certificats du soleil, sans problème. Ils étaient très utiles et réactifs.


Voulez-vous dire que vous obtenez un «certificat de signature du code JCE» du soleil? Ils utilisent une racine de CA spéciale pour JCE "Code JCE Signing CA". Donc, la signature de code régulier ne fonctionne pas.


Oui, je veux dire le cert que vous devez signer un fournisseur JCE.


Oh, je suppose que notre définition de problèmes est différente :) obtenir un code de signature de code régulier est assez facile. Ce n'est pas un problème. Cependant, Sun nous a exigé de demander une licence d'exportation pour utiliser une cryptographie forte du département du commerce pour émettre un certificat de signature JCE. C'est beaucoup trop de problèmes pour nous.


C'est bizarre. Nous n'avions pas à faire cela à chaque fois (nous sommes aux États-Unis). La signature est tenue d'empêcher importer d'un fournisseur dans des pays répressifs, de ne pas contrôler l'exportation des États-Unis.


@Zzcoder, les mains du soleil sont liées à la suite de restrictions Gouvt. Ce n'est pas comme si ils vous donnent un temps difficile.



4
votes

Une alternative consiste à concevoir votre fournisseur personnalisé à l'aide de OpenJDK. Il s'agit du projet open-source parrainé par Sun / Oracle et fournit la base de code pour sa libération officielle. OpenJDK n'exige pas que les fournisseurs soient signés. 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 exécutez Windows ou Macintosh, je vous recommande d'installer Linux dans un VM.

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 annuaire Java Lib) 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 terminé de développer, cependant.


1 commentaires

OpenJDK pour Windows est disponible .



2
votes

uniquement pour des informations supplémentaires, j'ai eu la même exception lorsque je construis un pot (Eclipse Juno) avec l'option "Extrait de bibliothèques requises dans le pot généré" à la place des «bibliothèques requises obligatoires vers le bocal générées»


0 commentaires

0
votes

Eh bien, après avoir lu sur la poignée de main avec une certaine autorité Oracle, ma solution écrit une classe de chiffrement indépendante avec propre la vérification de la signature, qui en cas d'autres fournisseurs que "moi" des délégués à javax.crypto.cipher .

Cela semble être obligatoire car il n'y a presque pas d'algorithme disponible sur toutes les versions Java, les limites de la force des algorithmes ne sont pas satisfaisantes et essentiellement, Oracle n'a pas besoin de savoir sur mes algorithmes de cryptage.


0 commentaires