java - diferencias - tomcat vs jetty
java slow: problema relacionado con la entropĂa (2)
Esto es en realidad un truco introducido en la JVM en 1.3 o 1.4 días
http://bugs.sun.com/view_bug.do?bug_id=4705093
http://bugs.sun.com/view_bug.do?bug_id=6202721
El problema básico es que en el código JVM nativo codificaban /dev/urandom
para usar realmente /dev/random
para intentar asegurar suficiente entropía. Como se supone que /dev/urandom
se debe garantizar que no se bloquee, esto tiene la consecuencia involuntaria de bloqueo si no hay suficiente entropía disponible.
La hardcoding busca específicamente la cadena /dev/urandom
, por lo que proporciona algo que se resuelve en la misma cosa pero no coincide, lo que causa el comportamiento deseado. Si codifica /dev/./urandom
el alias de codificación fija y llega a la fuente de entropía urandom
deseada.
Me encuentro con un problema donde java es lento cuando se usa sobre SSL. La solución es agregar
-Djava.security.egd=file:/dev/./urandom a java en la línea de comando. Como tengo varias JVM, no quiero modificar cada JVM para que contenga esta cadena y, por lo tanto, me gustaría agregarla al archivo
$JAVA_HOME/jre/lib/security/java.security
Ahora, el archivo java.security ya contiene
securerandom.source=file:/dev/urandom
Dos preguntas sobre esto:
- Por qué y cómo es "/ dev / urandom" diferente de "/dev/./urandom". Por qué java no acepta "/ dev / urandom"
- Para las JVM que tengo en ejecución, ¿cómo puedo saber si están usando el dispositivo urandmon correcto (al azar)?
No recomendaría usar urandom para SSL. Su problema es que su máquina no tiene suficiente entropía y usar urandom no resuelve este problema. Asumiendo su en Linux puede verificar la entropía disponible con:
cat /proc/sys/kernel/random/entropy_avail
Si está en una máquina que tiene un generador de números aleatorios hw, lo más probable es que desee instalar rngd. Puede verificar si su CPU tiene uno al emitir el comando:
cat /proc/cpuinfo
Busque banderas llamadas rand . También puede verificar si el archivo / dev / hwrng está presente. Puede tener / querer cargar el módulo correspondiente:
ls /lib/modules/*/kernel/drivers/char/hw_random
Para mí esto es:
sudo modprobe tpm-rng
Para hacerlo permanente:
echo tpm-rng | sudo tee -a /etc/modules
Si usted está en Ubuntu / Debian solo instale el paquete rng-tools.
sudo aptitude install rng-tools
Si revisa su entropía antes y después de instalar las herramientas rng, verá un aumento significativo.
El siguiente comando debería mostrarle las fuentes de entropía disponibles:
sudo rngd -f -r /dev/hwrng -v
Tenga en cuenta que si necesita una mejor seguridad, desea mezclar varias fuentes de entropía. No estoy seguro de que rng-tools lo admita.