Java SSLContext.init () зависает при вызове с OpenJDK 13 + 14 на Linux - PullRequest
0 голосов
/ 04 апреля 2020

У меня есть небольшой фрагмент кода, который является частью более крупного приложения, которое я сейчас разрабатываю. При выполнении на Windows 10 с обоими OpenJDK 13 и 14 это работает просто отлично. Но при выполнении на Linux с OpenJDK 13 или 14 - метод 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;
    }

1 Ответ

1 голос
/ 06 апреля 2020

Я переключил эту строку (в примере кода выше):

SecureRandom instanceStrong = SecureRandom.getInstanceStrong();

На эту строку

SecureRandom instanceStrong = SecureRandom.getInstance("NativePRNGNonBlocking");

И теперь я могу получить Undertow и работать на Linux тоже ! Кажется, было блокирующим характером SecureRandom.getInstanceStrong (), который вызвал проблему.

Большое спасибо за предложение, где искать @andrewjames !!

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...