javaweb學(xué)習(xí)總結(jié)(三)-----Tomcat服務(wù)器學(xué)習(xí)和使用(二)

一、打包JavaWeb應(yīng)用

在Java中,使用"jar"命令來(lái)對(duì)將JavaWeb應(yīng)用打包成一個(gè)War包,jar命令的用法如下:

范例:將JavaWebDemoProject這個(gè)JavaWeb應(yīng)用打包成war包

執(zhí)行完之后,就可以得到一個(gè)

文件,平時(shí)開(kāi)發(fā)完JavaWeb應(yīng)用后,一般都會(huì)將JavaWeb應(yīng)用打包成一個(gè)war包,然后將這個(gè)war包放到Tomcat服務(wù)器的webapps目錄下,當(dāng)Tomcat服務(wù)器啟動(dòng)時(shí),就會(huì)自動(dòng)將webapps目錄下的war包解壓。

比如現(xiàn)在將

放到放到Tomcat服務(wù)器的webapps目錄下

Tomcat服務(wù)器啟動(dòng)后會(huì)自動(dòng)"Deploying web application",將

這個(gè)war文件解壓縮,如下圖所示:

二、Tomcat的體系結(jié)構(gòu)

Tomcat服務(wù)器的啟動(dòng)是基于一個(gè)server.xml文件的,Tomcat啟動(dòng)的時(shí)候首先會(huì)啟動(dòng)一個(gè)Server,Server里面就會(huì)啟動(dòng)Service,Service里面就會(huì)啟動(dòng)多個(gè)"Connector(連接器)",每一個(gè)連接器都在等待客戶(hù)機(jī)的連接,當(dāng)有用戶(hù)使用瀏覽器去訪問(wèn)服務(wù)器上面的web資源時(shí),首先是連接到Connector(連接器),Connector(連接器)是不處理用戶(hù)的請(qǐng)求的,而是將用戶(hù)的請(qǐng)求交給一個(gè)Engine(引擎)去處理,Engine(引擎)接收到請(qǐng)求后就會(huì)解析用戶(hù)想要訪問(wèn)的Host,然后將請(qǐng)求交給相應(yīng)的Host,Host收到請(qǐng)求后就會(huì)解析出用戶(hù)想要訪問(wèn)這個(gè)Host下面的哪一個(gè)Web應(yīng)用,一個(gè)web應(yīng)用對(duì)應(yīng)一個(gè)Context。

1234711121314161920212223242526

三、互聯(lián)網(wǎng)上的加密原理

Tomcat服務(wù)器啟動(dòng)時(shí)候會(huì)啟動(dòng)多個(gè)Connector(連接器),而Tomcat服務(wù)器的連接器又分為加密連接器和非加密連機(jī)器,比如:

這里訪問(wèn)的就是使用8080端口的那個(gè)連接器

1

這個(gè)Connector是一個(gè)沒(méi)有加密的連接器,使用"http://localhost:8080/JavaWebDemoProject/Web/1.jsp"去請(qǐng)求服務(wù)器上的web資源的這個(gè)過(guò)程中,我們的請(qǐng)求是不加密的,要是想以一種加密的方式來(lái)訪問(wèn)Tomcat服務(wù)器,那么就要在Tomcat里面配置一個(gè)加密的Connector。要配置一個(gè)加密連接器,首先應(yīng)該把互聯(lián)網(wǎng)上的加密原理弄清楚。

3.1、對(duì)稱(chēng)加密

采用單鑰密碼系統(tǒng)的加密方法,同一個(gè)密鑰可以同時(shí)用作信息的加密和解密,這種加密方法稱(chēng)為對(duì)稱(chēng)加密,也稱(chēng)為單密鑰加密。

需要對(duì)加密和解密使用相同密鑰的加密算法。由于其速度快,對(duì)稱(chēng)性加密通常在消息發(fā)送方需要加密大量數(shù)據(jù)時(shí)使用。對(duì)稱(chēng)性加密也稱(chēng)為密鑰加密。

所謂對(duì)稱(chēng),就是采用這種加密方法的雙方使用方式用同樣的密鑰進(jìn)行加密和解密。密鑰是控制加密及解密過(guò)程的指令。算法是一組規(guī)則,規(guī)定如何進(jìn)行加密和解密。

加密的安全性不僅取決于加密算法本身,密鑰管理的安全性更是重要。因?yàn)榧用芎徒饷芏际褂猛粋€(gè)密鑰,如何把密鑰安全地傳遞到解密者手上就成了必須要解決的問(wèn)題。

常用的對(duì)稱(chēng)加密有:DES、IDEA、RC2、RC4、SKIPJACK、RC5、AES算法等

3.2、非對(duì)稱(chēng)加密

