Problema

Los procesos se bloquean en java.security.SecureRandom.nextBytes lo que hace que la aplicación AEM se cuelgue:

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

Este es un problema conocido [1] en sistemas Linux donde el /dev/random se queda sin "entropy" y hace que el sistema bloquee los procesos.

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

Resolución

  1. La solución más sencilla es instalar haveged en el sistema operativo Linux. Este proceso asegura que el dispositivo /dev/random se suministra con suficiente aleatoriedad para evitar problemas de rendimiento.

    En plataformas basadas en Debian (Debian, Ubuntu):

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

    En plataformas Redhat (RHEL, Fedora, CentOS):

    sudo yum install rng-tools
    sudo chkconfig haveged on
  2. Otra solución es usar /dev/urandom en lugar de /dev/random. Sin embargo, tiene el inconveniente de la reducción de la seguridad debido a la menor aleatoriedad.

    • Editar $JAVA_HOME/jre/lib/security/java.security
    • Modificar esta línea:
    securerandom.source=file:/dev/random

    para

    securerandom.source=file:/dev/urandom
  3. Soluciones alternativas se pueden encontrar aquí.

Esta obra está autorizada con arreglo a la licencia de Reconocimiento-NoComercial-CompartirIgual 3.0 Unported de Creative Commons.  Los términos de Creative Commons no cubren las publicaciones en Twitter™ y Facebook.

Avisos legales   |   Política de privacidad en línea