java – 使用SSL与Bouncy Castle进行Android到服务器通信
内容导读
互联网集市收集整理的这篇技术教程文章主要介绍了java – 使用SSL与Bouncy Castle进行Android到服务器通信,小编现在分享给大家,供广大互联网技能从业者学习和参考。文章包含3253字,纯文字阅读大概需要5分钟。
内容图文
![java – 使用SSL与Bouncy Castle进行Android到服务器通信](/upload/InfoBanner/zyjiaocheng/709/43298537440243e9a94382a941df2b19.jpg)
我知道这不是那么困难,但非常不幸的是我被困在这里并且从昨天开始就打击它,我已经按照这个Mutual Authentication in Android教程,在资源中放置一个密钥库并尝试通过SSL连接到我的服务器,但获得以下内容例外
java.lang.RuntimeException:
org.spongycastle.jcajce.provider.asymmetric.x509.CertificateFactory$ExCertificateException
我已将sslapptruststore.pfx文件放在res / raw / sslapptruststore.pfx下
并使用这段代码
try {
KeyStore clientCert = KeyStore.getInstance("PKCS12");
clientCert.load(getResources().openRawResource(R.raw.sslapptruststore), "123456".toCharArray());// this line causes exception
HttpClient httpClient = null;
HttpParams httpParams = new BasicHttpParams();
SSLSocketFactory sslSocketFactory = new SSLSocketFactory(clientCert, null, null);
SchemeRegistry registry = new SchemeRegistry();
registry.register(new Scheme("https", sslSocketFactory, 8443));
httpClient = new DefaultHttpClient(new ThreadSafeClientConnManager(httpParams, registry), httpParams);
HttpPost httpPost = new HttpPost(
"https://192.168.1.113:8443/CertProvider");
httpPost.setHeader("Content-Type", "application/x-www-form-urlencoded");
List<NameValuePair> nameValuePair = new ArrayList<NameValuePair>(2);
nameValuePair.add(new BasicNameValuePair("csr", csr.toString()));
// Url Encoding the POST parameters
httpPost.setEntity(new UrlEncodedFormEntity(nameValuePair));
// Making HTTP Request
// HttpResponse response = null;
ResponseHandler<String> responseHandler = new BasicResponseHandler();
String response = "";
response = httpClient.execute(httpPost, responseHandler);
} catch (Exception e) {
Log.e("", e.getMessage());
}
我也搜索过,但其他人正在使用.bks.
任何帮助表示赞赏.
解决方法:
我已回答了一些问题,如下所示:
Read in PKCS12/P12 Client Cert file for Android App
Android volley self signed HTTPS trust anchor for certification path not found
你会找到
private SSLSocketFactory getSSLSocketFactory_KeyStore(String keyStoreType, int keystoreResId, String keyPassword)
throws CertificateException, KeyStoreException, IOException, NoSuchAlgorithmException, KeyManagementException {
InputStream caInput = getResources().openRawResource(keystoreResId);
// creating a KeyStore containing trusted CAs
if (keyStoreType == null || keyStoreType.length() == 0) {
keyStoreType = KeyStore.getDefaultType();
}
KeyStore keyStore = KeyStore.getInstance(keyStoreType);
keyStore.load(caInput, keyPassword.toCharArray());
// creating a TrustManager that trusts the CAs in the KeyStore
String tmfAlgorithm = TrustManagerFactory.getDefaultAlgorithm();
TrustManagerFactory tmf = TrustManagerFactory.getInstance(tmfAlgorithm);
tmf.init(keyStore);
TrustManager[] wrappedTrustManagers = getWrappedTrustManagers(tmf.getTrustManagers());
SSLContext sslContext = SSLContext.getInstance("TLS");
sslContext.init(null, wrappedTrustManagers, null);
return sslContext.getSocketFactory();
}
和.cert文件的getSSLSocketFactory_Certificate.
与上面的第一个链接一样,在项目中,您可以调用以下两种方法之一:
如果使用密钥库文件:
SSLSocketFactory sslSocketFactory = getSSLSocketFactory_KeyStore("PKCS12", R.raw.androidpkcs12, "123456789");
如果使用证书文件:
SSLSocketFactory sslSocketFactory = getSSLSocketFactory_Certificate("PKCS12", R.raw.androidpkcs12_cert);
P / S:如果这些方法在非活动类中,为避免NPE,必须将Context从Activity传递给该类(如上面的第一个链接).
希望这可以帮助!
内容总结
以上是互联网集市为您收集整理的java – 使用SSL与Bouncy Castle进行Android到服务器通信全部内容,希望文章能够帮你解决java – 使用SSL与Bouncy Castle进行Android到服务器通信所遇到的程序开发问题。 如果觉得互联网集市技术教程内容还不错,欢迎将互联网集市网站推荐给程序员好友。
内容备注
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 gblab@vip.qq.com 举报,一经查实,本站将立刻删除。
内容手机端
扫描二维码推送至手机访问。