2017-06-29 1 views
1

D'abord, j'ai déjà cherché sur Internet et j'ai débogué pendant 3 jours.Obtenir javax.net.ssl.SSLHandshakeException: Connexion fermée par les pairs dans Android 5.0.2

Ceci est l'erreur exacte,

javax.net.ssl.SSLHandshakeException: Connection closed by peer 
    at com.android.org.conscrypt.NativeCrypto.SSL_do_handshake(Native Method) 
    at com.android.org.conscrypt.OpenSSLSocketImpl.startHandshake(OpenSSLSocketImpl.java:302) 
    at com.android.okhttp.Connection.upgradeToTls(Connection.java:197) 
    at com.android.okhttp.Connection.connect(Connection.java:151) 
    at com.android.okhttp.internal.http.HttpEngine.connect(HttpEngine.java:276) 
    at com.android.okhttp.internal.http.HttpEngine.sendRequest(HttpEngine.java:211) 
    at com.android.okhttp.internal.http.HttpURLConnectionImpl.execute(HttpURLConnectionImpl.java:373) 
    at com.android.okhttp.internal.http.HttpURLConnectionImpl.connect(HttpURLConnectionImpl.java:106) 
    at com.android.okhttp.internal.http.HttpURLConnectionImpl.getOutputStream(HttpURLConnectionImpl.java:208) 
    at com.android.okhttp.internal.http.DelegatingHttpsURLConnection.getOutputStream(DelegatingHttpsURLConnection.java:218) 
    at com.android.okhttp.internal.http.HttpsURLConnectionImpl.getOutputStream(HttpsURLConnectionImpl.java:25) 
    at com.aws.wiremo.common.CommonFunctions.sendRequestEx(CommonFunctions.java:618) 
    at com.aws.wiremo.common.CommonFunctions.sendRequest(CommonFunctions.java:556) 
    at com.aws.wiremo.screen.kdo.LoadingScreen$MakeRequest.doInBackground(LoadingScreen.java:146) 
    at com.aws.wiremo.screen.kdo.LoadingScreen$MakeRequest.doInBackground(LoadingScreen.java:125) 
    at android.os.AsyncTask$2.call(AsyncTask.java:288) 
    at java.util.concurrent.FutureTask.run(FutureTask.java:237) 
    at android.os.AsyncTask$SerialExecutor$1.run(AsyncTask.java:231) 
    at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1112) 
    at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:587) 
    at java.lang.Thread.run(Thread.java:818) 

Pour des raisons de confidentialité, je ne peux pas poster les codes. Il n'y a pas d'exception causée par le StackTrace, donc je ne peux pas vraiment diagnostiquer le problème.

Voici quelques informations que je peux partager.

  • demande est envoyée à https://[IP_address]:443/
  • J'envoie une demande à un matériel spécial, comme un boîtier de commande. Je peux seulement écrire et récupérer des données via des requêtes POST.
  • La chaîne de certificats que je reçois dans la méthode checkServerTrusted de mon CustomTrustManager a un CN qui n'est pas une adresse IP et pas un DNS, plus comme un mot seulement (c'est-à-dire CN = commonname).
  • Mon HostNameVerifier est ALLOW_ALL_HOSTNAME_VERIFIER temporairement (ce qui pourrait résoudre le problème avec la 3ème info?).
  • J'utilise SSLContext.getInstance ("TLS") et mes protocoles sont TLSv1, TLSv1.1 et TLSv1.2.
  • Le certificat utilisé est auto-signé.
  • Dans la méthode checkServerTrusted, la chaîne X509Certificate est toujours approuvée par un gestionnaire de confiance (j'ai créé un trustManager qui fait toujours confiance au certificat).


Toutes les entrées seront appréciées.

Répondre

0

La réponse à mon problème a été que j'ai commenté le code pour ajouter ma clé privée générée à mon magasin de clés afin que le HandShake SSL échoue lors de l'authentification du client.

J'espère que cette réponse peut aider quelqu'un.