Android和SSL证书加载

时间:2012-03-12 09:12:31

标签: java android ssl certificate keystore

我正在为Android 2.2 sdk制作一个应用程序,我正在通过wifi从一个应用程序实例通过一个java Socket将数据发送到另一个(一个不同的移动设备),它工作正常。我想为此添加一些加密,因此数据不会以纯文本形式发送。

我用过

SSLServerSocketFactory factory = (SSLServerSocketFactory) 
SSLServerSocketFactory.getDefault();
server = (SSLServerSocket) factory.createServerSocket(incomingConnectionPort);
while(!Thread.interrupted()) {
    SSLSocket incoming = (SSLSocket) server.accept();
     .......
 }

在一个点上创建SSLServer并

SocketAddress sockAddress = new InetSocketAddress(address.getIP(), address.getPort());
SSLSocketFactory factory = (SSLSocketFactory) SSLSocketFactory.getDefault();
connectionSocket = (SSLSocket) factory.createSocket();
connectionSocket.connect(sockAddress, 6000);

另一点连接到服务器。 经过一些搜索后,我还创建了一个类似

的自签名证书
keytool -keystore mykeystore -storepass mypass -genkey -keyalg RSA -alias mycert

并在我的代码中添加了这个

System.setProperty("javax.net.ssl.keyStore", "mykeystore");
System.setProperty("javax.net.ssl.keyStorePassword","mypass");
//add cert as trusted
System.setProperty("javax.net.ssl.trustStore","mykeystore");
System.setProperty("javax.net.ssl.trustStorePassword","mypass");

但由于我在这里阅读http://groups.google.com/group/android-developers/browse_thread/thread/16c7eb8e65451d27/26edb971d390e2a3?pli=1的原因,这显然不适用于android。

我在这里检查了代码(解决方案?)https://github.com/k9mail/k-9/blob/master/src/com/fsck/k9/mail/store/TrustManagerFactory.java,但我无法弄清楚如何导入证书。

您能否就如何将证书正确导入密钥库提供一些指导?

我也很感激可能是另一种通过java中的tcp套接字安全传输数据的方法(不是特定于Android的,因为我正在制作的应用程序也将连接到非移动设备)。

谢谢,请原谅我犯的任何错误。我还在学习。 :)

1 个答案:

答案 0 :(得分:2)

SSL是客户端到客户端连接的不良选择。 SSL要求服务器具有静态DNS(或IP)名称,而在此方案中不是这种情况。

您应该使用常规套接字连接并开发自己的加密协议。详细信息取决于您要传输的数据以及这意味着哪些安全要求。