À l'aide d'un encodé au format PEM, chiffrée de la clé privée pour signer un message en mode natif

Je suis en train d'utiliser un PEM(X. 509) certificat (stockées dans un privateKey.pem fichier sur le disque) pour signer les messages envoyés via des sockets en Java, mais j'ai beaucoup de mal à trouver un exemple qui est à proximité. Je suis normalement une C++ mec qui est juste là pour de l'aide sur ce projet, il a été un peu difficile pour moi de mettre tout cela ensemble dans le code qui fonctionne quand je suis familier avec les Api.

Malheureusement, je suis limitée à des méthodes qui sont livrés en standard avec Java (1.6.0 mise à Jour 16), de sorte que même si j'ai trouvé un exemple similaire à l'aide BouncyCastle's PEMReader, il n'a pas beaucoup aidé sur ce projet en particulier.

Mon privateKey.pem clé est la phrase de passe protégé, sous la forme de:

-----BEGIN RSA PRIVATE KEY-----
Proc-Type: 4,ENCRYPTED DEK-Info:
DES-EDE3-CBC,63A862F284B1280B
[...]
tsjQI4H8lhOBuk+NelHu7h2+uqbBQzwkPoA8IqbPXUz+B/MAGhoTGl4AKPjfm9gu
OqEorRU2vGiSaUPgDaRhdPKK0stxMxbByUi8xQ2156d/Ipk2IPLSEZDXONrB/4O5
[...]
-----END RSA PRIVATE KEY-----

Ils clé a été générée à l'aide d'OpenSSL:

openssl.exe genrsa -out private_key.pem 4096

Je suis incapable de convertir cette clé à un DER ou d'un autre format préalablement à l'exécution, toutes les conversions nécessaires devra être fait à l'interne dans le code, comme la clé doit être facilement remplaçable et le format restera PEM.

J'ai entendu un mélange de choses dont je ne suis pas absolument sûr, et a dit espérer que l'esprit collectif ici au pourrait aider à tirer les morceaux ensemble.

J'ai entendu dire que le PEM certificat doit Base64 Décodé pour le convertir en un DER certificat peut être utilisé. J'ai un Décodage en Base64 outil appelé MiGBase64 mais je ne suis pas entièrement sûr de savoir comment/quand ce décodage doit faire.

J'ai perdu dans l'API Java docs essayer de traquer le 15 différents types de Clés, des fichiers de clés, KeyGenerators, Certificats, etc qui existent, mais je ne suis pas assez familiers avec eux pour identifier correctement ai besoin d'aide, et la façon de les utiliser ensemble.

L'algorithme de base semble assez simple, c'est pourquoi il a été particulièrement frustrant que je n'ai pas été capable d'écrire une manière simple de mise en œuvre:

1) Lire le privateKey.pem à partir d'un fichier
2) Charger la Clé privée dans XXX de classe, en utilisant le mot de passe pour décrypter la clé
3) Utilisez la touche de l'objet avec la Signature de la classe de signer le message

Aider à cette tâche, en particulier un exemple de code, est grandement apprécié. J'ai eu du mal à trouver des exemples utiles de ce problème, comme la plupart des "fermer" sont des exemples de générer de nouvelles clés, à l'aide de BouncyCastle, ou tout simplement contraire à l'aide de différentes formes de touches/classes pas applicable ici.

Cela semble être un problème très simple, mais c'est me rend fou, tout vraiment de réponses simples?

OriginalL'auteur KevenK | 2009-10-16