Question

Je suis en train d'écrire une applet qui signerait e-mail avec S / MIME.

Il est évident que je veux faire un petit pot avec seulement les choses nécessaires. Il est évident que la façon Java de faire cela implique d'avoir un énorme pot sacré signé Bouncy Castle JCE autour.

La question est: Quelle est la meilleure façon d'obtenir S / MIME sans toucher et l'avoir JCE se plaignent de « Authentification » « fournisseurs »? Peut-être il y a une implémentation S / MIME qui ne dépend pas de l'entreprise criminelle commune? Peut-être qu'il est possible d'utiliser Bouncy Castle S / MIME en utilisant leur API léger sans toucher JCE? Peut-être il y a une autre façon?

Il est évident pour moi que rien ne peut empêcher un algorithme de chiffrement ouvert pure java source de travail indépendamment du fait que Sun approuve, il est donc pas une question de possibilité théorique, plutôt: dans quel sens est le moins douloureux

?

Bien sûr, je peux toujours aller laid tôt en saisissant Bouncy Castle mise en œuvre de l'entreprise criminelle commune pure java, renommant ses paquets à java.security1, et de faire des changements que je veux -. Mais cette façon semble trop pénible en ce moment

UPDATE Mon problème actuel avec l'aide Bouncy Castle directement. Je tente de charger les clés de keystore, qui implique l'utilisation SecretKeyFactory, qui à son tour rejette mon château Bouncy construire

Était-ce utile?

La solution 2

Il est assez simple de signer des messages sans utiliser JCE. Le vrai problème est en train de lire PKCS # 12 touches.

Je l'ai fait:  * Classe Copié JDKPKCS12KeyStore plus.  * Partout en elle, remplacé Security.getInstance () avec bcProvider.getService (). NewInstance () (qui retourne Spi-s)  * Dans les Spi-s (dans les sources Colombie-Britannique) a fait des méthodes requises publiques au lieu de protéger.

Il ressemble à un hack, mais semble fonctionner réellement.

Autres conseils

BC S / MIME est écrit sur le paquet CMS, la question de modifier vraiment échoit le paquet CMS donc tous les Crypto est fait en utilisant les classes légers.

Quelque chose de semblable a déjà été fait, plus ou moins avec succès, pour la version .NET du Bouncy Castle. Nous essayons (il est vrai qu'il est un processus lent) pour factoriser la version Java si les choses CMS peut fonctionner soit avec ou léger JCE. Le même problème affecte d'autres parties de l'API de la Colombie-Britannique aussi par exemple le PKCS # 12 keystore est construit dans le fournisseur JCE, le paquet OpenPGP est écrit à l'entreprise criminelle commune, etc. Les ports .NET de ces récrit les à l'API léger aussi.

Votre problème est probablement plus simple que le cas général cependant. On peut supposer que vous avez seulement besoin CMSSignedDataGenerator et les classes de soutien. Vous avez probablement ne pas besoin de toutes les variations myriade de addSigner ou générer. Si vous décidez simplement sur vos algorithmes digest / signature à l'avant, puis tous les trucs du fournisseur sera facile à remplacer par des appels à des implémentations hardcoded légers spécifiques.

Au lieu d'un keystore, vous pourriez peut-être sortir avec juste stocker une seule clé privée dans un fichier PKCS # 8 (PEM codé peut-être). De même pour le certificat.

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top