springboot集成kaptcha驗證碼後,在服務器上首次訪問驗證碼、啓動慢

提示信息:
Creation of SecureRandom instance for session ID generation using [SHA1PRNG] took [612,537] milliseconds.

一般來說springboot啓動只要幾秒鐘就可以正常訪問了,但是部署到服務器上,訪問花了2-6分鐘,甚至更多,而且只是集成了kaptcha纔出現的問題,最後終於找到了解決辦法如下:

打開$JAVA_PATH/jre/lib/security/java.security這個文件,找到下面的內容:
securerandom.source=file:/dev/urandom
替換成
securerandom.source=file:/dev/./urandom

最後問題解決

原因如下

SHA1PRNG算法是基於SHA-1算法實現且保密性較強的僞隨機數生成器。 在SHA1PRNG中,有一個種子產生器,它根據配置執行各種操作。
1)如果Java.security.egd屬性或securerandom.source屬性指定的是”file:/dev/random”或”file:/dev/urandom”,那麼JVM會使用本地種子產生器NativeSeedGenerator,它會調用super()方法,即調用SeedGenerator.URLSeedGenerator(/dev/random)方法進行初始化。
2)如果java.security.egd屬性或securerandom.source屬性指定的是其它已存在的URL,那麼會調用SeedGenerator.URLSeedGenerator(url)方法進行初始化。
這就是爲什麼我們設置值爲”file:///dev/urandom”或者值爲”file:/./dev/random”都會起作用的原因。
在這個實現中,產生器會評估熵池(entropy
pool)中的噪聲數量。隨機數是從熵池中進行創建的。當讀操作時,/dev/random設備會只返回熵池中噪聲的隨機字節。/dev/random非常適合那些需要非常高質量隨機性的場景,比如一次性的支付或生成密鑰的場景。
當熵池爲空時,來自/dev/random的讀操作將被阻塞,直到熵池收集到足夠的環境噪聲數據。這麼做的目的是成爲一個密碼安全的僞隨機數發生器,熵池要有儘可能大的輸出。對於生成高質量的加密密鑰或者是需要長期保護的場景,一定要這麼做。
那麼什麼是環境噪聲?
隨機數產生器會手機來自設備驅動器和其它源的環境噪聲數據,並放入熵池中。產生器會評估熵池中的噪聲數據的數量。當熵池爲空時,這個噪聲數據的收集是比較花時間的。這就意味着,Tomcat在生產環境中使用熵池時,會被阻塞較長的時間。

爲linux操作不熟悉的小夥伴提供倆個不錯的linux教程

馬哥Linux高端運維雲計算就業班

Linux雲計算高端架構師+DevOps高級虛擬化高級進階課程

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章