Tomcat занимает слишком много времени, чтобы начать - Java SecureRandom
Пожалуйста, не отмечайте это как дубликат. Это дополнительный вопрос для обоих этих вопросов.
- Tomcat7 запускается слишком поздно в Ubuntu 14.04 x64 [Digitalocean]
- /questions/7416506/kak-reshit-medlennuyu-java-securerandom/7416519#7416519
Я так понимаю, заменив
securerandom.source=file:/dev/urandom
с
securerandom.source=file:/dev/./urandom
в $JAVA_PATH/jre/lib/security/java.security
решит эту проблему.
У меня вопрос, нормально ли это делать в производстве? Повлияет ли это на безопасность (например, идентификатор сессии становится предсказуемым)? Если это менее безопасно, есть ли другой способ дать достаточно энтропии быстрее?
Обновить
Я использую openstack для развертывания (или, скажем так, использует AWS или GCP или любого другого облачного провайдера). Таким образом, добавление аппаратного устройства, такого как звуковая карта, не вариант для меня.
2 ответа
После тщательного поиска в Google с правильными поисковыми терминами я наткнулся на эту прекрасную статью о DigitalOcean. Я просто цитирую соответствующую часть здесь.
В Linux есть два общих случайных устройства: /dev/random и /dev/urandom. Наилучшая случайность исходит от /dev/random, поскольку это блокирующее устройство, и он будет ждать, пока не станет доступной достаточная энтропия для продолжения предоставления вывода. Предполагая, что вашей энтропии достаточно, вы должны увидеть то же качество случайности из / dev / urandom; однако, поскольку это неблокирующее устройство, оно будет продолжать генерировать "случайные" данные, даже когда пул энтропии заканчивается. Это может привести к снижению качества случайных данных, так как повторы предыдущих данных более вероятны. Много плохого может случиться, когда доступная энтропия заканчивается на рабочем сервере, особенно когда этот сервер выполняет криптографические функции.
Таким образом, это потенциальный риск для безопасности.
Решение для заполнения энтропийных бассейнов
Linux уже получает случайные данные очень хорошего качества из разных аппаратных источников, но, поскольку у безголовой машины обычно нет клавиатуры или мыши, генерируется гораздо меньше энтропии. Дисковые и сетевые операции ввода / вывода представляют собой большинство источников генерации энтропии для этих машин, и они производят очень редкие количества энтропии. Поскольку очень немногие безголовые машины, такие как серверы или облачные серверы / виртуальные машины, имеют какое-либо выделенное аппаратное решение RNG, существует несколько пользовательских решений для генерации дополнительной энтропии с использованием аппаратных прерываний от устройств, которые "шумнее", чем жесткие диски, такие как видеокарты, звуковые карты и т. д. Это, к сожалению, является проблемой для серверов, поскольку они обычно не содержат ни одного
Решение: есть
Основанный на принципе HAVEGE и ранее основанный на его ассоциированной библиотеке, hasged позволяет генерировать случайность на основе изменений во времени выполнения кода на процессоре. Поскольку для одного куска кода практически невозможно выполнить одно и то же точное время, даже в одной и той же среде на одном и том же оборудовании, время запуска одной или нескольких программ должно быть подходящим для создания случайного источника. Реализация с хэджами отбирает случайный источник вашей системы (обычно /dev/random), используя различия в счетчике меток времени вашего процессора (TSC) после многократного выполнения цикла
Как установить hasged
Следуйте инструкциям в этой статье. https://www.digitalocean.com/community/tutorials/how-to-setup-additional-entropy-for-cloud-servers-using-haveged
Если у кого-то есть эта проблема
Я только что решил свою проблему, просто удалив все ОТКЛЮЧЕНИЯ отладчика.