Un magasin de clés Java peut-il importer une paire de clés générée par OpenSSL?

Je génère une clé de certification avec openssl. Voici ma commande:

Openssl genrsa-des3-out enc_key.pem 1024

J'exporte dans le fichier cer, puis avec java keytool j'importe dans java keystore (JKS).

Le keystore sonne bien. Je peux charger le keystore à partir de mon application java.

Le problème est lorsque le client se connecte au serveur (dans ce cas est un serveur FTP, pas un serveur web, et j'utilise apache mina), l'exception s'est produite:

Javax. net.ssl.SSLHandshakeException: la liaison SSL a échoué. au org.Apache.Mina.filtrer.SSL.SslFilter.messageReceived (SslFilter.java: 433) au org.Apache.Mina.core.filterchain.DefaultIoFilterChain.callNextMessageReceived(DefaultIoFilterChain.java: 434) au org.Apache.Mina.core.filterchain.DefaultIoFilterChain.accès $ 5(DefaultIoFilterChain.java: 429)

...

Causé par: javax. net. ssl. SSLHandshakeException: aucune suite de chiffrement en commun à com. sun. net.ssl.internal.ssl.Handshaker. checkThrown(Source inconnue) à com. sun. net. ssl.internal.ssl.SSLEngineImpl. checkTaskThrown(Source inconnue) à com. sun. net. ssl.internal.ssl.SSLEngineImpl. writeAppRecord(Source inconnue) à com. sun. net. ssl.internal.ssl.SSLEngineImpl. wrap (Source inconnue) à javax. net. ssl. SSLEngine. wrap(Source inconnue)

...

Causé par: javax. net. ssl. SSLHandshakeException: aucune suite de chiffrement en commun à com.sun.net.ssl.internal.ssl.Alerts.getSSLException(Source inconnue) à com. sun. net. ssl.internal.ssl.SSLEngineImpl. fatal(Source inconnue)

Il y a quelques choses que je veux demander:

  1. Quel est le chiffrement de certification que je génère avec openssl? Comment pouvons-nous savoir? peut-être par la ligne de commande openssl xxx?
  2. je vais à http://java.sun.com/j2se/1.5.0/docs/guide/security/jsse/JSSERefGuide.html#AppA . et je mets SSL_RSA_xxx au chiffrement activé suites, mais ne peut toujours pas fonctionner (je mets SSL_RSA parce que le SSL utilise SSL implisit, et genrsa, juste mon opinion genrsa est générer RSA). Est-il correct?
  3. Quelqu'un connaît la solution?
  4. ou, n'importe qui sait comment générer le keystore standard à partir de la ligne de commande openssl jusqu'à ce qu'il puisse être utilisé dans l'application java (bien sûr avec le chiffrement). Parce que maintenant je peux générer la certification à partir d'openssl et exporter keystore java, mais je ne sais pas quel est le chiffre que j'ai utilisé et comment je utiliser dans l'application java. Note: je peux exécuter si le keystore est généré directement à partir de java. En ce moment, le problème est si le keystore généré par java keytool à partir de la certification comme openssl (et d'autres peut-être).

Toute aide sera appréciée! Merci

21
demandé sur erickson 2010-04-21 22:24:19

1 réponses

Pourquoi utilisez-vous OpenSSL pour générer la paire de clés? Pourquoi ne pas simplement utiliser keytool?

L'Outil genrsa génère simplement une clé privée. Comment créez-vous un certificat correspondant? Comment importez-vous la clé privée dans votre magasin de clés Java? (Je demande, parce que keytool ne peut importer une clé privée qu'à partir d'un magasin de clés existant, et seulement à partir de Java 6.)

Je soupçonne que votre problème est que votre magasin de clés ne contient pas d'entrée de clé (clé privée et correspondant certificat). Lorsque vous listez le contenu du magasin de clés avec keytool, combien d'entrées y a-t-il? Sont-ils des entrées clés ou des entrées de confiance?


Le serveur a besoin d'accéder à la clé privée pour s'authentifier. Pour importer une clé privée, utilisez Java 6 améliorée keytool.

Après avoir créé la clé et le certificat avec OpenSSL, utilisez OpenSSL pour créer un magasin de clés PKCS #12:

openssl pkcs12 -export -in cert.pem -inkey key.pem > server.p12

Convertissez ensuite ce magasin en un magasin de clés Java:

keytool -importkeystore -srckeystore server.p12 -destkeystore server.jks -srcstoretype pkcs12

Maintenant utiliser server.jks dans votre serveur SSL-enable, qui contient le certificat et la clé privée.

47
répondu erickson 2010-05-04 19:03:58