nsp*_*nsp 8 https android ssl-certificate x509certificate pinning
我在logcat中收到此错误.我在我的android应用程序中实现了ssl pinning.我想我做错了什么导致了这个错误.
05-19 17:39:54.998: E/NativeCrypto(30908): ssl=0x5eefaf80 cert_verify_callback x509_store_ctx=0x5dbea940 arg=0x0
05-19 17:39:54.998: E/NativeCrypto(30908): ssl=0x5eefaf80 cert_verify_callback calling verifyCertificateChain authMethod=ECDHE_RSA
Run Code Online (Sandbox Code Playgroud)
以下是我的ssl pinning android代码.哪个有效,但会引发上述错误.
public static HttpClient getHttpClient(HttpParams params, Context context) throws CertificateException, KeyStoreException, NoSuchAlgorithmException, IOException, KeyManagementException, UnrecoverableKeyException {
CertificateFactory cf = CertificateFactory.getInstance("X.509");
InputStream caInput = context.getResources().openRawResource(R.raw.abc);
Certificate ca;
try {
ca = cf.generateCertificate(caInput);
} finally {
try {
caInput.close();
} catch (IOException e) {
Log.e("Error","Closing the cert file",e);
}
}
String keyStoreType = KeyStore.getDefaultType();
KeyStore keyStore = KeyStore.getInstance(keyStoreType);
keyStore.load(null, null);
keyStore.setCertificateEntry("ca", ca);
SSLSocketFactory sf = new TrustSelectCertsSSLSocketFactory(keyStore,context);
sf.setHostnameVerifier(SSLSocketFactory.STRICT_HOSTNAME_VERIFIER);
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);
DefaultHttpClient client = new DefaultHttpClient(ccm, params);
DefaultHttpRequestRetryHandler defaultHttpRequestRetryHandler = new DefaultHttpRequestRetryHandler(0, false);
client.setHttpRequestRetryHandler(defaultHttpRequestRetryHandler);
return client;
}
Run Code Online (Sandbox Code Playgroud)
TrustSelectCertSSLFactory.java代码
public class TrustSelectCertSSLSocketFactory extends SSLSocketFactory {
SSLContext sslContext = SSLContext.getInstance("TLS");
public TrustSelectCertSSLFactory(KeyStore truststore, Context context) throws NoSuchAlgorithmException, KeyManagementException, KeyStoreException,
UnrecoverableKeyException, CertificateException {
super(truststore);
String tmfAlgorithm = TrustManagerFactory.getDefaultAlgorithm();
TrustManagerFactory tmf = TrustManagerFactory.getInstance(tmfAlgorithm);
tmf.init(truststore);
sslContext.init(null, tmf.getTrustManagers(), 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();
}
}
Run Code Online (Sandbox Code Playgroud)
调用函数getHttpClient的代码
....
HttpClient client = getHttpClient(params,context);
....
httpResponse = client.execute(post);
....
Run Code Online (Sandbox Code Playgroud)
我的SSL固定实现是否正确,为什么这个错误出现在logcat中?如果您需要更多详细信息,请在评论部分提及.
我在谷歌搜索,但它给了我解决方案,这不是解决这个问题.还有其他我应该寻找的东西吗?
| 归档时间: |
|
| 查看次数: |
1798 次 |
| 最近记录: |