Alerte fatale: bad_certificate

J'essaye de configurer une connexion SSL connexion (et je suis effectuez la procédure suivante sur le client)

  1. - Je générer un Certificte Demande de Signature pour obtenir un signé le certificat du client
  2. Maintenant, j'ai une clé privée (utilisé lors de la RSE), a signé le certificat du client et le certificat racine (obtenu hors bande).
  3. - Je ajouter de la clé privée et signé le certificat du client pour un cert de la chaîne et l'ajouter au gestionnaire de clés. et la racine cert pour la confiance manager.
    Mais j'ai mal d'erreur de certificat.

Je suis assez sûr que je suis en utilisant le droit certs. Dois-je ajouter de la signature du client cert à la fiducie, le gestionnaire? Essayé, pas de chance encore.

//I add the private key and the client cert to KeyStore ks
FileInputStream certificateStream = new FileInputStream(clientCertFile);
CertificateFactory certificateFactory = CertificateFactory.getInstance("X.509");
java.security.cert.Certificate[] chain = {};
chain = certificateFactory.generateCertificates(certificateStream).toArray(chain);
certificateStream.close();
String privateKeyEntryPassword = "123";
ks.setEntry("abc", new KeyStore.PrivateKeyEntry(privateKey, chain),
        new KeyStore.PasswordProtection(privateKeyEntryPassword.toCharArray()));

//Add the root certificate to keystore jks
FileInputStream is = new FileInputStream(new File(filename));
CertificateFactory cf = CertificateFactory.getInstance("X.509");
java.security.cert.X509Certificate cert = (X509Certificate) cf.generateCertificate(is);
System.out.println("Certificate Information: ");
System.out.println(cert.getSubjectDN().toString());
jks.setCertificateEntry(cert.getSubjectDN().toString(), cert);

//Initialize the keymanager and trustmanager and add them to the SSL context
KeyManagerFactory kmf = KeyManagerFactory.getInstance("SunX509");
kmf.init(ks, "123".toCharArray());
TrustManagerFactory tmf = TrustManagerFactory.getInstance("SunX509");
tmf.init(jks);

Est-il une sorte de chaîne de certificat que j'ai besoin de créer ici?
J'ai eu un p12 avec ces composants et à l'utilisation d'assez semblable code, l'ajout de la clé privée à l'keymanager et la racine cert de p12 pour la fiducie, le gestionnaire j'ai pu le faire fonctionner. Mais maintenant j'ai besoin pour le faire fonctionner sans le p12.

EDIT: trace de la Pile a été demandé. Espérons que cela devrait suffire. (NOTE: j'ai masqué les noms de fichiers)

Caused by: javax.net.ssl.SSLHandshakeException: Received fatal alert: bad_certificate
at com.sun.net.ssl.internal.ssl.Alerts.getSSLException(Alerts.java:174)
at com.sun.net.ssl.internal.ssl.Alerts.getSSLException(Alerts.java:136)
at com.sun.net.ssl.internal.ssl.SSLSocketImpl.recvAlert(SSLSocketImpl.java:1720)
at com.sun.net.ssl.internal.ssl.SSLSocketImpl.readRecord(SSLSocketImpl.java:954)
at com.sun.net.ssl.internal.ssl.SSLSocketImpl.performInitialHandshake(SSLSocketImpl.java:1138)
at com.sun.net.ssl.internal.ssl.SSLSocketImpl.startHandshake(SSLSocketImpl.java:1165)
at com.sun.net.ssl.internal.ssl.SSLSocketImpl.startHandshake(SSLSocketImpl.java:1149)
at client.abc2.openSocketConnection(abc2.java:33)
at client.abc1.runClient(abc1.java:63)
at screens.app.abc.validateLogin(abc.java:197)
... 32 more

source d'informationauteur highflyer