我有一个使用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相同的密钥库文件。
在客户端使用相同的密钥库文件作为信任库是否是个好主意?如果不能如何以安全的方式连接到服务器?
答案 0 :(得分:1)
在上面的代码中,我使用的是与truststore相同的密钥库文件。
不,你不是。您只使用信任库。如果您使用的是密钥库,则必须指定它:
System.setProperty("javax.net.ssl.keyStore", ...);
System.setProperty("javax.net.ssl.keyStorePassword", ...);
你肯定 不 为两者使用相同的文件。