互聯網的加密原理


加密主要有兩種方式:對稱加密和非對稱加密。

對稱加密

對稱加密:采用單鑰密碼系統的加密方法,同一個密鑰可以同時作為信息的加密和解密,這種方式也叫做單密鑰加密。所謂的對稱,就是采用這種加密方式的雙方使用同樣的密鑰進行加密和解密。 
密鑰是控制加密和解密過程的指令,算法是一組規則,規定了如何進行加密解密。 
加密的安全性不僅取決於加密算法本身,更在於密鑰管理的安全性。 
由於對稱加密速度快,所以通常用在消息發送方需要加密大量數據時使用。但是因為加密和解密都使用同一個密鑰,如何把密鑰安全的傳遞到解密者手上就成了必須要解決的問題。 
常用的對稱加密有: 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了

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這個密鑰庫中。

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
刪除后重啟瀏覽器即可。   

 

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM