Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/379.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java SSLServerSocket抛出EOFEException_Java_Ssl_Certificate_Serversocket - Fatal编程技术网

Java SSLServerSocket抛出EOFEException

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

我目前正在尝试在我的程序中实现SSL连接。但当我现在尝试启动它时,会在堆栈跟踪的顶部抛出一个NoSuchAlgorithmException

以下是完整的堆栈跟踪:

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);