我想在我的 Android 应用程序中使用我的自签名证书,而不是依赖证书颁发机构。
我找到了这个链接(thoughcrime.org)以及这样做的原因和一些示例,但无法使其适应我的 loopj 场景(我没有从服务器得到答案,见下文)。
然后我来到了这些解决相同问题的其他链接(sproutsocial和Antoine 的博客),包括 loopj 和 volley 片段。最后我使用了下面的代码:
private static SSLSocketFactory getSSLSocketFactory(){
try {
// Get an instance of the Bouncy Castle KeyStore format
KeyStore trusted = KeyStore.getInstance("BKS");
// Get the raw resource, which contains the keystore with
// your trusted certificates (root and any intermediate certs)
InputStream in = context.getResources().openRawResource(R.raw.mykeystore);
try {
// Initialize the keystore with the provided trusted certificates
// Also provide the password of the keystore
trusted.load(in, "mysecret".toCharArray());
} finally {
in.close();
}
// Pass the keystore to the SSLSocketFactory. The factory is responsible
// for the verification of the server certificate.
SSLSocketFactory sf = new SSLSocketFactory(trusted);
// Hostname verification from certificate
// http://hc.apache.org/httpcomponents-client-ga/tutorial/html/connmgmt.html#d4e506
sf.setHostnameVerifier(SSLSocketFactory.STRICT_HOSTNAME_VERIFIER);
return sf;
} catch (Exception e) {
throw new AssertionError(e);
}
}
而且,每次我要与 进行连接调用时AsyncHttpClient
,我都会像这样设置客户端的 SSLSocketFactory:
private static AsyncHttpClient client = new AsyncHttpClient();
client.setSSLSocketFactory(getSSLSocketFactory());
创建密钥库时,所有终端输出都与Antoine 博客中的描述相同
尽管如此,我JsonHttpResponseHandler
没有收到任何东西,也没有调用它的onSuccess
/onFailure
方法。
我会很感激这方面的任何帮助。谢谢!
编辑 -这个问题和我的问题差不多,但没有答案