第一篇:JavaWeb學(xué)習(xí)篇之Tomcat中配置數(shù)字證書以及網(wǎng)絡(luò)傳輸數(shù)據(jù)的加密
JavaWeb學(xué)習(xí)篇之Tomcat中配置數(shù)字證書以及網(wǎng)絡(luò)傳輸數(shù)
據(jù)的加密
今天是學(xué)習(xí)JavaWeb的第二天,我們來了解什么呢?就了解一下Tomcat中配置數(shù)字證書的相關(guān)內(nèi)容,但是在說這部分內(nèi)容的時候,我們貌似得先說一下數(shù)字證書的相關(guān)概念,那說到數(shù)字證書的時候我們還得了解一些密碼學(xué)的相關(guān)知識,這就是連鎖反應(yīng)嗎?好吧不多說了,先來看一下密碼學(xué)中關(guān)于網(wǎng)絡(luò)中數(shù)據(jù)傳輸?shù)闹R。首先來了解一下網(wǎng)絡(luò)上傳輸數(shù)據(jù)的加密方式:
第一種是對稱加密:就是加密數(shù)據(jù)的密碼和解密數(shù)據(jù)的密碼是相同的。這種方式的優(yōu)點就是簡單,最大的缺點就是不安全,因為加密的密碼和解密的密碼是相同的,那么加密的人就必須將密碼告訴解密的人,在這個過程中就存在不安全了,怎么告訴都不安全,打電話怕人偷聽,寫信怕被人攔截。。而且只要拿到密碼就可以進(jìn)行解密數(shù)據(jù),這種方式也是不安全的。第二種是非對稱加密:就是加密數(shù)據(jù)的密碼和解密數(shù)據(jù)的密碼是不相同的,原理就是產(chǎn)生一對公鑰和私鑰,公鑰加密的數(shù)據(jù)只能私鑰解,私鑰加密的數(shù)據(jù)只能公鑰解,所以當(dāng)拿到公鑰加密的數(shù)據(jù),只能用私鑰解,公鑰是解不開的。下面我就來通過一個例子來說明一下這個過程: 角色:接收者,發(fā)送者,攔截者 名詞:CA機(jī)構(gòu),數(shù)字證書,數(shù)字簽名下面的就通過這張圖來解釋一下(這張圖花了我一個上午的時間,眼睛都看花了,一定要保證我的版權(quán)呀!):下面就來模擬集中情況來說明一下:第一種情況:接收者會生成一對公鑰和私鑰,并且將自己的公鑰發(fā)送給發(fā)送者,然后發(fā)送者用這個公鑰將需要發(fā)送的數(shù)據(jù)進(jìn)行加密,然后再將加密之后數(shù)據(jù)發(fā)送給接收者,這時候接收者只需要用私鑰進(jìn)行解密就可以得到發(fā)送者的數(shù)據(jù)了,在傳輸?shù)倪^程中即使有攔截者拿到了發(fā)送者發(fā)送的數(shù)據(jù)以及接收者的公鑰,他仍然不能得到原始內(nèi)容的,因為只能用私鑰進(jìn)行解密,而私鑰只有接收者有。如圖中的流程: 1-> 2-> 3-> 4-> 5第二種情況:對于第一種情況,想想就是天衣無縫了嗎?肯定不可能的了,現(xiàn)在有這種情況,有一個hacker,他攔截到接收者發(fā)送給發(fā)送者的公鑰,然后自己生成一對公鑰和私鑰,然后他把自己的公鑰發(fā)送給發(fā)送者,當(dāng)發(fā)送者拿到這個公鑰的時候(實際上他以為這還是接收者發(fā)送給他的公鑰),用這個公鑰進(jìn)行加密,然后發(fā)送給接收者,這時候hacker再次進(jìn)行攔截,然后hacker攔截到數(shù)據(jù)后,就用自己的私鑰進(jìn)行解密,就得到了原始數(shù)據(jù),而接收者得到內(nèi)容之后解密是失敗的,因為發(fā)送者發(fā)送的數(shù)據(jù)是用hacker的公鑰進(jìn)行加密的。如圖中的流程:-> 2(6-> 7)-> 3-> 4(8-> 9-> 10)-> 5第三種情況:對于第二種情況的話,難道我們也就沒有辦法了嗎?難道我們的信息只能無辜的被hacker進(jìn)行讀取嗎?當(dāng)然,道高一尺,魔高一丈,其實解決上面的問題的根本方法就是要讓發(fā)送者相信他接收到的公鑰是接收者發(fā)送的,而不是hacker發(fā)送的公鑰。這個解決辦法就是有一個中間的擔(dān)保人,擔(dān)保這個公鑰是接收者的,同時接收者需要事前找到這個擔(dān)保人說明一下。這時候就出現(xiàn)了一個機(jī)構(gòu):CA。這里的CA就是上面說到的擔(dān)保人,這個機(jī)構(gòu)一般是由政府機(jī)構(gòu)管理的。接收者產(chǎn)生一對公鑰和私鑰,然后拿著公鑰到CA機(jī)構(gòu)認(rèn)證說明一下,同時CA會頒發(fā)一份數(shù)字證書給接收者,其實這數(shù)字證書就是有CA認(rèn)證之后的公鑰。然后接收者就會將這份數(shù)字證書發(fā)送給發(fā)送者,當(dāng)發(fā)送者拿到這份數(shù)字證書的時候,會先到CA機(jī)構(gòu)去認(rèn)證一下,確定公鑰是不是接收者發(fā)送的。然后在用數(shù)字證書進(jìn)行數(shù)據(jù)加密,發(fā)送給接收者。如圖中的流程: 1-> 11-> 12-> 13-> 14-> 5第四種情況:對于第三種情況,難道hacker就沒辦法了嗎?說到這里可能有人會說,hacker可以生成一對公鑰和私鑰,然后到CA機(jī)構(gòu)認(rèn)證拿到數(shù)字證書,然后再攔截。這里就要說說這個CA機(jī)構(gòu)了,這個機(jī)構(gòu)是由政府管理的,不是什么人什么機(jī)構(gòu)想認(rèn)證就能認(rèn)證的,一般是銀行,商業(yè)性的機(jī)構(gòu)才有權(quán)認(rèn)證,同時認(rèn)證的時候也不是隨隨便便的,需要提供很多的信息的。這樣一說你認(rèn)為hacker有權(quán)利申請了嗎?他敢申請嗎?,所以這種方法就不行了。同時也說明了一點就是數(shù)字證書這東東可以防止hakcer攔截信息進(jìn)而解密信息。但是hacker不解密信息,但是他仍然可以干壞事,他可以篡改信息。如下情景:hacker攔截了接收者發(fā)送給發(fā)送者的數(shù)字證書,然后在攔截發(fā)送者使用數(shù)字證書加密的數(shù)據(jù),這時候不是為了解密,也解不了密,而是將這些信息保存或者丟棄,然后使用截取到的數(shù)字證書加密一段自己想發(fā)送給接收者的數(shù)據(jù),然后發(fā)送給接收者,這時候,接收者收到的加密數(shù)據(jù)其實是hacker的,而不是發(fā)送者發(fā)送的,如圖中的流程:-> 11-> 12(15)-> 13-> 14(16)-> 5第五種情況:對于第四種情況,難道我們有沒有辦法了嗎?我們的信息就任hacker進(jìn)行篡改,這肯定是不可能的,上有政策,下有對策。那我們該怎么辦呢?解決的思路就是接收者要驗證數(shù)據(jù)在傳輸?shù)倪^程中沒有被篡改過。那么這里又要說到一種技術(shù):數(shù)字簽名操作步驟:首先發(fā)送者也會生成一對公鑰和私鑰,同時向CA機(jī)構(gòu)得到一份數(shù)字證書,同時這時候發(fā)送者將要發(fā)送的數(shù)據(jù)使用私鑰進(jìn)行加密A,同時使用私鑰對數(shù)據(jù)的數(shù)據(jù)指紋(MD5)進(jìn)行加密(數(shù)字簽名)B,然后將A和B以及發(fā)送者的數(shù)字證書一起發(fā)送給接收者,接收者拿到數(shù)據(jù)之后: 第一步:然后向CA機(jī)構(gòu)驗證數(shù)字證書是不是發(fā)送者的,是的話,就用數(shù)字證書解密數(shù)據(jù)指紋(MD5)數(shù)據(jù)
第二步:使用數(shù)字證書解密發(fā)送者的數(shù)據(jù)
第三步:將第二步中得到的數(shù)據(jù)獲取一下指紋,和第一步中獲取到的數(shù)據(jù)指紋相比較,如果相等就表示發(fā)送內(nèi)容沒有被篡改,否則就被篡改了。這樣就可以防止信息發(fā)送的過程中防止被篡改了。以上是介紹完了網(wǎng)絡(luò)中傳輸數(shù)據(jù)中設(shè)計到的密碼學(xué)的知識,下面就來介紹一下使用Tomcat來進(jìn)行數(shù)字證書的配置:
首先我們使用Java自帶的一個命令生成一個密鑰庫keystore文件:
keytool-genkeypair-alias “tomcat”-keyalg “RSA”這里需要給密鑰庫配置密碼,然后是姓氏,這里面的這個姓氏就是給哪個網(wǎng)站配置數(shù)字證書,我們這里是localhost,這個信息一定要填寫正確,不然沒有效果的,其他的信息我們這里只做演示,所以可以不填的,按回車,最后輸入y,這時候就會在你的本機(jī)用戶目錄中生成一個.keystore文件。這個就是密鑰庫文件了。密鑰庫文件生成好了,接下來我們就來配置Tomcat文件了,找到server.xml文件,打開:這時候我們將剛剛生成的.keystore放到conf文件夾下面,配置server.xml文件內(nèi)容如上圖所示,密碼就是剛剛生成.keystore文件時敲入的密碼。保存server.xml文件,然后重啟tomcat使用IE瀏覽器(Chrome看不到效果的),在地址欄中輸入:
https://localhost:8443 這里一定要使用https協(xié)議了,因為是加密訪問的,還有這里要使用8443端口了,因為我們要訪問我們的數(shù)字證書的連接器,在瀏覽器中看到:這時候IE瀏覽器會提示我們這個數(shù)字證書不是由CA機(jī)構(gòu)頒發(fā)的,不可信(因為IE瀏覽器中集成了這種數(shù)字證書的檢查機(jī)制),我們點擊繼續(xù)瀏覽此網(wǎng)站:這時候就可以連接到了數(shù)字證書連接器,同時可以看到地址欄的右邊多了一個圖標(biāo):說是證書錯誤,我們點擊這個圖標(biāo),他再次彈出一個提示,說這個證書不可靠,我們不管他了,點擊查看證書:這時候他還是提示我們這個證書不安全,看到頒發(fā)者是localhost了,這時候我們點擊安裝證書,安裝完成之后,到此為止我們就為我們自己的localhost網(wǎng)站安裝了我們自己的localhost的數(shù)字證書了。這樣用戶在訪問localhost網(wǎng)站的時候,用戶提交的數(shù)據(jù)就會使用我們安裝好的數(shù)字證書進(jìn)行加密了??偨Y(jié):上面就大體上說了一下網(wǎng)絡(luò)中傳輸數(shù)據(jù)中的相關(guān)加密的知識以及怎么使用tomcat配置一個數(shù)字證書。其實這些內(nèi)容我們?nèi)粘I钪卸际菚佑|到的,最明顯的例子就是網(wǎng)銀了。你在訪問銀行網(wǎng)站的時候,他會提示你安裝一下數(shù)字證書,這個就說明:該銀行生成了一對公鑰和私鑰,然后到CA機(jī)構(gòu)去認(rèn)證一下得到了一份數(shù)字證書,然后在將這份數(shù)字證書配置到該網(wǎng)站上面即可。