SSL HandShake exception
- Je utiliser une connexion SSL pour se connecter web du serveur vers le client. Il fonctionne sans problème pendant une longue période. Mais depuis hier, il donne le message d'erreur suivant peut quelqu'un me dire la raison.
javax.net.ssl.SSLException: Connection has been shutdown: javax.net.ssl.SSLHandshakeException: Received fatal alert: certificate_unknown
at com.sun.net.ssl.internal.ssl.SSLSocketImpl.checkEOF(SSLSocketImpl.java:1172)
at com.sun.net.ssl.internal.ssl.AppInputStream.read(AppInputStream.java:65)
at net.schubart.fixme.internal.MessageInput.readExactly(MessageInput.java:166)
at net.schubart.fixme.internal.MessageInput.readMessage(MessageInput.java:78)
at cc.aot.itsWeb.ClientWriterThread.run(ClientWriterThread.java:241)
at java.lang.Thread.run(Thread.java:619)
clientWriter.ready
Caused by: javax.net.ssl.SSLHandshakeException: Received fatal alert: certificate_unknown
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:1586)
at com.sun.net.ssl.internal.ssl.SSLSocketImpl.readRecord(SSLSocketImpl.java:865)
at com.sun.net.ssl.internal.ssl.SSLSocketImpl.performInitialHandshake(SSLSocketImpl.java:1029)
at com.sun.net.ssl.internal.ssl.SSLSocketImpl.writeRecord(SSLSocketImpl.java:621)
at com.sun.net.ssl.internal.ssl.AppOutputStream.write(AppOutputStream.java:59)
at java.io.OutputStream.write(OutputStream.java:58)
at net.schubart.fixme.internal.Message.write(Message.java:267)
at net.schubart.fixme.internal.MessageOutput.writeMessage(MessageOutput.java:53)
Avez-vous des logs du serveur? Est-il "d'une manière SSL" (sans certificat d'utilisateur) ou ne vous authentifier votre client? Pouvez-vous vous connecter à ce serveur à l'aide du navigateur web? Est certificat de serveur valide?
OriginalL'auteur ganuke | 2010-09-23
Vous devez vous connecter pour publier un commentaire.
J'ai passé plus de 12 heures sur cette question. Après la création d'un certificat auto-signé, il est requis pour l'exportation de ce certificat à la
cacert
fichier. Dans mon cas, il était situé dans/usr/lib/java/jre/lib/security/cacert
. Vous pouvez exporter le certificat en utilisant lekeytool
(vous avez probablement avoir un accès root):OriginalL'auteur user3430832
Le problème que vous rencontrez est avec les certificats. Voici une liste de choses que vous pourriez avoir besoin d'être familier avec avant de travailler avec un protocole sécurisé SSL programme. Il doit y avoir un truststore, magasin de clés et les certificats doivent être ajoutés. Pour ajouter la clé de votre fichier cacerts, comme dans l'étape 6, l'ordinateur peut vous demander un mot de passe que vous ne connaissez pas. Il est "changeit" mostt probablement
1) Pour créer un nouveau fichier de clés et de certificats auto-signés avec des correspondants clés publique/privée:
2) Examiner le fichier de clés:
3) Exportation et d'examiner le certificat auto-signé:
4) Importer le certificat dans un nouveau truststore:
5) Examiner le truststore:
6) Ajouter au fichier de clés (c'est ce que vous cherchez):
Sur certains systèmes, cela se trouve dans
et sur d'autres systèmes, il est quelque chose comme
Découvrez ce projet sur Git-Hub si vous avez besoin de plus de précisions:
https://github.com/rabbitfighter81/JSSLInfoCollectionServer
Et ici est un script shell qui permet de clés.
https://github.com/rabbitfighter81/SSLKeytool
OriginalL'auteur Joshua Michael Calafell
Le certificat présenté par le serveur n'est pas digne de confiance. Cela peut être dû le certificat a expiré, ou de la fiducie, le gestionnaire ne pas être en mesure d'établir une chaîne de confiance à l'un des certificats dans votre magasin de confiance.
OriginalL'auteur David Grant
Vérifier que le cert est valide, vous pouvez le faire avec votre navigateur.
OriginalL'auteur Steven
Si vous avez vraiment besoin, vous pouvez accepter tous les certificats. Mais gardez à l'esprit que c'est vraiment laid.
Hava un coup d'oeil à cette.
OriginalL'auteur fancy
Je voudrais tout d'abord vérifier si le cert en question a expiré. Dans de nombreuses reprises lors du travail avec les fournisseurs. Ils peuvent mettre à jour leur certs sans nous laisser savoir.
OriginalL'auteur Ryan D
Vous pouvez vérifier le certificat via le navigateur.
Dans Internet Explorer
Une fois dans les Certificats Fenêtre, vous pouvez visualiser l'ensemble de l'arborescence du certificat.
Si vous avez un certificat non valide, vous voudrez peut-être chercher une solution à l'aide de la
keytool
commande.Keytool Commandes
OriginalL'auteur sealz
Je pense que vous devez ajouter le fichier de clés dans
jre1.6 cacert
. Alors se déployer à nouveau votre serveur .Par la façon dont vous pouvez utiliser pour ajouterkeystore
PORTECLE
programme . il est très utile.OriginalL'auteur Rusty Umt
Cette "certificate_unknown' est un très mauvais message d'erreur. C'est le même message d'erreur renvoyée lorsqu'un certificat a expiré, même si c'est dans le truststore. Je suggère de vérifier la date d'expiration du certificat avant de vous perdre votre temps sur autre chose.
OriginalL'auteur Mikematic
Quand j'ai reçu cette erreur, le problème était que le certificat du serveur a l'aide de l'algorithme de signature SHA1withRSA et Android 8.0 client. Commutation de certificat de serveur basé sur SHA256withRSA résolu le problème.
OriginalL'auteur Zds