1. 程式人生 > >https理論及實踐

https理論及實踐

什麼是https協議?

http協議以明文的方式在網路中傳輸,安全性難以保證,https在http協議的基礎上加入SSL/TLS層。TLS是SSL協議的最新版本,SSL使用SSL數字證書在通訊兩端建立加密鏈路,對兩端通訊資料進行加密,從而保證通訊資料安全。
http和https協議比較如下:

SSL協議工作原理


SSL協議主要涉及非對稱加密和對稱加密技術。
非對稱加密,使用一對金鑰加解密資料,公鑰(public key)對外公開,私鑰自己保留(private key)。使用私鑰加密的資料只有對應的公鑰才能解密。SSL使用非對稱加密進行通訊初始化(SSL handshake),非對稱加密演算法包括RSA,、DSA、PKCS等。


對稱加密,加解密都用同一個key。SSL在通訊初始化(handshake)後,用session key進行對稱加密通訊。對稱加密演算法包括AES-128, AES-192 and AES-256。

SSL協議通訊包括兩個階段:SSL handshake和資料傳輸。SSL handshake階段使用非對稱加密,資料傳輸階段使用對稱加密。

SSL handshake包含以下步驟:

1. 客戶端傳送"client hello"訊息,這條訊息中包含客戶端SSL版本以及其它服務端需要的資訊。
2. 服務端回覆"server hello"訊息,這條訊息包含服務端SSL版本,包含public key的SSL數字證書及其它資訊。
3. 客戶端傳送請求給CA(Certificate Authority,證書頒發機構)對服務端進行身份驗證。驗證失敗則拒絕建立SSL連線,否則繼續4.
4. 客戶端生成session key,用服務端的public key加密,併發送給服務端。假如服務端也要求驗證客戶端,客戶端也需要傳送自己的證書(一般是server之間的通訊需要)。
5. 服務端用自己的private key解密出session key,並用session key加密傳送確認訊息。

資料傳輸階段如下,用SSL handshake階段生成的session key對資料進行對稱加密通訊。和非對稱加密相比,對稱加密簡單、加解密速度會更快。

SSL證書

SSL證書是由CA機構頒發的含服務端public key及其它資訊的資料檔案。比如google的數字證書如下,可以點選詳細資訊檢視更多證書內容。


數字證書由X.509標準定義,X.509使用Abstract Syntax Notation One (ASN.1)標記去表示數字證書結構。數字證書一般包含下面這些域。

SSL證書基於驗證級別和認證domain數可分為不同型別,基於驗證級別可分為Domain Validated Certificates(DV,域名型)、Organization Validated Certificates(OV,企業型)、Extended Validated Certificates(EV,企業增強型)。域名型證書用於驗證單個域名,企業型證書可驗證某域名下的所有子域名,比如*.killianxu.cn,企業增強型證書可用於驗證不相關的多個相關域名。基於domain數可分為Single Domain Certificate、Wildcard SSL Certificate和Unified SSL Certificate /Multi-Domain SSL Certificate/SAN Certificate。

獲取SSL證書

SSL證書可以從CA機構購買或者從免費CA機構獲取。在申請證書時可能需要提交Certificate Signing Request (CSR)。CSR是由openssl等SSL tools工具或伺服器生成的Base64編碼文字。內含公鑰、域名、組織、地址等資訊,CA機構頒發的證書中就包含CSR中的公鑰資訊。CSR文字由-----BEGIN NEW CERTIFICATE REQUEST-----"開始,並由"-----END NEW CERTIFICATE REQUEST-----結束,CSR格式如下:

可線上生成CSR和private key兩個檔案。

生成csr檔案後,可申請免費DV型別SSL證書。
騰訊雲可免費申請域名驗證級別的SSL證書,生成證書過程自動生成CSR。

生成的證書可下載安裝到server。SSL證書有不同的格式,PEM和PKCS#7使用Base64編碼,DER和 PKCS#12使用二進位制編碼。

騰訊雲申請的證書如下,其中包含了適用於幾種主流伺服器的證書格式,其中www.killianxu.cn.csr為自動生成的CSR檔案。

安裝SSL證書

每種伺服器證書安裝方法都不一樣,本文講解在tomcat上的安裝。在安裝前若證書格式和伺服器支援的證書格式不一樣,需要利用OpenSSL轉換。
在tomcat安裝路徑下conf/server.xml增加如下SSL/TLS配置,支援https:

<Connector port="8443" protocol="org.apache.coyote.http11.Http11NioProtocol"
maxThreads="150" SSLEnabled="true" scheme="https">
<SSLHostConfig>
<Certificate certificateKeystoreFile="conf/www.killianxu.cn.jks" certificateKeystorePassword="d62spdpc5se3an" certificateKeyAlias="www.killianxu.cn"
type="RSA" />
</SSLHostConfig>
</Connector>

強制所有的http訪問重定向到https,在conf/web.xml的結束標籤web-app強增加配置:

<login-config>  
    <!-- Authorization setting for SSL -->  
    <auth-method>CLIENT-CERT</auth-method>  
    <realm-name>Client Cert Users-only Area</realm-name>  
</login-config>  
<security-constraint>  
    <!-- Authorization setting for SSL -->  
    <web-resource-collection >  
        <web-resource-name >SSL</web-resource-name>  
        <url-pattern>/*</url-pattern>  
    </web-resource-collection>  
    <user-data-constraint>  
        <transport-guarantee>CONFIDENTIAL</transport-guarantee>  
    </user-data-constraint>  
</security-constraint> 

重啟tomcat

驗證證書安裝成功


輸入:curl -v https://www.killianxu.cn:8443/test.html

可看到1部分獲取到SSL證書資訊,2部分獲取網頁資料

輸入:curl -v http://www.killianxu.cn:9999/test.html

http協議收到302重定向狀態碼,並有Location重定向新路徑

參考文獻


https://www.tutorialsteacher.com/https
https://yevon-cn.github.io/2017/04/09/https-config-of-tomcat.