非對(duì)稱(chēng)加密算法需要兩個(gè)密鑰:公開(kāi)密鑰(publickey)和私有密鑰(privatekey)。公開(kāi)密鑰與私有密鑰是一對(duì),如果用公開(kāi)密鑰對(duì)數(shù)據(jù)進(jìn)行加密,只有用對(duì)應(yīng)的私有密鑰才能解密;如果用私有密鑰對(duì)數(shù)據(jù)進(jìn)行加密,那么只有用對(duì)應(yīng)的公開(kāi)密鑰才能解密。因?yàn)榧用芎徒饷苁褂玫氖莾蓚€(gè)不同的密鑰,所以這種算法叫作非對(duì)稱(chēng)加密算法。 非對(duì)稱(chēng)加密算法實(shí)現(xiàn)機(jī)密信息交換的基本過(guò)程是:甲方生成一對(duì)密鑰并將其中的一把作為公用密鑰向其它方公開(kāi);得到該公用密鑰的乙方使用該密鑰對(duì)機(jī)密信息進(jìn)行加密后再發(fā)送給甲方;甲方再用自己保存的另一把專(zhuān)用密鑰對(duì)加密后的信息進(jìn)行解密。另一方面,甲方可以使用乙方的公鑰對(duì)機(jī)密信息進(jìn)行簽名后再發(fā)送給乙方;乙方再用自己的私匙對(duì)數(shù)據(jù)進(jìn)行驗(yàn)簽。

非對(duì)稱(chēng)加密工作原理

1.A要向B發(fā)送信息,A和B都要產(chǎn)生一對(duì)用于加密和解密的公鑰和私鑰。

2.A的私鑰保密,A的公鑰告訴B;B的私鑰保密,B的公鑰告訴A。

3.A要給B發(fā)送信息時(shí),A用B的公鑰加密信息,因?yàn)锳知道B的公鑰。

4.A將這個(gè)消息發(fā)給B(已經(jīng)用B的公鑰加密消息)。

5.B收到這個(gè)消息后,B用自己的私鑰解密A的消息。其他所有收到這個(gè)報(bào)文的人都無(wú)法解密,因?yàn)橹挥蠦才有B的私鑰

發(fā)送方使用接收方的公鑰對(duì)數(shù)據(jù)加密,而接收方則使用自己的私鑰解密,這樣,信息就可以安全無(wú)誤地到達(dá)目的地了,即使被第三方截獲,由于沒(méi)有相應(yīng)的私鑰,也無(wú)法進(jìn)行解密。通過(guò)數(shù)字的手段保證加密過(guò)程是一個(gè)不可逆過(guò)程,即只有用私有密鑰才能解密。

非對(duì)稱(chēng)性加密依然沒(méi)有解決數(shù)據(jù)傳輸?shù)陌踩詥?wèn)題,比如A想向B發(fā)數(shù)據(jù),B首先生成一對(duì)密鑰(公鑰和私鑰),然后將公鑰發(fā)給A,A拿到B發(fā)給他的公鑰有就可以使用公鑰加密數(shù)據(jù)后發(fā)給B,然而在B公鑰發(fā)送給A的這個(gè)過(guò)程中,很有可能會(huì)被第三方C截獲,C截獲到B的公鑰后,也使用B的公鑰加密數(shù)據(jù),然后發(fā)給B,B接收到數(shù)據(jù)后就暈了,因?yàn)楦悴磺宄邮盏降臄?shù)據(jù)到底是A發(fā)的還是C發(fā)的,這是其中一個(gè)問(wèn)題,另一個(gè)問(wèn)題就是,C截獲到B發(fā)的公鑰后,C可以自己生成一對(duì)密鑰(公鑰和私鑰),然后發(fā)給A,A拿到公鑰后就以為是B發(fā)給他的,然后就使用公鑰加密數(shù)據(jù)發(fā)給B,發(fā)送給B的過(guò)程中被C截獲下來(lái),由于A是用C發(fā)給他的公鑰加密數(shù)據(jù)的,而C有私鑰,因此就可以解密A加密過(guò)后的內(nèi)容了,而B(niǎo)接收到A發(fā)給他的數(shù)據(jù)后反而解不開(kāi)了,因?yàn)閿?shù)據(jù)是用C的公鑰加密的,B沒(méi)有C的私鑰,所以就無(wú)法解密。所以,非對(duì)稱(chēng)性加密存在一個(gè)問(wèn)題:A想向B發(fā)數(shù)據(jù),A如何確定拿到的公鑰一定是B發(fā)的呢?那么如何解決這個(gè)問(wèn)題呢?只能靠一個(gè)第三方機(jī)構(gòu)(CA機(jī)構(gòu),即證書(shū)授權(quán)中心(Certificate Authority ),或稱(chēng)證書(shū)授權(quán)機(jī)構(gòu))來(lái)?yè)?dān)保。A想向B發(fā)數(shù)據(jù),B首先將公鑰發(fā)給CA機(jī)構(gòu),CA機(jī)構(gòu)拿到B的公鑰后跑到B的家里問(wèn):這是你發(fā)的公鑰嗎?B確認(rèn)過(guò)后說(shuō)是:沒(méi)錯(cuò),是我發(fā)的!那么此時(shí)CA機(jī)構(gòu)就會(huì)為B的公鑰做擔(dān)保,生成一份數(shù)字證書(shū)給B,數(shù)字證書(shū)包含了CA的擔(dān)保認(rèn)證簽名和B的公鑰,B拿到CA的這份數(shù)字證書(shū)后,就發(fā)給A,A拿到數(shù)字證書(shū)后,看到上面有CA的簽名,就可以確定當(dāng)前拿到的公鑰是B發(fā)的,那么就可以放心大膽地使用公鑰加密數(shù)據(jù),然后發(fā)給B了。

