javax.net.ssl.SSLException: prise de contact SSL interrompue Connexion réinitialisée par un pair lors de l'appel de webservice Android
Je fais appel https webservice et sa fonctionne très bien avant, mais maintenant, quand j'essaie de l'appeler son me donner erreurs suivantes.
Journal Des Erreurs :
12-23 06:28:11.969: W/System.err(3014): javax.net.ssl.SSLException: SSL handshake aborted: ssl=0x1cc160: I/O error during system call, Connection reset by peer
12-23 06:28:11.979: W/System.err(3014): at org.apache.harmony.xnet.provider.jsse.NativeCrypto.SSL_do_handshake(Native Method)
12-23 06:28:11.979: W/System.err(3014): at org.apache.harmony.xnet.provider.jsse.OpenSSLSocketImpl.startHandshake(OpenSSLSocketImpl.java:474)
12-23 06:28:11.979: W/System.err(3014): at org.apache.harmony.xnet.provider.jsse.OpenSSLSocketImpl$SSLInputStream.<init>(OpenSSLSocketImpl.java:750)
12-23 06:28:11.979: W/System.err(3014): at org.apache.harmony.xnet.provider.jsse.OpenSSLSocketImpl.getInputStream(OpenSSLSocketImpl.java:692)
12-23 06:28:11.979: W/System.err(3014): at crittercism.android.aa.getInputStream(Unknown Source)
12-23 06:28:11.979: W/System.err(3014): at org.apache.http.impl.io.SocketInputBuffer.<init>(SocketInputBuffer.java:93)
12-23 06:28:11.979: W/System.err(3014): at org.apache.http.impl.SocketHttpClientConnection.createSessionInputBuffer(SocketHttpClientConnection.java:83)
12-23 06:28:11.979: W/System.err(3014): at org.apache.http.impl.conn.DefaultClientConnection.createSessionInputBuffer(DefaultClientConnection.java:170)
12-23 06:28:11.979: W/System.err(3014): at org.apache.http.impl.SocketHttpClientConnection.bind(SocketHttpClientConnection.java:106)
12-23 06:28:11.979: W/System.err(3014): at org.apache.http.impl.conn.DefaultClientConnection.openCompleted(DefaultClientConnection.java:129)
12-23 06:28:11.979: W/System.err(3014): at org.apache.http.impl.conn.DefaultClientConnectionOperator.openConnection(DefaultClientConnectionOperator.java:171)
12-23 06:28:11.989: W/System.err(3014): at org.apache.http.impl.conn.AbstractPoolEntry.open(AbstractPoolEntry.java:164)
12-23 06:28:11.989: W/System.err(3014): at org.apache.http.impl.conn.AbstractPooledConnAdapter.open(AbstractPooledConnAdapter.java:119)
12-23 06:28:11.989: W/System.err(3014): at org.apache.http.impl.client.DefaultRequestDirector.execute(DefaultRequestDirector.java:359)
12-23 06:28:11.989: W/System.err(3014): at org.apache.http.impl.client.AbstractHttpClient.execute(AbstractHttpClient.java:555)
12-23 06:28:11.989: W/System.err(3014): at org.apache.http.impl.client.AbstractHttpClient.execute(AbstractHttpClient.java:487)
12-23 06:28:11.989: W/System.err(3014): at org.apache.http.impl.client.AbstractHttpClient.execute(AbstractHttpClient.java:465)
Je suis à l'aide de code suivant pour appeler https webservice.
public static void trustAllHosts() {
X509TrustManager easyTrustManager = new X509TrustManager() {
public void checkClientTrusted(X509Certificate[] chain,
String authType) throws CertificateException {
//Oh, I am easy!
}
public void checkServerTrusted(X509Certificate[] chain,
String authType) throws CertificateException {
//Oh, I am easy!
}
public X509Certificate[] getAcceptedIssuers() {
return null;
}
};
//Create a trust manager that does not validate certificate chains
TrustManager[] trustAllCerts = new TrustManager[] { easyTrustManager };
//Install the all-trusting trust manager
try {
SSLContext sc = SSLContext.getInstance("TLS");
sc.init(null, trustAllCerts, new java.security.SecureRandom());
HttpsURLConnection
.setDefaultSSLSocketFactory(sc.getSocketFactory());
} catch (Exception e) {
e.printStackTrace();
}
}
public static HttpClient getNewHttpClient() {
try {
KeyStore trustStore = KeyStore.getInstance(KeyStore
.getDefaultType());
trustStore.load(null, null);
SSLSocketFactory sf = new MySSLSocketFactory(trustStore);
sf.setHostnameVerifier(SSLSocketFactory.ALLOW_ALL_HOSTNAME_VERIFIER);
HttpParams params = new BasicHttpParams();
HttpProtocolParams.setVersion(params, HttpVersion.HTTP_1_1);
HttpProtocolParams.setContentCharset(params, HTTP.UTF_8);
SchemeRegistry registry = new SchemeRegistry();
registry.register(new Scheme("http", PlainSocketFactory
.getSocketFactory(), 80));
registry.register(new Scheme("https", sf, 443));
ClientConnectionManager ccm = new ThreadSafeClientConnManager(
params, registry);
return new DefaultHttpClient(ccm, params);
} catch (Exception e) {
return new DefaultHttpClient();
}
}
MySSLSocketFactory.java
public class MySSLSocketFactory extends SSLSocketFactory {
SSLContext sslContext = SSLContext.getInstance("TLS");
public MySSLSocketFactory(KeyStore truststore)
throws NoSuchAlgorithmException, KeyManagementException,
KeyStoreException, UnrecoverableKeyException {
super(truststore);
TrustManager tm = new X509TrustManager() {
public void checkClientTrusted(X509Certificate[] chain,
String authType) throws CertificateException {
}
public void checkServerTrusted(X509Certificate[] chain,
String authType) throws CertificateException {
}
public X509Certificate[] getAcceptedIssuers() {
return null;
}
};
sslContext.init(null, new TrustManager[] { tm }, null);
}
@Override
public Socket createSocket(Socket socket, String host, int port,
boolean autoClose) throws IOException, UnknownHostException {
return sslContext.getSocketFactory().createSocket(socket, host, port,
autoClose);
}
@Override
public Socket createSocket() throws IOException {
return sslContext.getSocketFactory().createSocket();
}
}
Il travaille très bien avant, mais maintenant, il échoue. Il n'y a pas toutes les modifications apportées au serveur.
J'ai déjà référencé
- Android-Requête - Aléatoire SSLExceptions
- Intermittent Connection Reset by Peer erreurs dans Android connexion .NET le point de terminaison REST
- Android HTTPS exception Connection reset by peer
- Pourquoi est-HttpUrlConnection jeter un SSLException tandis que sur une connexion de données mobiles?
Je l'ai testé à la fois le wifi et les données mobiles. L'Application ne fonctionne dans les deux.
Si quelqu'un face à ce problème avant alors s'il vous plaît m'aider à le résoudre.
source d'informationauteur DreamsNeverDie
Vous devez vous connecter pour publier un commentaire.
J'ai aussi eu la même exception. J'ai trouvé que c'était dû à protocole TLS 1.0 n'a pas été pris en charge par le serveur.
J'ai observé que le périphérique Android, http échec de la connexion au serveur où
TLS 1.0
n'est pas pris en charge. J'ai cherché, en tous lieux, sur le bug, mais ne trouvez pas tout ce qui est lié à ce problème. Et le problème a été résolu, lorsque leTLS 1.0 protocol
de soutien a été ajouté sur le serveur.Vous pouvez vérifier votre serveur /nom d'hôte en charge du protocole à l'aide de https://www.ssllabs.com/ssltest.Il pourrait y avoir 2 raisons:
Les certificats pourraient être expiré au client ou côté serveur.
Solution:
Prolonger la date d'expiration du certificat existant, ou à l'Échange de nouveaux certificats.
Port du serveur a été réinitialisée à une autre port.
Solution:
J'ai été confronté à ce port problème de changement, normalement en raison de la maintenance du serveur ou le correctif de mise à jour, parfois de port du service obtenir le changement. Demandez à la personne qui vous a fourni le wsdl pour régénérer wsdl sur leur serveur et vérifie que le port pas si c'est la correspondance avec wsdl existant à côté client ou pas. Plus probablement, ce serait le cas ici.
Nous avons eu ce même problème de départ, ce matin, et réussi à le résoudre.
SSL dans IIS 8
J'ai eu le même problème pour certains appareils Android. Trouvé la solution par serveur IIS paramètres.
Suit:
De référence de capture d'écran:
Espère que ce serait vous aide.