SecureRandom.nextBytes trava threads de solicitação no AEM

Problema

Segmentos de bloqueio em java.security.SecureRandom.nextBytes que fazer o aplicativo AEM travar:

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 é um problema conhecido [1] em sistemas Linux onde o /dev /random fica sem "entropy" e faz com que o sistema bloqueie threads.

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

Resolução

  1. A solução mais fácil é instalar haveged para o sistema operacional Linux. Esse processo garante que o dispositivo /dev/random seja fornecido com aleatoriedade suficiente para evitar problemas de desempenho.

    Em plataformas baseadas em Debian (Debian, Ubuntu):

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

    Em plataformas Redhat (RHEL, Fedora, CentOS):

    sudo yum install rng-tools
    sudo chkconfig haveged on
  2. Outra solução é usar /dev /urandom em vez de /dev /random. No entanto, tem o lado negativo da segurança reduzida devido a menos aleatoriedade.

    • Edite $JAVA_HOME/jre/lib/security/java.security
    • Modifique esta linha:
    securerandom.source=file:/dev/random

    para

    securerandom.source=file:/dev/urandom
  3. Soluções alternativas podem ser encontradas aqui.

 Adobe

Receba ajuda com mais rapidez e facilidade

Novo usuário?