मुझे एक समान SSL त्रुटि थी। पूर्व-लॉलीपॉप डिवाइस चालू करता है SSL TLSv1.1, TLSv1.2 का समर्थन नहीं करता है। मैंने इसे एक TLSSocketFactory wrapper क्लास समेत तय किया जो इन SSL प्रोटोकॉल को सक्षम करता है। अपने कोड के लिए निम्न जोड़ने का प्रयास करें:
static {
final SSLSocketFactory sslSocketFactory;
try {
sslSocketFactory = new TLSSocketFactory();
HttpsURLConnection.setDefaultSSLSocketFactory(sslSocketFactory);
} catch (KeyManagementException ignored) {
} catch (NoSuchAlgorithmException e) {
e.printStackTrace();
}
}
import java.io.IOException;
import java.net.InetAddress;
import java.net.Socket;
import java.net.UnknownHostException;
import java.security.KeyManagementException;
import java.security.NoSuchAlgorithmException;
import javax.net.ssl.SSLContext;
import javax.net.ssl.SSLSocket;
import javax.net.ssl.SSLSocketFactory;
/**
* @author fkrauthan
* http://blog.dev-area.net/2015/08/13/android-4-1-enable-tls-1-1-and-tls-1-2/
*
*
// IMPORTANT: Pre-lollipop devices do not support SSL TLSv1.1, TLSv1.2
// so I've included a TLSSocketFactory wrapper class that enables these SSL
// protocols.
*/
public class TLSSocketFactory extends SSLSocketFactory {
private SSLSocketFactory internalSSLSocketFactory;
public TLSSocketFactory() throws KeyManagementException, NoSuchAlgorithmException {
SSLContext context = SSLContext.getInstance("TLS");
context.init(null, null, null);
internalSSLSocketFactory = context.getSocketFactory();
}
@Override
public String[] getDefaultCipherSuites() {
return internalSSLSocketFactory.getDefaultCipherSuites();
}
@Override
public String[] getSupportedCipherSuites() {
return internalSSLSocketFactory.getSupportedCipherSuites();
}
@Override
public Socket createSocket(Socket s, String host, int port, boolean autoClose) throws IOException {
return enableTLSOnSocket(internalSSLSocketFactory.createSocket(s, host, port, autoClose));
}
@Override
public Socket createSocket(String host, int port) throws IOException, UnknownHostException {
return enableTLSOnSocket(internalSSLSocketFactory.createSocket(host, port));
}
@Override
public Socket createSocket(String host, int port, InetAddress localHost, int localPort) throws IOException, UnknownHostException {
return enableTLSOnSocket(internalSSLSocketFactory.createSocket(host, port, localHost, localPort));
}
@Override
public Socket createSocket(InetAddress host, int port) throws IOException {
return enableTLSOnSocket(internalSSLSocketFactory.createSocket(host, port));
}
@Override
public Socket createSocket(InetAddress address, int port, InetAddress localAddress, int localPort) throws IOException {
return enableTLSOnSocket(internalSSLSocketFactory.createSocket(address, port, localAddress, localPort));
}
private Socket enableTLSOnSocket(Socket socket) {
if(socket != null && (socket instanceof SSLSocket)) {
((SSLSocket)socket).setEnabledProtocols(new String[] {"TLSv1.1", "TLSv1.2"});
}
return socket;
}
}
स्रोत
2016-08-10 03:23:15
मैं एक Android एप्लिकेशन विकसित करने के लिए twitter4j एपीआई का उपयोग कर एक ही समस्या का सामना करना पड़ रहा है। वाईफाई का उपयोग करते समय सब ठीक काम करता है लेकिन जब मैं 2 जी पर स्विच करता हूं तो यह समस्या अक्सर होती है। – sahu
आपने इसे कैसे हल किया? मुझे retrofit और okhttp – Rickster
के साथ एक ही समस्या हो रही है यह समस्या एंड्रॉइड एंड से अभी तक हल नहीं हुई है। ! लेकिन वेब सेवा में चारों ओर कुछ काम घटना के अनुपात में कमी आई है। उन्होंने बस डीबी से प्राप्त करने के तरीके को अनुकूलित किया। – MohanRaj