SecureRandom.nextBytes blocca la richiesta di threads in AEM

Problema

I thread si bloccano in java.security.security.SecureRandom.nextBytes che causano la sospensione dell'applicazione AEM:

java.lang.Thread.State: BLOCKED (on object monitor)
at java.security.SecureRandom.nextBytes(SecureRandom.java:468)
- waiting to lock <0x0000000744cb6070> (a java.security.SecureRandom)
at org.bouncycastle.crypto.CipherKeyGenerator.generateKey(Unknown Source)
at org.bouncycastle.jcajce.provider.symmetric.util.BaseKeyGenerator.engineGenerateKey(Unknown Source)
at javax.crypto.KeyGenerator.generateKey(KeyGenerator.java:540)

Causa

Questo è un problema noto [1] nei sistemi Linux dove il /dev/random esaurisce "entropy" e fa sì che il sistema blocchi i thread.

[1] https://bugs.java.com/view_bug.do?bug_id=6708214

Risoluzione

  1. La soluzione più semplice è quella di installare haveged sul sistema operativo Linux. Questo processo assicura che il dispositivo /dev/random sia fornito con una casualità tale da evitare problemi di prestazioni.

    Su piattaforme basate su Debian (Debian, Ubuntu):

    sudo apt-get install rng-tools
    sudo update-rc.d haveged defaults

    Su piattaforme Redhat (RHEL, Fedora, CentOS):

    sudo yum install rng-tools
    sudo chkconfig haveged on
  2. Un'altra soluzione è quella di utilizzare /dev/urandom invece di /dev/random. Tuttavia, ha l'aspetto negativo della sicurezza ridotta a causa della minore casualità.

    • Modifica $JAVA_HOME/jre/lib/security/java.security
    • Modificare questa linea:
    securerandom.source=file:/dev/random

    in

    securerandom.source=file:/dev/urandom
  3. Soluzioni alternative possono essere trovate qui.

 Adobe

Ottieni supporto in modo più facile e veloce

Nuovo utente?