web-dev-qa-db-ja.com

SecureRandomのためTomcat 7.0.57での起動が遅い

CentOS 6.6 32ビットおよびopenJDK7でTomcat 7.0.57を使用しています。サーバー(実稼働環境)でTomcatの14の異なるインスタンスを起動すると、それらの多くは起動に時間がかかりすぎます。

これはスタートアップログの一部であり、常にどこで処理されているかを示します

Jan 28, 2015 2:49:41 PM org.Apache.catalina.util.SessionIdGenerator createSecureRandom
INFO: Creation of SecureRandom instance for session ID generation using [SHA1PRNG] took [199,620] milliseconds.

この問題のベストプラクティス/解決策は何ですか?

ありがとう!

24

/ dev/randomにそれらを供給するのに十分なエントロピーがないため、安全なランダム呼び出しはブロックしている可能性があります。

回線がある場合

securerandom.source=file:/dev/random

/jre/lib/security/Java.securityで、これをurandomに変更すると、状況が改善される可能性があります(おそらくこれは既にデフォルトです)。

または、ここでプールに給餌する方法に関するいくつかの提案があります

https://security.stackexchange.com/questions/89/feeding-dev-random-entropy-pool

13
henry

同じ問題に直面しました issue Tomcatが遅すぎて起動できません。 DigitalOceanに関するこの記事 に従い、urandomを使用する代わりにhavegedをインストールしました。

havegedは、セキュリティを損なうことのないソリューションです。

havegedを使用すると、プロセッサでのコード実行時間の変動に基づいてランダム性を生成できます。同じハードウェア上の同じ環境であっても、1つのコードで同じ正確な時間を実行することはほぼ不可能なので、1つまたは複数のプログラムを実行するタイミングは、ランダムソースをシードするのに適しているはずです。 haveged実装は、ループを繰り返し実行した後、プロセッサのタイムスタンプカウンター(TSC)の違いを使用して、システムのランダムソース(通常は/ dev/random)をシードします。

Havegedのインストール方法

この記事の手順に従ってください。 https://www.digitalocean.com/community/tutorials/how-to-setup-additional-entropy-for-cloud-servers-using-haveged

投稿しました こちら

18
so-random-dude

ヘンリーの答えに従って、Tomcatだけを調整するための具体的な手順を次に示します。

/etc/Tomcat/fastersecurerandom.propertiesを作成

securerandom.source=file:/dev/urandom

Java_OPTS内の/etc/Tomcat/tomcat.confを編集します

Java_OPTS="-Djava.security.properties=/etc/Tomcat/fastersecurerandom.properties"

参考までに、コメントアウトされた例にもかかわらず、複数のJava_OPTSJava_OPTS="$Java_OPTS ..."で設定できないことがわかりました。 /var/log/messagesの警告に従って、古い混乱したTomcat 7が起動しない

異なるバージョン/フレーバーでは、Tomcatの環境変数を設定するのに最適な場所のバリエーションが見つかる場合があります。それらが影響を及ぼしているかどうかをデバッグする最良の方法は、次のように実行されているコマンドをチェックすることです。

$ ps aux | grep Java
Tomcat    4821  4.7 13.9 2626888 263396 ?      Ssl  22:31   0:23 /usr/lib/jvm/jre/bin/Java -DJENKINS_HOME=/opt/jenkins/ -Xmx512m -Djava.net.preferIPv4Stack=true -Djava.net.preferIPv4Addresses=true -Djava.security.properties=/etc/Tomcat/fastersecurerandom.properties -classpath /usr/share/Tomcat/bin/bootstrap.jar:/usr/share/Tomcat/bin/Tomcat-juli.jar:/usr/share/Java/commons-daemon.jar -Dcatalina.base=/usr/share/Tomcat -Dcatalina.home=/usr/share/Tomcat -Djava.endorsed.dirs= -Djava.io.tmpdir=/var/cache/Tomcat/temp -Djava.util.logging.config.file=/usr/share/Tomcat/conf/logging.properties -Djava.util.logging.manager=org.Apache.juli.ClassLoaderLogManager org.Apache.catalina.startup.Bootstrap start
3
KCD

上記の@KCDの答​​えはほとんど私のために働いた、私はそれを少しマッサージする必要がありました-次のように:

1)私のTomcatは_Tomcat7_だったので、_fastersecurerandom.properties_ディレクトリに_/etc/Tomcat7_ファイルを作成し、

2) 別のページ に従って、_fastersecurerandom.properties_の内容を変更する必要がありました

_securerandom.source=file:/dev/urandom_

_securerandom.source=file:/dev/./urandom_

3)_Tomcat.conf_ファイルがなかったので、行の直前に_/etc/init.d/Tomcat7_(Tomcatの起動スクリプト-知っています)を追加しました-catalina_sh() {

_Java_OPTS="$Java_OPTS -Djava.security.properties=/etc/Tomcat7/fastersecurerandom.properties"_

注:ここでもTomcatに_7_を追加しました。

_ps -deaf | grep Tomcat_を実行して、最初に新しい_-D_設定がコマンドに到達していることを確認し、正しいファイルを参照していること、およびファイルがそこにあることを確認することは価値がありました。これは、_7_が欠落していることに気づいたときです。

私はJava 1.7、およびUbuntu 14.04.1。

0
nby

ファイルを変更する代わりにJava.security直接、少なくともJava 8では、以下のシステムプロパティを既にサポートすることを文書化しています:

-Djava.security.egd=file:/dev/random

Tomcatのコンテキストでは、これを使用してファイルを作成できますbin/setenv.sh次の行を含む:

CATALINA_OPTS=-Djava.security.egd=file:///dev/urandom
0

以下の/jre/lib/security/Java.securityを変更しました:securerandom.source = file:/ dev /./ urandom

0
刘同彬