安卓TLS连接和自签名证书

17

我正在尝试从我的Android应用程序连接到基于node.js的TLS服务器。显然,它失败了,因为我正在使用自签名证书。

有没有办法将证书添加到我的应用程序中,并让Android以某种方式信任它?请注意,我不是在使用HTTPS,而是在进行TCP的TLS连接。

2个回答

17

经过大量阅读后,我得出了一个答案。

这里有一个相当不错的指南: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);

7

我认为在应用程序中硬编码指纹是个好主意。更新应用程序以使用新的指纹并不困难,并且可以省略所有与 CA 相关的烦琐操作。 - CodesInChaos
抱歉,我最近非常忙。在悬赏过期之前,我会在今晚检查这个问题 :) - Robin Heggelund Hansen
我给你的链接点了个赞。当然,那些链接中的方法会让应用程序信任每个人,这显然不是我想要的。不过,对于测试环境中的人来说可能会很有趣。 :) - Robin Heggelund Hansen

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接