真实的国产乱ⅩXXX66竹夫人,五月香六月婷婷激情综合,亚洲日本VA一区二区三区,亚洲精品一区二区三区麻豆

成都創(chuàng)新互聯(lián)網(wǎng)站制作重慶分公司

Tomcat啟動時SecureRandom非常慢怎么辦-創(chuàng)新互聯(lián)

小編給大家分享一下Tomcat啟動時SecureRandom非常慢怎么辦,相信大部分人都還不怎么了解,因此分享這篇文章給大家參考一下,希望大家閱讀完這篇文章后大有收獲,下面讓我們一起去了解一下吧!

網(wǎng)站建設(shè)哪家好,找創(chuàng)新互聯(lián)建站!專注于網(wǎng)頁設(shè)計、網(wǎng)站建設(shè)、微信開發(fā)、重慶小程序開發(fā)、集團企業(yè)網(wǎng)站建設(shè)等服務(wù)項目。為回饋新老客戶創(chuàng)新互聯(lián)還提供了蒲江縣免費建站歡迎大家使用!

Tomcat 啟動時 SecureRandom 非常慢解決辦法

最近使用阿里云的 Ubuntu 16.04 ESC 服務(wù)器運行 Tomcat 時發(fā)現(xiàn),Tomcat 啟動的特別慢,通過查看日志,發(fā)現(xiàn)時間主要花在實例化 SecureRandom 對象上了。

Tomcat啟動時SecureRandom非常慢怎么辦

由該日志可以看出,實例化該對象使用了253秒,導(dǎo)致整個應(yīng)用啟動了275秒之久。

注意這條日志:

org.apache.catalina.util.SessionIdGeneratorBase.createSecureRandom Creation of 
SecureRandom instance for session ID generation using [SHA1PRNG] took [253,251] milliseconds.

根本原因是 SecureRandom 這個 jre 的工具類的問題。那為什么 SecureRandom generateSeed 這么慢,甚至掛在 Linux 操作系統(tǒng)呢?

Tomcat 7/8 都使用 org.apache.catalina.util.SessionIdGeneratorBase.createSecureRandom 類產(chǎn)生安全隨機類 SecureRandom 的實例作為會話 ID。

Tomcat 使用 SHA1PRNG 算法是基于 SHA-1 算法實現(xiàn)且保密性較強的偽隨機數(shù)生成器。

在 SHA1PRNG 中,有一個種子產(chǎn)生器,它根據(jù)配置執(zhí)行各種操作。

Linux 中的隨機數(shù)可以從兩個特殊的文件中產(chǎn)生,一個是 /dev/urandom,另外一個是 /dev/random。他們產(chǎn)生隨機數(shù)的原理是利用當(dāng)前系統(tǒng)的熵池來計算出固定一定數(shù)量的隨機比特,然后將這些比特作為字節(jié)流返回。熵池就是當(dāng)前系統(tǒng)的環(huán)境噪音,熵指的是一個系統(tǒng)的混亂程度,系統(tǒng)噪音可以通過很多參數(shù)來評估,如內(nèi)存的使用,文件的使用量,不同類型的進程數(shù)量等等。如果當(dāng)前環(huán)境噪音變化的不是很劇烈或者當(dāng)前環(huán)境噪音很小,比如剛開機的時候,而當(dāng)前需要大量的隨機比特,這時產(chǎn)生的隨機數(shù)的隨機效果就不是很好了。

這就是為什么會有 /dev/urandom 和 /dev/random 這兩種不同的文件,后者在不能產(chǎn)生新的隨機數(shù)時會阻塞程序,而前者不會(ublock),當(dāng)然產(chǎn)生的隨機數(shù)效果就不太好了,這對加密解密這樣的應(yīng)用來說就不是一種很好的選擇。/dev/random 會阻塞當(dāng)前的程序,直到根據(jù)熵池產(chǎn)生新的隨機字節(jié)之后才返回,所以使用 /dev/random 比使用 /dev/urandom 產(chǎn)生大量隨機數(shù)的速度要慢。

