我正在尝试从我的Android应用程序连接到基于node.js的TLS服务器。显然,它失败了,因为我正在使用自签名证书。
有没有办法将证书添加到我的应用程序中,并让Android以某种方式信任它?请注意,我不是在使用HTTPS,而是在进行TCP的TLS连接。
经过大量阅读后,我得出了一个答案。
这里有一个相当不错的指南:http://nelenkov.blogspot.no/2011/12/using-custom-certificate-trust-store-on.html
现在,由于我没有使用HTTPS,因此我需要采用稍微不同的方法来获取使用新密钥库的干净的SSL套接字:
KeyStore store = KeyStore.getInstance("BKS");
InputStream truststore = mainActivity.getResources().openRawResource(R.raw.trust);
store.load(truststore, "PASSWORD".toCharArray());
TrustManagerFactory tmf = TrustManagerFactory.getInstance(KeyManagerFactory.getDefaultAlgorithm());
tmf.init(store);
SSLContext context = SSLContext.getInstance("TLS");
context.init(null, tmf.getTrustManagers(), new SecureRandom());
Socket socket = context.getSocketFactory().createSocket(ip, port);