加密主要有兩種方式:對稱加密和非對稱加密。web
對稱加密:採用單鑰密碼系統的加密方法,同一個密鑰能夠同時做爲信息的加密和解密,這種方式也叫作單密鑰加密。所謂的對稱,就是採用這種加密方式的雙方使用一樣的密鑰進行加密和解密。
密鑰是控制加密和解密過程的指令,算法是一組規則,規定了如何進行加密解密。
加密的安全性不只取決於加密算法自己,更在於密鑰管理的安全性。
因爲對稱加密速度快,因此一般用在消息發送方須要加密大量數據時使用。可是由於加密和解密都使用同一個密鑰,如何把密鑰安全的傳遞到解密者手上就成了必需要解決的問題。
經常使用的對稱加密有: DES, IDEA, RC2, RC4, SKIPJACK, RC5, AEC算法等。算法
非對稱加密算法須要兩個密鑰:公鑰和私鑰
公鑰和私鑰是一對,若是用公鑰加密,只能用對應的私鑰才能解密;若是用私鑰加密,那麼只能用對應的公鑰解密。因爲加密和解密使用的是兩個不一樣的密鑰,因此叫這種加密算法叫作非對稱加密算法。
工做原理:
1. A向B發送信息,A和B都要產生一對用於加密和解密的公鑰和私鑰;
2. A的私鑰保密,把公鑰給B;B的私鑰保密,把公鑰給A;
3. A發消息給B,A用B的公鑰加密信息,而後將信息發給B;
4. B收到信息後,用本身的私鑰解密。
也就是說,發送方用接收方的公鑰加密,接收方用本身的私鑰解密,這樣信息就能夠安全無誤的到達了。可是依然存在如下問題:
1.A想發數據給B,那麼B先生成一對密鑰,而後將本身的公鑰發給A。可是在發公鑰的過程當中極可能被第三方C截獲。C截獲B的公鑰以後可能會作幾件事:
(1)使用B的公鑰對數據加密而後發給B,B此時沒法分清這個消息是A發的仍是C發的
(2)C本身生成一對密鑰,將公鑰發給A,A收到公鑰覺得是B發的,用這個公鑰加密以後發消息給B,發給B的過程當中被C攔截,C有私鑰,能夠知道消息的內容。
那麼這些問題該如何解決呢?
只能靠一個第三方機構(CA機構,即證書受權機構)來擔保。
此時的流程就是:
1. A要向B發送數據,B首先將公鑰發給CA機構,CA機構收到B的公鑰以後向B確認這個是不是B發送的公鑰;
2. CA機構確認是B發送的公鑰以後就會爲B擔保,生成一份數字證書給B,數字證書包含了CA的擔保認證簽名和B的公鑰,A拿到CA的數字證書後,看到上面有CA的簽名,就能夠肯定當前拿到的公鑰是B發的,這樣就能夠放心的使用公鑰加密數據而後發給B了apache
Tomcat服務器啓動時會啓動多個Connector(鏈接器),而Tomcat服務器的鏈接器又能夠分爲加密鏈接器和非加密鏈接器。在server.xml中有配置Connector:瀏覽器
<Connector port="8080" protocol="HTTP/1.1" connectionTimeout="20000" redirectPort="8443" />
8080這個端口對應的鏈接器就是沒有加密的Connector,在請求資源時咱們的請求也是不加密的。要是想要以加密的方式來訪問Tomcat服務器,就須要在Tomcat裏配置一個加密的Connector。
瀏覽器與服務器交互時,瀏覽器想要將數據加密以後再發送給服務器,該怎麼作呢?
首先,服務器要先向瀏覽器出示一份數字證書,瀏覽器看到數字證書以後,就可使用數字證書裏的公鑰加密數據。所以得針對服務器生成一份數字證書。而後再配置一下服務器,讓服務器收到瀏覽器的請求後,向瀏覽器出示它的數字證書。
生成Tomcat服務器的數字證書
sun公司提供了製做證書的工具keytool,在JDK1.4之後版本中都包含了這個工具,它在JAVA_HOME\bin\keytool.exe。使用keytool生成一個名爲tomcat的證書,放在.keystore這個密鑰庫中。tomcat
keytool -genkey -alias tomcat -keyalg RSA
命令執行完以後,操做系統的用戶文件夾下就會生成.keystore文件,如圖:
可使用指令查看.keystore密鑰庫裏面的全部證書安全
keytool -list -keystore .keystore
配置HTTP鏈接器
將生成的.keystore密鑰庫文件拷貝到Tomcat服務器的conf目錄下,以下圖所示:
修改server.xml文件,配置HTTP鏈接器:服務器
<Connector port="8443" protocol="org.apache.coyote.http11.Http11Protocol" maxThreads="150" SSLEnabled="true" scheme="https" secure="true" clientAuth="false" sslProtocol="TLS" keystoreFile="conf/.keystore" keystorePass="123456"/>
配置了一個端口是8443的加密鏈接器,瀏覽器訪問8443端口的鏈接器時,將會以加密的方式訪問web服務器,這個鏈接器收到瀏覽器的請求後,將會向瀏覽器出示一份數字證書,瀏覽器再用數字證書裏的公鑰來加密數據。服務器從密鑰庫中提取證書時須要密碼,keystorePass這個屬性就是指明瞭密碼。
使用"https://localhost:8443/"訪問8443的加密鏈接器 工具
因爲密鑰庫裏的證書時咱們本身生成的,並無通過CA認證,因此在訪問的時候,瀏覽器會出現"證書錯誤,導航已阻止"這種狀況,瀏覽器會認爲當前要訪問的這個主機是不安全的,不推薦訪問,點擊"繼續瀏覽此網站"便可。 網站
安裝數字證書
爲了讓瀏覽器信任咱們生成的數字證書,須要將數字證書安裝到瀏覽器中,以IE8爲例來安裝證書,過程以下:
證書安裝成功後,重啓IE瀏覽器,使用"https://localhost:8443/"訪問8443的加密鏈接器,此時瀏覽器就再也不提示證書錯誤了。加密
刪除數字證書
工具----->Internet選項
刪除後重啓瀏覽器便可。