在证书的帮助下使用SSL Socket连接到服务器

时间:2015-02-17 05:34:07

标签: java sockets ssl

我有一个使用SSL Socket编写的SSL服务器。服务器运行正常。现在我需要使用客户端应用程序连接到服务器。

客户代码:

System.setProperty("javax.net.ssl.trustStore", "C:\\cacerts.jks");        
System.setProperty("javax.net.ssl.trustStorePassword", "changeit");

try {
    SSLSocketFactory sslsocketfactory = (SSLSocketFactory) SSLSocketFactory.getDefault();
    SSLSocket sslsocket = (SSLSocket) sslsocketfactory.createSocket("127.0.0.1", 800);

    InputStream inputstream = System.in;
    InputStreamReader inputstreamreader = new InputStreamReader(inputstream);
    BufferedReader bufferedreader = new BufferedReader(inputstreamreader);

    OutputStream outputstream = sslsocket.getOutputStream();
    OutputStreamWriter outputstreamwriter = new OutputStreamWriter(outputstream);
    BufferedWriter bufferedwriter = new BufferedWriter(outputstreamwriter);

    bufferedwriter.write("test"+"\n");
    bufferedwriter.flush();
    bufferedwriter.close();

} catch (Exception exception) {
    exception.printStackTrace();
}

在上面的代码中,我使用与truststore相同的密钥库文件。

在客户端使用相同的密钥库文件作为信任库是否是个好主意?如果不能如何以安全的方式连接到服务器?

1 个答案:

答案 0 :(得分:1)

  

在上面的代码中,我使用的是与truststore相同的密钥库文件。

不,你不是。您只使用信任库。如果您使用的是密钥库,则必须指定它:

System.setProperty("javax.net.ssl.keyStore", ...);        
System.setProperty("javax.net.ssl.keyStorePassword", ...);

你肯定 为两者使用相同的文件。