web-dev-qa-db-fra.com

Démarrage lent sur Tomcat 7.0.57 à cause de SecureRandom

J'utilise Tomcat 7.0.57 sur CentOS 6.6 32 bits et openJDK7 . Lorsque je lance 14 instances différentes de Tomcat sur mon serveur (environnement de production), beaucoup d'entre elles prennent trop de temps à démarrer.

Cela fait partie du journal de démarrage, qui me dit où prend tout le temps

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.

Quelle est la meilleure pratique/solution à ce problème?

Merci!

20
Jose Monreal Bailey

Les appels aléatoires sécurisés peuvent être bloquants car il n’ya pas assez d’entropie pour les alimenter dans/dev/random.

Si vous avez la ligne 

securerandom.source=file:/dev/random

dans /jre/lib/security/Java.security, changer cela en urandom peut améliorer les choses (bien que ce soit probablement déjà la valeur par défaut).

Alternativement, il y a quelques suggestions sur la façon de nourrir la piscine ici

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

9
henry

J'ai rencontré le même problème Tomcat étant trop lent pour commencer. J'ai suivi cet article sur DigitalOcean et ai installé au lieu d'utiliser urandom. 

hasged est une solution qui ne compromettra pas la sécurité.

haveged permet de générer un caractère aléatoire en fonction des variations de temps d'exécution du code sur un processeur. Comme c'est presque impossible pour un morceau de code à prendre le même temps exact pour exécuter, même dans le même environnement sur le même matériel, le moment d’exécuter un seul ou plusieurs programmes devraient convenir pour ensemencer une source aléatoire. Le ont généré les sources d'implémentation de la source aléatoire de votre système (généralement /dev/random) en utilisant des différences dans le compteur d'horodatage de votre processeur (TSC) après avoir exécuté une boucle à plusieurs reprises

Comment installer asged

Suivez les étapes décrites dans cet article. _ { https://www.digitalocean.com/community/tutorials/how-to-setup-addopy-entropy-for-cloud-servers-using-haveged }

Je l'ai posté ici

14
so-random-dude

Voici quelques instructions spécifiques pour ajuster uniquement Tomcat selon la réponse de Henry

créer /etc/Tomcat/fastersecurerandom.properties

securerandom.source=file:/dev/urandom

éditer Java_OPTS à l'intérieur /etc/Tomcat/tomcat.conf

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

FYI j'ai trouvé que je ne pouvais pas définir plusieurs Java_OPTS avec Java_OPTS="$Java_OPTS ..." malgré les exemples commentés. Pauvre et vieux confus Tomcat 7 ne pourrait pas démarrer conformément à un avertissement dans /var/log/messages

Sur différentes versions/versions, vous pouvez trouver des variantes permettant de définir les variables d’environnement pour Tomcat. Le meilleur moyen de déboguer s’ils prennent effet est de vérifier la commande en cours d’exécution:

$ 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

La réponse de @KCD ci-dessus a presque fonctionné pour moi, j’avais besoin de la masser un peu - comme suit:

1) mon Tomcat était Tomcat7, j'ai donc créé mon fichier fastersecurerandom.properties dans le répertoire /etc/Tomcat7,

2) Selon une autre page , je devais changer le contenu de fastersecurerandom.properties De 

securerandom.source=file:/dev/urandom

à

securerandom.source=file:/dev/./urandom

3) Je n'avais pas de fichier Tomcat.conf, alors j'ai ajouté à mon /etc/init.d/Tomcat7 (script de démarrage de Tomcat - je sais), juste avant la ligne - catalina_sh() {

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

Notez que j'ai ajouté 7 à Tomcat ici aussi.

Cela valait la peine de faire un ps -deaf | grep Tomcat pour confirmer d’abord que le nouveau paramètre -D était en train de parvenir à la commande, ainsi que pour vérifier qu’il faisait référence au bon fichier et que le fichier était présent. C'est à ce moment-là que j'ai remarqué le 7 manquant.

J'étais sur Java 1.7 et sur Ubuntu 14.04.1.

0
nby

J'ai changé /jre/lib/security/Java.security, ci-dessous: Securerandom.source = fichier:/dev /./urandom

0
刘同彬