Java SSLServerSocket抛出EOFEException
我目前正在尝试在我的程序中实现SSL连接。但当我现在尝试启动它时,会在堆栈跟踪的顶部抛出一个NoSuchAlgorithmException 以下是完整的堆栈跟踪:Java SSLServerSocket抛出EOFEException,java,ssl,certificate,serversocket,Java,Ssl,Certificate,Serversocket,我目前正在尝试在我的程序中实现SSL连接。但当我现在尝试启动它时,会在堆栈跟踪的顶部抛出一个NoSuchAlgorithmException 以下是完整的堆栈跟踪: java.net.SocketException: java.security.NoSuchAlgorithmException: Error constructing implementation (algorithm: Default, provider: SunJSSE, class: sun.security.ssl.SSL
java.net.SocketException: java.security.NoSuchAlgorithmException: Error constructing implementation (algorithm: Default, provider: SunJSSE, class: sun.security.ssl.SSLContextImpl$DefaultSSLContext)
at javax.net.ssl.DefaultSSLServerSocketFactory.throwException(SSLServerSocketFactory.java:159)
at javax.net.ssl.DefaultSSLServerSocketFactory.createServerSocket(SSLServerSocketFactory.java:171)
at net.dreamcode.im.server.IMServer.startServer(IMServer.java:155)
at net.dreamcode.im.server.IMServer.main(IMServer.java:66)
Caused by: java.security.NoSuchAlgorithmException: Error constructing implementation (algorithm: Default, provider: SunJSSE, class: sun.security.ssl.SSLContextImpl$DefaultSSLContext)
at java.security.Provider$Service.newInstance(Provider.java:1262)
at sun.security.jca.GetInstance.getInstance(GetInstance.java:236)
at sun.security.jca.GetInstance.getInstance(GetInstance.java:164)
at javax.net.ssl.SSLContext.getInstance(SSLContext.java:156)
at javax.net.ssl.SSLContext.getDefault(SSLContext.java:97)
at javax.net.ssl.SSLServerSocketFactory.getDefault(SSLServerSocketFactory.java:113)
at net.dreamcode.im.server.IMServer.startServer(IMServer.java:153)
... 1 more
Caused by: java.io.EOFException
at java.io.DataInputStream.readInt(DataInputStream.java:392)
at sun.security.provider.JavaKeyStore.engineLoad(JavaKeyStore.java:645)
at sun.security.provider.JavaKeyStore$JKS.engineLoad(JavaKeyStore.java:55)
at java.security.KeyStore.load(KeyStore.java:1214)
at sun.security.ssl.SSLContextImpl$DefaultSSLContext.getDefaultKeyManager(SSLContextImpl.java:610)
at sun.security.ssl.SSLContextImpl$DefaultSSLContext.<init>(SSLContextImpl.java:495)
at sun.reflect.NativeConstructorAccessorImpl.newInstance0(Native Method)
at sun.reflect.NativeConstructorAccessorImpl.newInstance(NativeConstructorAccessorImpl.java:57)
at sun.reflect.DelegatingConstructorAccessorImpl.newInstance(DelegatingConstructorAccessorImpl.java:45)
at java.lang.reflect.Constructor.newInstance(Constructor.java:526)
at java.lang.Class.newInstance(Class.java:374)
at java.security.Provider$Service.newInstance(Provider.java:1238)
... 7 more
然后,在尝试创建SSLServerSocket时,我只使用以下方法:
SSLServerSocketFactory sslserversocketfactory = (SSLServerSocketFactory) SSLServerSocketFactory.getDefault();
SSLServerSocket sslserversocket = (SSLServerSocket) sslserversocketfactory.createServerSocket(port);
我不会通过传递key store参数来执行JAR文件,但我在创建套接字之前使用了以下代码:
System.setProperty("javax.net.ssl.keyStore", KEYSTORE);
System.setProperty("javax.net.ssl.keyStorePassword", keyStorePassword);
我不明白我做错了什么。我真的很感激任何帮助。谢谢 无论如何,这是行不通的。客户端不会信任新创建的证书,除非您通过允许它信任任何证书而破坏了它的SSL。但是,您可以尝试测试exec'd进程的返回代码,而不只是假设它工作。@EJP我知道这一点。我会将此证书添加到特定客户端的信任存储中。我会查一下返回码的,好主意。
System.setProperty("javax.net.ssl.keyStore", KEYSTORE);
System.setProperty("javax.net.ssl.keyStorePassword", keyStorePassword);