SecureRandom generateSeed  使用 /dev/random 生成種子。但是 /dev/random 是一個阻塞數(shù)字生成器,如果它沒有足夠的隨機數(shù)據(jù)提供,它就一直等,這迫使 JVM 等待。鍵盤和鼠標(biāo)輸入以及磁盤活動可以產(chǎn)生所需的隨機性或熵。但在一個服務(wù)器缺乏這樣的活動,可能會出現(xiàn)問題。

有2種解決方案:

1. 在Tomcat環(huán)境中解決:

可以通過配置 JRE 使用非阻塞的 Entropy Source:

在 catalina.sh 中加入這么一行:-Djava.security.egd=file:/dev/./urandom 即可。

2. 在 JVM 環(huán)境中解決:

打開 $JAVA_PATH/jre/lib/security/java.security 這個文件,找到下面的內(nèi)容:

securerandom.source=file:/dev/random

替換成:

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

這里值為何要在 dev 和 random 之間加一個點呢?是因為一個 JDK 的 bug,有人反饋即使對 securerandom.source 設(shè)置為 /dev/urandom 它也仍然使用的 /dev/random,有人提供了變通的解決方法,其中一個變通的做法是對 securerandom.source 設(shè)置為 /dev/./urandom 才行。也有人評論說這個不是 bug,是有意為之。

在 JDK 7 的 java.security 文件里,配置里的是:

# Select the source of seed data for SecureRandom. By default an
# attempt is made to use the entropy gathering device specified by
# the securerandom.source property. If an exception occurs when
# accessing the URL then the traditional system/thread activity
# algorithm is used.
#
# On Solaris and Linux systems, if file:/dev/urandom is specified and it
# exists, a special SecureRandom implementation is activated by default.
# This "NativePRNG" reads random bytes directly from /dev/urandom.
#
# On Windows systems, the URLs file:/dev/random and file:/dev/urandom
# enables use of the Microsoft CryptoAPI seed functionality.
#
securerandom.source=file:/dev/urandom

但這個 /dev/urandom 也同那個 bug 報告里所說的等同于 /dev/random;要使用非阻塞的熵池,這里還是要修改為 /dev/./urandom。經(jīng)測試,貌似 JDK 7 并沒有同注釋里的意思修復(fù)了這個問題。

以上是“Tomcat啟動時SecureRandom非常慢怎么辦”這篇文章的所有內(nèi)容,感謝各位的閱讀!相信大家都有了一定的了解,希望分享的內(nèi)容對大家有所幫助,如果還想學(xué)習(xí)更多知識,歡迎關(guān)注創(chuàng)新互聯(lián)成都網(wǎng)站設(shè)計公司行業(yè)資訊頻道!

另外有需要云服務(wù)器可以了解下創(chuàng)新互聯(lián)scvps.cn,海內(nèi)外云服務(wù)器15元起步,三天無理由+7*72小時售后在線,公司持有idc許可證,提供“云服務(wù)器、裸金屬服務(wù)器、高防服務(wù)器、香港服務(wù)器、美國服務(wù)器、虛擬主機、免備案服務(wù)器”等云主機租用服務(wù)以及企業(yè)上云的綜合解決方案,具有“安全穩(wěn)定、簡單易用、服務(wù)可用性高、性價比高”等特點與優(yōu)勢,專為企業(yè)上云打造定制,能夠滿足用戶豐富、多元化的應(yīng)用場景需求。


名稱欄目:Tomcat啟動時SecureRandom非常慢怎么辦-創(chuàng)新互聯(lián)
鏈接分享:http://weahome.cn/article/deppgh.html

其他資訊

在線咨詢

微信咨詢

電話咨詢

028-86922220(工作日)

18980820575(7×24)

提交需求

返回頂部