四、https連接器

明白了互聯(lián)網(wǎng)上的加密原理之后,下面來(lái)看看瀏覽器與服務(wù)器交互時(shí),瀏覽器想將數(shù)據(jù)加密后再發(fā)送給服務(wù)器,那么該怎么做呢?服務(wù)器首先要向?yàn)g覽器出示一份數(shù)字證書(shū),瀏覽器看到數(shù)字證書(shū)后,就可以使用數(shù)字證書(shū)里面的公鑰加密數(shù)據(jù),所以要想做瀏覽器和服務(wù)器的加密數(shù)據(jù)傳輸,那么首先得針對(duì)服務(wù)器生成一份數(shù)字證書(shū)。然后再配置一下服務(wù)器,讓服務(wù)器收到瀏覽器的請(qǐng)求之后,會(huì)向?yàn)g覽器出示它的數(shù)字證書(shū)。

4.1、生成Tomcat服務(wù)器的數(shù)字證書(shū)

SUN公司提供了制作證書(shū)的工具keytool,在JDK?1.4以后的版本中都包含了這一工具,它的位置為\bin\keytool.exe

1keytool -genkey -alias tomcat -keyalg RSA

使用keytool生成一個(gè)名字為tomcat的證書(shū),存放在.keystore這個(gè)密鑰庫(kù)中

命令執(zhí)行完之后,操作系統(tǒng)的用戶(hù)文件夾下面就會(huì)生成一個(gè).keystore文件,如下圖所示:

使用命令:keytool -list -keystore .keystore查看.keystore密鑰庫(kù)里面的所有證書(shū)

4.2、配置https連接器

將生成的.keystore密鑰庫(kù)文件拷貝到Tomcat服務(wù)器的conf目錄下,如下圖所示:

修改server.xml文件,配置https連接器,代碼如下:

1

在server.xml文件中配置了一個(gè)端口是8443的加密連接器,瀏覽器訪問(wèn)8443端口的連接器時(shí),將會(huì)以加密的方式來(lái)訪問(wèn)web服務(wù)器,這個(gè)連接器收到瀏覽器的請(qǐng)求后,將會(huì)向?yàn)g覽器出示一份數(shù)字證書(shū),瀏覽器再用數(shù)字證書(shū)里面的公鑰來(lái)加密數(shù)據(jù),keystoreFile="conf/.keystore"用來(lái)指明密鑰庫(kù)文件的所在路徑,服務(wù)器從密鑰庫(kù)中提取證書(shū)時(shí)需要密碼,keystorePass="123456"指明密鑰庫(kù)的訪問(wèn)密碼。

使用"https://localhost:8443/"訪問(wèn)8443的加密連接器

由于密鑰庫(kù)里面的證書(shū)是我們手工生成的,沒(méi)有經(jīng)過(guò)CA的認(rèn)證,所以使用"https://localhost:8443/"訪問(wèn)8443的加密連接器,瀏覽器會(huì)出現(xiàn)"證書(shū)錯(cuò)誤,導(dǎo)航已阻止",瀏覽器認(rèn)為當(dāng)前要訪問(wèn)的這個(gè)主機(jī)是不安全的,不推薦繼續(xù)訪問(wèn),點(diǎn)擊

就可以繼續(xù)訪問(wèn)了,如下圖所示:

4.3、安裝數(shù)字證書(shū)

為了讓瀏覽器信任我們生成的數(shù)字證書(shū),需要將數(shù)字證書(shū)安裝到瀏覽器中,以IE8瀏覽器為例進(jìn)行證書(shū)安裝說(shuō)明,安裝步驟如下:

證書(shū)安裝成功后,重啟IE瀏覽器,使用"https://localhost:8443/"訪問(wèn)8443的加密連接器,此時(shí)瀏覽器就不再提示證書(shū)錯(cuò)誤了,如下圖所示:

4.4、刪除數(shù)字證書(shū)

以IE8為例進(jìn)行說(shuō)明,操作步驟如下:工具----->Internet選項(xiàng)

刪除之后重啟瀏覽器即可

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時(shí)請(qǐng)結(jié)合常識(shí)與多方信息審慎甄別。
平臺(tái)聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡(jiǎn)書(shū)系信息發(fā)布平臺(tái),僅提供信息存儲(chǔ)服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

友情鏈接更多精彩內(nèi)容