Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/linux/26.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 SSLContext.init()在使用OpenJDK 13+调用时挂起;14在Linux上_Java_Linux_Ssl - Fatal编程技术网

Java SSLContext.init()在使用OpenJDK 13+调用时挂起;14在Linux上

Java SSLContext.init()在使用OpenJDK 13+调用时挂起;14在Linux上,java,linux,ssl,Java,Linux,Ssl,我有一小段代码,它是我目前正在开发的一个更大的应用程序的一部分。当在Windows10上同时使用OpenJDK13和14时,它运行得很好。但是,当使用OpenJDK13或14在Linux上执行时,SSLContext.init()方法就会挂起。它永远不会结束。没有异常,没有错误消息。是否有人对可能出现的问题有解决方案或想法 // SSSLContext for enabling Undertow server HTTPS SSLContext context; try{

我有一小段代码,它是我目前正在开发的一个更大的应用程序的一部分。当在Windows10上同时使用OpenJDK13和14时,它运行得很好。但是,当使用OpenJDK13或14在Linux上执行时,SSLContext.init()方法就会挂起。它永远不会结束。没有异常,没有错误消息。是否有人对可能出现的问题有解决方案或想法

// SSSLContext for enabling Undertow server HTTPS
    SSLContext context;
    try{
        System.out.println("Keystore loading");
        var keyStore = KeyStore.getInstance(new File("./bin/keystore.pkcs12"), "123456".toCharArray());
        System.out.println("Keystore loaded");

        System.out.println("Creating KeyManagerFactory");
        KeyManagerFactory keyManagerFactory = KeyManagerFactory.getInstance(KeyManagerFactory.getDefaultAlgorithm());
        keyManagerFactory.init(keyStore, "123456".toCharArray());
        KeyManager[] keyManagers = keyManagerFactory.getKeyManagers();
        System.out.println("KeyManagerFactory created");

        System.out.println("Initializing SSLContext");
        System.out.println("Creating SecureRandom");
        SecureRandom instanceStrong = SecureRandom.getInstanceStrong();
        System.out.println("SecureRandom created");
        System.out.println("Creating SSLContext");
        context = SSLContext.getInstance("TLS");
        System.out.println("SSLContext created");
        **context.init(keyManagers, null, instanceStrong);**
        System.out.println("SSLContext KeyManagers set");
        System.out.println("SSLContext initialized");
    } catch (Exception e) {
        System.out.println("Error initializing SSLContext: " + e.getMessage());
        e.printStackTrace();
        return;
    }
我切换了这一行(在上面的代码示例中):

这条线

SecureRandom instanceStrong = SecureRandom.getInstance("NativePRNGNonBlocking");
现在我也可以在Linux上运行了!似乎是SecureRandom.getInstanceStrong()的阻塞特性导致了问题


非常感谢你建议去哪里找@andrewjames

实际代码中不存在context.init(…)前后的**。当我试图将这行加粗时,它是由Stackoverflow插入的。我用Ubuntu 16.02、18.04和Fedora 31都试过。同样的结果。如果有帮助,请参阅注释-具体地说:根据实现情况,generateSeed和nextBytes方法可能会在收集熵时阻塞,例如,如果它们需要在各种类似Unix的操作系统上读取/dev/random。可能的尝试选项:使用
uradom
-查看或尝试使用
-Djava.security.egd=file:/dev//uradom
启动JVM。我现在尝试在添加了-D命令行选项的情况下运行,但SSLContext.init()方法调用仍然会永远阻塞。没有消息,没有例外。很好!以前从没见过这个。我想这就是你想知道名字的地方?事实上不是,虽然我可以从那里知道。我在某个地方的某个博客帖子上发现了这个问题,之前我处理了一段时间。我想我一找到它就会和你分享。
SecureRandom instanceStrong = SecureRandom.getInstance("NativePRNGNonBlocking");