問題点

AEM アプリケーションがハングする原因となる java.security.SecureRandom.nextBytes でスレッドがロックアップします。

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)

原因

これは、/dev/random で「エントロピー」が不足することによりシステムがスレッドをブロックするという Linux システム [1] での既知の問題です。

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

解決策

  1. 最も簡単な解決策は、Linux OS に haveged をインストールすることです。このプロセスでは、パフォーマンスの問題を回避するために、/dev/random デバイスが十分なランダムネスで提供されていることを確認します。

    Debian ベースのプラットフォーム(Debian、Ubuntu)の場合:

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

    Redhat プラットフォーム(RHEL、Fedora、CentOS)の場合:

    sudo yum install rng-tools
    sudo chkconfig haveged on
  2. 別の解決策は、/dev/random の代わりに /dev/urandom を使用することです。ただし、ランダムネスが低いため、低下したセキュリティのダウンサイドがあります。

    • $JAVA_HOME/jre/lib/security/java.security の編集
    • この行を次のように変更します。
    securerandom.source=file:/dev/random

    Adobe ID

    securerandom.source=file:/dev/urandom
  3. 別の解決策はここから確認できます。

本作品は Creative Commons Attribution-Noncommercial-Share Alike 3.0 Unported License によってライセンス許可を受けています。  Twitter™ および Facebook の投稿には、Creative Commons の規約内容は適用されません。

法律上の注意   |   プライバシーポリシー