首页 > 代码库 > Android - Not trusted server certificate exception

Android - Not trusted server certificate exception

问题是由于HTTPS Server没有证书引起的,在网上查了一下解决办法:

Trusting all certificates using HttpClient over HTTPS 

主要代码如下:

import java.io.IOException;import java.net.Socket;import java.net.UnknownHostException;import java.security.KeyManagementException;import java.security.KeyStore;import java.security.KeyStoreException;import java.security.NoSuchAlgorithmException;import java.security.UnrecoverableKeyException;import java.security.cert.CertificateException;import java.security.cert.X509Certificate;import javax.net.ssl.SSLContext;import javax.net.ssl.TrustManager;import javax.net.ssl.X509TrustManager;import org.apache.http.conn.ssl.SSLSocketFactory;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();    }}
public 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();    }}

 

Android - Not trusted server certificate exception