互聯網的加密原理

加密主要有兩種方式:對稱加密和非對稱加密。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服務器與加密解密

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

Capture17.PNG-19.6kB

命令執行完以後,操做系統的用戶文件夾下就會生成.keystore文件,如圖: 
Capture18.PNG-14.4kB 
可使用指令查看.keystore密鑰庫裏面的全部證書
安全

keytool -list -keystore .keystore

Capture19.PNG-6.3kB

 

配置HTTP鏈接器 
將生成的.keystore密鑰庫文件拷貝到Tomcat服務器的conf目錄下,以下圖所示: 
Capture20.PNG-17.4kB 
修改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的加密鏈接器 
Capture21.PNG-70.9kB
工具

 因爲密鑰庫裏的證書時咱們本身生成的,並無通過CA認證,因此在訪問的時候,瀏覽器會出現"證書錯誤,導航已阻止"這種狀況,瀏覽器會認爲當前要訪問的這個主機是不安全的,不推薦訪問,點擊"繼續瀏覽此網站"便可。 
Capture22.PNG-104.3kB
網站

 安裝數字證書   
爲了讓瀏覽器信任咱們生成的數字證書,須要將數字證書安裝到瀏覽器中,以IE8爲例來安裝證書,過程以下: 
Capture23.PNG-121kB
Capture24.PNG-188.1kB   
Capture25.PNG-61.9kB   
證書安裝成功後,重啓IE瀏覽器,使用"https://localhost:8443/"訪問8443的加密鏈接器,此時瀏覽器就再也不提示證書錯誤了。
加密

 刪除數字證書 
工具----->Internet選項 
Capture27.PNG-142.9kB
刪除後重啓瀏覽器便可。  

相關文章
相關標籤/搜索