在Java中,使用"jar"命令來對將JavaWeb應用打包成一個War包,jar命令的用法以下:html
範例:將JavaWebDemoProject這個JavaWeb應用打包成war包web
執行完以後,就能夠獲得一個文件,平時開發完JavaWeb應用後,通常都會將JavaWeb應用打包成一個war包,而後將這個war包放到Tomcat服務器的webapps目錄下,當Tomcat服務器啓動時,就會自動將webapps目錄下的war包解壓。算法
好比如今將放到放到Tomcat服務器的webapps目錄下apache
Tomcat服務器啓動後會自動"Deploying web application",將這個war文件解壓縮,以下圖所示:瀏覽器
Tomcat服務器的啓動是基於一個server.xml文件的,Tomcat啓動的時候首先會啓動一個Server,Server裏面就會啓動Service,Service裏面就會啓動多個"Connector(鏈接器)",每個鏈接器都在等待客戶機的鏈接,當有用戶使用瀏覽器去訪問服務器上面的web資源時,首先是鏈接到Connector(鏈接器),Connector(鏈接器)是不處理用戶的請求的,而是將用戶的請求交給一個Engine(引擎)去處理,Engine(引擎)接收到請求後就會解析用戶想要訪問的Host,而後將請求交給相應的Host,Host收到請求後就會解析出用戶想要訪問這個Host下面的哪個Web應用,一個web應用對應一個Context。tomcat
1 <?xml version='1.0' encoding='utf-8'?> 2 <Server port="8005" shutdown="SHUTDOWN"> 3 <Service name="Catalina"> 4 <Connector port="8080" protocol="HTTP/1.1" 5 connectionTimeout="20000" 6 redirectPort="8443" /> 7 <Connector port="8443" protocol="org.apache.coyote.http11.Http11Protocol" 8 maxThreads="150" SSLEnabled="true" scheme="https" secure="true" 9 clientAuth="false" sslProtocol="TLS" 10 keystoreFile="conf/.keystore" keystorePass="123456"/> 11 <Connector port="8009" protocol="AJP/1.3" redirectPort="8443" /> 12 <Engine name="Catalina" defaultHost="localhost"> 13 14 <Host name="localhost" appBase="webapps" 15 unpackWARs="true" autoDeploy="true"> 16 <Valve className="org.apache.catalina.valves.AccessLogValve" directory="logs" 17 prefix="localhost_access_log." suffix=".txt" 18 pattern="%h %l %u %t "%r" %s %b" /> 19 </Host> 20 <Host name="www.gacl.cn" appBase="F:\JavaWebApps"> 21 <Context path="" docBase="F:\JavaWebApps\JavaWebDemo1"/> 22 </Host> 23 24 </Engine> 25 </Service> 26 </Server>
Tomcat服務器啓動時候會啓動多個Connector(鏈接器),而Tomcat服務器的鏈接器又分爲加密鏈接器和非加密連機器,好比:安全
這裏訪問的就是使用8080端口的那個鏈接器服務器
1 <Connector port="8080" protocol="HTTP/1.1" 2 connectionTimeout="20000" 3 redirectPort="8443" />
這個Connector是一個沒有加密的鏈接器,使用"http://localhost:8080/JavaWebDemoProject/Web/1.jsp"去請求服務器上的web資源的這個過程當中,咱們的請求是不加密的,要是想以一種加密的方式來訪問Tomcat服務器,那麼就要在Tomcat裏面配置一個加密的Connector。要配置一個加密鏈接器,首先應該把互聯網上的加密原理弄清楚。app
非對稱加密算法須要兩個密鑰:公開密鑰(publickey)和私有密鑰(privatekey)。公開密鑰與私有密鑰是一對,若是用公開密鑰對數據進行加密,只有用對應的私有密鑰才能解密;若是用私有密鑰對數據進行加密,那麼只有用對應的公開密鑰才能解密。由於加密和解密使用的是兩個不一樣的密鑰,因此這種算法叫做非對稱加密算法。 非對稱加密算法實現機密信息交換的基本過程是:甲方生成一對密鑰並將其中的一把做爲公用密鑰向其它方公開;獲得該公用密鑰的乙方使用該密鑰對機密信息進行加密後再發送給甲方;甲方再用本身保存的另外一把專用密鑰對加密後的信息進行解密。另外一方面,甲方可使用乙方的公鑰對機密信息進行簽名後再發送給乙方;乙方再用本身的私匙對數據進行驗籤。webapp
發送方使用接收方的公鑰對數據加密,而接收方則使用本身的私鑰解密,這樣,信息就能夠安全無誤地到達目的地了,即便被第三方截獲,因爲沒有相應的私鑰,也沒法進行解密。經過數字的手段保證加密過程是一個不可逆過程,即只有用私有密鑰才能解密。
非對稱性加密依然沒有解決數據傳輸的安全性問題,好比A想向B發數據,B首先生成一對密鑰(公鑰和私鑰),而後將公鑰發給A,A拿到B發給他的公鑰有就可使用公鑰加密數據後發給B,然而在B公鑰發送給A的這個過程當中,頗有可能會被第三方C截獲,C截獲到B的公鑰後,也使用B的公鑰加密數據,而後發給B,B接收到數據後就暈了,由於搞不清楚接收到的數據究竟是A發的仍是C發的,這是其中一個問題,另外一個問題就是,C截獲到B發的公鑰後,C能夠本身生成一對密鑰(公鑰和私鑰),而後發給A,A拿到公鑰後就覺得是B發給他的,而後就使用公鑰加密數據發給B,發送給B的過程當中被C截獲下來,因爲A是用C發給他的公鑰加密數據的,而C有私鑰,所以就能夠解密A加密事後的內容了,而B接收到A發給他的數據後反而解不開了,由於數據是用C的公鑰加密的,B沒有C的私鑰,因此就沒法解密。因此,非對稱性加密存在一個問題:A想向B發數據,A如何肯定拿到的公鑰必定是B發的呢?那麼如何解決這個問題呢?只能靠一個第三方機構(CA機構,即證書受權中心(Certificate Authority ),或稱證書受權機構)來擔保。A想向B發數據,B首先將公鑰發給CA機構,CA機構拿到B的公鑰後跑到B的家裏問:這是你發的公鑰嗎?B確認事後說是:沒錯,是我發的!那麼此時CA機構就會爲B的公鑰作擔保,生成一份數字證書給B,數字證書包含了CA的擔保認證簽名和B的公鑰,B拿到CA的這份數字證書後,就發給A,A拿到數字證書後,看到上面有CA的簽名,就能夠肯定當前拿到的公鑰是B發的,那麼就能夠放心大膽地使用公鑰加密數據,而後發給B了。
明白了互聯網上的加密原理以後,下面來看看瀏覽器與服務器交互時,瀏覽器想將數據加密後再發送給服務器,那麼該怎麼作呢?服務器首先要向瀏覽器出示一份數字證書,瀏覽器看到數字證書後,就可使用數字證書裏面的公鑰加密數據,因此要想作瀏覽器和服務器的加密數據傳輸,那麼首先得針對服務器生成一份數字證書。而後再配置一下服務器,讓服務器收到瀏覽器的請求以後,會向瀏覽器出示它的數字證書。
SUN公司提供了製做證書的工具keytool, 在JDK 1.4之後的版本中都包含了這一工具,它的位置爲<JAVA_HOME>\bin\keytool.exe
1 keytool -genkey -alias tomcat -keyalg RSA
使用keytool生成一個名字爲tomcat的證書,存放在.keystore這個密鑰庫中
命令執行完以後,操做系統的用戶文件夾下面就會生成一個.keystore文件,以下圖所示:
使用命令:keytool -list -keystore .keystore查看.keystore密鑰庫裏面的全部證書
將生成的.keystore密鑰庫文件拷貝到Tomcat服務器的conf目錄下,以下圖所示:
修改server.xml文件,配置https鏈接器,代碼以下:
1 <Connector port="8443" protocol="org.apache.coyote.http11.Http11Protocol" 2 maxThreads="150" SSLEnabled="true" scheme="https" secure="true" 3 clientAuth="false" sslProtocol="TLS" 4 keystoreFile="conf/.keystore" keystorePass="123456"/>
在server.xml文件中配置了一個端口是8443的加密鏈接器,瀏覽器訪問8443端口的鏈接器時,將會以加密的方式來訪問web服務器,這個鏈接器收到瀏覽器的請求後,將會向瀏覽器出示一份數字證書,瀏覽器再用數字證書裏面的公鑰來加密數據,keystoreFile="conf/.keystore" 用來指明密鑰庫文件的所在路徑,服務器從密鑰庫中提取證書時須要密碼,keystorePass="123456"指明密鑰庫的訪問密碼。
使用"https://localhost:8443/"訪問8443的加密鏈接器
因爲密鑰庫裏面的證書是咱們手工生成的,沒有通過CA的認證,因此使用"https://localhost:8443/"訪問8443的加密鏈接器,瀏覽器會出現"證書錯誤,導航已阻止",瀏覽器認爲當前要訪問的這個主機是不安全的,不推薦繼續訪問,點擊就能夠繼續訪問了,以下圖所示:
爲了讓瀏覽器信任咱們生成的數字證書,須要將數字證書安裝到瀏覽器中,以IE8瀏覽器爲例進行證書安裝說明,安裝步驟以下:
證書安裝成功後,重啓IE瀏覽器,使用"https://localhost:8443/"訪問8443的加密鏈接器,此時瀏覽器就再也不提示證書錯誤了,以下圖所示:
以IE8爲例進行說明,操做步驟以下:工具----->Internet選項
刪除以後重啓瀏覽器便可
原文:http://www.cnblogs.com/xdp-gacl/p/3744053.html