直接上代码:
private static HttpClient getHttpClient() {
HttpClient client = new DefaultHttpClient();
InputStream ins = null;
try {
ins = DataApplication.getInstance().getAssets().open("tomcat.cer"); //下载的证书放到项目中的assets目录中
// ins = DataApplication.getInstance().getResources().openRawResource(R.raw.tomcat); //下载的证书放到项目中的res/raw目录中
CertificateFactory cerFactory = CertificateFactory.getInstance("X.509");
Certificate cer = cerFactory.generateCertificate(ins);
KeyStore keyStore = KeyStore.getInstance("PKCS12", "BC");
keyStore.load(null, null);
keyStore.setCertificateEntry("trust", cer);
SSLSocketFactoryEx socketFactory = new SSLSocketFactoryEx(keyStore);
Scheme sch = new Scheme("https", socketFactory, 443);
client.getConnectionManager().getSchemeRegistry().register(sch);
client.getParams().setIntParameter(HttpConnectionParams.CONNECTION_TIMEOUT, HTTP_CONNECTION_TIMEOUT);
client.getParams().setIntParameter(HttpConnectionParams.SO_TIMEOUT, SOCKET_CONNECTION_TIMEOUT);
} catch (Exception e) {
e.printStackTrace();
return new DefaultHttpClient();
}
return client;
}
static class SSLSocketFactoryEx extends SSLSocketFactory {
SSLContext sslContext = SSLContext.getInstance("TLS");
public SSLSocketFactoryEx(KeyStore truststore)
throws NoSuchAlgorithmException, KeyManagementException,
KeyStoreException, UnrecoverableKeyException {
super(truststore);
TrustManager tm = new X509TrustManager() {
@Override
public java.security.cert.X509Certificate[] getAcceptedIssuers() {
return null;
}
@Override
public void checkClientTrusted(
java.security.cert.X509Certificate[] chain, String authType)
throws java.security.cert.CertificateException {
}
@Override
public void checkServerTrusted(
java.security.cert.X509Certificate[] chain, String authType)
throws java.security.cert.CertificateException {
}
};
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();
}
}
keytool -printcert -rfc -file srca.cer
有任何问题。联系方式:1808418098(qq、微信)