Je génère une clé de certification avec openssl. Voici ma commande:
openssl genrsa -des3 -out enc_key.pem 1024
J'exporte dans un fichier cer, puis avec Java keytool que j'importe dans Java keystore (jks).
Le keystore sonne bien. Je peux charger le keystore à partir de mon Java app.
Le problème est lorsque le client se connecte au serveur (dans ce cas, il s'agit d'un serveur FTP, pas d'un serveur Web, et j'utilise Apache mina), l'exception s'est produite:
javax.net.ssl.SSLHandshakeException: la négociation SSL a échoué. à org.Apache.mina.filter.ssl.SslFilter.messageReceived (SslFilter.Java:433) à org.Apache.mina.core.filterchain.DefaultIoFilterChain.callNextMessageReceived (DefaultIoFilterChain.Java:434) à org.Aorepache. .filterchain.DefaultIoFilterChain.access $ 5 (DefaultIoFilterChain.Java:429)
...
Provoqué par: javax.net.ssl.SSLHandshakeException: aucune suite de chiffrement en commun sur com.Sun.net.ssl.internal.ssl.Handshaker.checkThrown (source inconnue) sur com.Sun.net.ssl.internal.ssl.SSLEngineImpl .checkTaskThrown (source inconnue) sur com.Sun.net.ssl.internal.ssl.SSLEngineImpl.writeAppRecord (source inconnue) sur com.Sun.net.ssl.internal.ssl.SSLEngineImpl.wrap (source inconnue) sur javax.net .ssl.SSLEngine.wrap (source inconnue)
...
Provoqué par: javax.net.ssl.SSLHandshakeException: aucune suite de chiffrement en commun sur com.Sun.net.ssl.internal.ssl.Alerts.getSSLException (source inconnue) sur com.Sun.net.ssl.internal.ssl.SSLEngineImpl .fatal (source inconnue)
Il y a quelques choses que je veux demander:
Toute aide serait appréciée! Merci
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 keystore? (Je demande, car keytool
ne peut importer une clé privée qu'à partir d'un magasin de clés existant, et uniquement à partir de Java 6 et plus.)
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 certificat correspondant). Lorsque vous listez le contenu du keystore avec keytool
, combien d'entrées y a-t-il? S'agit-il d'entrées clés ou d'entrées fiables?
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é 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
Puis convertissez ce magasin en un magasin de clés Java key store:
keytool -importkeystore -srckeystore server.p12 -destkeystore server.jks -srcstoretype pkcs12
Maintenant, utilisez server.jks
sur votre serveur SSL, qui contient le certificat et la clé privée.