我正在编写客户端 - 服务器聊天应用程序。我想加密这两者之间的连接。我第一次这样做,我发现很难。根据我的理解,我需要一个客户端的信任库和一个服务器的密钥库。我已按照本指南生成它们:http://peoplesofttutorial.com/generating-key-store-and-trust-store-using-keytool/
客户端:
System.setProperty("javax.net.ssl.trustStore" , "hrms.truststore");
System.setProperty("javax.net.ssl.trustStorePassword" , "123456");
SSLSocketFactory sslsf = (SSLSocketFactory) SSLSocketFactory.getDefault();
SSLsocket = (SSLSocket) sslsf.createSocket(server, port);
服务器:
System.setProperty("javax.net.ssl.keyStore" , "pskey.keystore");
System.setProperty("javax.net.ssl.keyStorePassword","123456");
SSLServerSocketFactory sslsocketfactory = (SSLServerSocketFactory) SSLServerSocketFactory.getDefault();
sslserversocket = (SSLServerSocket) sslsocketfactory.createServerSocket(Port);
服务器正常启动。当我连接与服务器在同一台计算机上运行的客户端时,我可以连接而没有任何问题但是当我从同一网络上的不同计算机连接时,我收到此错误:javax.net.ssl.SSLException:Received致命警报:internal_error
有人可以帮我解决这个错误吗?
答案 0 :(得分:0)
我已经解决了我的问题。我的信任存储和keystone在我的项目文件中,但是当我将它编译为runnable jar时,我认为信任存储和密钥库包含在那个可运行的jar中,不幸的是它们不是。我通过将truststore和keystore放在一个带有runnable jar的文件夹中解决了这个问题。
解决方案非常简单,整个问题都是因为我缺乏经验而发生的。
感谢您的帮助。