无法建立SSL-Connection

时间:2015-06-24 16:00:00

标签: java android ssl

我有一个服务器(java)和一个客户端(android -smartphone)。 我希望客户端将加密数据(GPS位置,通过SSL)发送到服务器。 我想成为唯一能够连接到我的服务器的人。

为此,我创建了:

serverKeyStore.jks (containing servers private key)
clientKeyStore.jks (containing clients private key)
serverTrustStore.jks (containing clients certificate exported from clientKeyStore)
clientTrustStore.jks (-||- from serverKeyStore)

这样服务器信任客户端,客户端信任服务器。 (从证书的角度来看)没有其他人可以连接到我的服务器,因为服务器不会信任未知客户端并将终止连接。

为此我设置了服务器(仅与SSL相关的部分):

System.setProperty("javax.net.ssl.keyStore", "C:\\serverKeyStore.jks");
System.setProperty("javax.net.ssl.keyStorePassword", pw);
System.setProperty("javax.net.ssl.trustStore", "C:\\serverTrustStore.jks");
System.setProperty("javax.net.ssl.trustStorePassword", pw);

ServerSocketFactory gpsServerSocketFactory = SSLServerSocketFactory.getDefault();
gpsServerSocket = gpsServerSocketFactory.createServerSocket(gpsSocketPort);

    while(true)
    {
    Socket newConnection = gpsServerSocket.accept();

    new NewGPSConnectionThread(newConnection).start();
    }

希望这已足够,SSLContext现在使用serverKeyStore.jksserverTrustStore.jks通过System-Properties设置。

客户端是我奋斗的地方:

我将clientKeyStore.jksclientTrustStore.jks添加到a​​ssets-folder。我知道我不能直接引用assets文件夹中的文件,因为应用程序将被压缩。 (APK) 但我无法弄清楚如何在客户端配置SSLSocket以使用能够建立安全连接的clientKeyStore.jksclientTrustStore.jks

我的客户端程序的ssl相关部分:

SSLSocketFactory sslSocketFactory = (SSLSocketFactory) SSLSocketFactory.getDefault();
gpsSocket = sslSocketFactory.createSocket(MainActivity.dstName, MainActivity.dstPortGPS);

但很明显SSLContext或SSLSocket不知道我的clientKeyStore.jksclientTrustStore.jks,也不会引用默认值。

问题:

1)我的服务器ssl配置完成了吗?

2)如何完成客户端ssl配置?如何将client-key- and truststore带入游戏?

0 个答案:

没有答案