【发布时间】:2017-03-05 03:54:15
【问题描述】:
我在Windows下写了一个基于Java的多服务器聊天系统。在安全部分,我创建了一个密钥库来创建 SSLSocket。当我启动 3 台服务器时,它可以在 Windows(Win10 14393.321)上运行,但在 OS X(版本 10.12(16A323))和 Linux(Ubuntu 14.04.4 LTS)上失败。这真的让我很困惑。这是密钥库部分:
System.setProperty("javax.net.ssl.keyStore",keyFilepath);
System.setProperty("javax.net.ssl.trustStore",keyFilepath);
System.setProperty("javax.net.ssl.keyStorePassword","password");
System.setProperty("javax.net.ssl.trustStorePassword", "password");
当我在 OS X 或 Linux 上运行第三台服务器时,它显示:
java.net.ConnectException:连接被拒绝
在 java.net.PlainSocketImpl.socketConnect(Native Method) 在 java.net.AbstractPlainSocketImpl.doConnect(AbstractPlainSocketImpl.java:350) 在 java.net.AbstractPlainSocketImpl.connectToAddress(AbstractPlainSocketImpl.java:206) 在 java.net.AbstractPlainSocketImpl.connect(AbstractPlainSocketImpl.java:188) 在 java.net.SocksSocketImpl.connect(SocksSocketImpl.java:392) 在 java.net.Socket.connect(Socket.java:589) 在 sun.security.ssl.SSLSocketImpl.connect(SSLSocketImpl.java:668) 在 sun.security.ssl.SSLSocketImpl.(SSLSocketImpl.java:427) 在 sun.security.ssl.SSLSocketFactoryImpl.createSocket(SSLSocketFactoryImpl.java:88) 在 server.AuthorizeServer.MessageReceive(AuthorizeServer.java:99) 在 server.AuthorizeServer.main(AuthorizeServer.java:64) 在 sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method) 在 sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62) 在 sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43) 在 java.lang.reflect.Method.invoke(Method.java:497) 在 org.eclipse.jdt.internal.jarinjarloader.JarRsrcLoader.main(JarRsrcLoader.java:58)
这是我第一次在 StackOverflow 上提问,我非常期待您的帮助。 谢谢!
【问题讨论】:
-
我认为最好在你的问题中说出你测试过的 Windows、OS X 和 Linux 的版本,在哪里成功,哪里失败。
-
好的,谢谢。我已经添加了。
-
不同的是,失败的情况是在 TCP 级别连接失败,因为 IP:port 错误或者没有任何监听。您的密钥库、信任库、
SSLSocket、JSSE 或 Java 都与它无关。 -
@EJP 你是对的。这是端口问题。我将服务器端口设置为 80 并在命令之前使用了 'sudo' 并且它起作用了。但是我仍然有点困惑,为什么像“5544”这样的其他端口不起作用(但在 Windows 上工作)?
-
在不知道您在说什么的情况下无法发表评论。
标签: java linux macos sockets ssl