Подтвердить что ты не робот

Более быстрый случайный генератор в Tomcat 7

У меня проблема с тем, что Tomcat 7 ужасно медленный при запуске. Я нашел это в файле журнала:

INFO: Creation of SecureRandom instance for session ID generation using [SHA1PRNG] took [12,367] milliseconds.

Безопасность важна, конечно, но не на моей машине разработки. Я мог отлично жить со стандартным быстрым генератором случайных чисел. Поэтому мне не нужна эта смехотворная медленная реализация SecureRandom.

Вопрос: как его отключить? Выполняется поиск решения, но найдена только некорректная информация об атрибуте randomClass, который может быть установлен на java.util.Random. Я также узнал, что этот атрибут теперь называется secureRandomClass теперь в Tomcat 7. Я попытался установить его на java.util.Random, но это не удается, потому что Tomcat 7 бросает объект в java.util.SecureRandom(И он также задокументировал, что указанный класс должен расширять java.util.SecureRandom, поэтому больше не возможно использовать java.util.Random.)

Итак, как я могу избавиться от этого чересчур медленного запуска генератора случайных чисел, так что мой tomcat запускается как можно быстрее?

4b9b3361

Ответ 1

Вероятно, вам нужно исправить Tomcat.

Хотя в качестве взлома вы всегда можете попробовать расширить java.util.SecureRandom с чем-то, что обертывает стандартный java.util.Random экземпляр....... это, по крайней мере, пройдет мимо проблемы с литой.

Еще одна мысль... может ли замедление быть из-за истощенного пула энтропии? Возможно, вам захочется попытаться получить больше энтропии в пул, это может привести к очень быстрому ходу.

Ответ 2

В соответствии с TomCat Wiki вы можете использовать источник неблокирующей энтропии:

"Существует возможность настроить JRE на использование неблокирующего источника энтропии, установив следующее системное свойство: -Djava.security.egd=file:/dev/./urandom"

Ответ 3

Вам может потребоваться установить на ваш сервер.

Tomcat использует SecureRandom для создания безопасного id при запуске, а SecureRandom использует /dev/random или /dev/urandom для генерации случайное число.

В некоторой безлимитной среде linux пулы энтропий /dev/random могут создавать низкое качество случайности и очень медленно реагировать на генерирование случайного числа.

Есть хорошая статья об объяснении того, как Хеджировать может решить эту проблему.

how-to-setup-additional-entropy-for-cloud-servers-using-haveged

Ответ 4

просто найдите securerandom.source=... из $JAVA_PATH/jre/lib/security/java.security файла и измените его как securerandom.source=file:/dev/./urandom

fooobar.com/questions/7080/...

Ответ 5

Если ваше устройство поддерживает его, попробуйте использовать утилиту Java RdRand, доступную по адресу: http://code.google.com/p/lizalab-rdrand-util/

Он основан на инструкции Intel RDRAND и примерно в 10 раз быстрее SecureRandom и не имеет проблем с пропускной способностью для реализации большого объема.

Полное раскрытие, я автор утилиты.

Ответ 6

Старая проблема, но все же вокруг... В моем случае со встроенным Tomcat.

Решение -Djava.security.egd=file:/dev/./urandom не работает для меня. Таким образом, я googled до понимание проблемы, но после нескольких тестов с lsof было очевидно, что обходной путь больше не работает. Быстрый посмотреть код подтвердил, что текущая реализация игнорирует это системное свойство.

Проблема заключается в блокировании Tomcat на /dev/random, поэтому я искал способы добавления энтропии в систему и нашел этот ответ, который работал отлично! В Debian как root:

apt-get install rng-tools
rngd -r /dev/urandom     # Run once during system start up

Это может быть не супер-пупер-безопасный, но, на мой взгляд, этого достаточно для генерации идентификатора сеанса.

Кстати, я закончил работу с Jetty. Гораздо быстрее, если вам не нужны все функции Tomcat.