我正在为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的,因为我正在制作的应用程序也将连接到非移动设备)。
谢谢,请原谅我犯的任何错误。我还在学习。 :)
答案 0 :(得分:2)
SSL是客户端到客户端连接的不良选择。 SSL要求服务器具有静态DNS(或IP)名称,而在此方案中不是这种情况。
您应该使用常规套接字连接并开发自己的加密协议。详细信息取决于您要传输的数据以及这意味着哪些安全要求。