2
我有一個問題,我的defaultHttpClient
。安全連接與httpclient在Android
我必須與使用HTTPS連接的服務器建立連接。我發現HttpClient
默認使用TLS
安全協議,而我想連接的服務器不支持它。
我不能改變這一點,我被迫在我的應用程序中更改我的安全協議!
我該怎麼做?
我有一個問題,我的defaultHttpClient
。安全連接與httpclient在Android
我必須與使用HTTPS連接的服務器建立連接。我發現HttpClient
默認使用TLS
安全協議,而我想連接的服務器不支持它。
我不能改變這一點,我被迫在我的應用程序中更改我的安全協議!
我該怎麼做?
試試這個客戶端它幫助了我很多次。
public class MyHttpClient1 extends DefaultHttpClient {
final Context context;
MyHttpClient1 mHttpClient=null;
public MyHttpClient1(Context context) {
this.context = context;
}
@Override
protected ClientConnectionManager createClientConnectionManager() {
SchemeRegistry registry = new SchemeRegistry();
KeyStore trustStore = null;
try {
trustStore = KeyStore.getInstance(KeyStore.getDefaultType());
} catch (KeyStoreException e) {
e.printStackTrace();
}
try {
trustStore.load(null, null);
} catch (IOException e) {
e.printStackTrace();
} catch (NoSuchAlgorithmException e) {
e.printStackTrace();
} catch (CertificateException e) {
e.printStackTrace();
}
registry.register(new Scheme("http", PlainSocketFactory.getSocketFactory(), 80));
// Register for port 443 our SSLSocketFactory with our keystore
// to the ConnectionManager
try {
registry.register(new Scheme("https",new MySSLSocketFactory(trustStore), 443));
} catch (NoSuchAlgorithmException e) {
e.printStackTrace();
} catch (KeyManagementException e) {
e.printStackTrace();
} catch (KeyStoreException e) {
e.printStackTrace();
} catch (UnrecoverableKeyException e) {
e.printStackTrace();
}
return new SingleClientConnManager(getParams(), registry);
}
public class MySSLSocketFactory extends SSLSocketFactory {
SSLContext sslContext = SSLContext.getInstance("SSL"); //or 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();
}
}
這似乎並不工作,但我已經通過添加方法解決它:
setEnableProtocols(new String[]{"SSLv3"});
在創造我的個人SSLSocket
現在一切似乎工作!
你能告訴我你在哪裏提到這個? – sachin