Https 協議解析

1 概述
1.1 HTTPS
    使用SSL協議,對HTTP協議通訊過程當中的明文數據加密,這就是HTTPS。網絡分層結構以下:算法

    SSL協議負責數據加密,解密,位於HTPP協議和TCP協議之間。
    客戶端和服務器端使用HTTPS通訊的時候,分爲兩個階段:SSL握手階段和HTTPS正式通訊階段。
1.2 對稱加密
    對稱加密只有一個密匙,使用該密匙加密和解密數據。
    客戶端和服務器端,在使用HTTPS協議通訊階段,數據使用對稱加密算法。
    流行的對稱加密算法包括:DES,RC2,RC4,Triple-DES。
1.3 非對稱加密
    非對稱加密有兩個密匙,分別是私匙和公匙。公鑰與私鑰是一對,若是用公鑰對數據進行加密,只有使用對應的私鑰才能解密;若是使用私鑰對數據進行加密,只有使用對應的公鑰才能解密。
    客戶端和服務器端,在HTTPS協議的SSL握手階段,使用非對稱加密算法。
    流行的非對稱加密算法包括:RSA,DSA,ECC/ECDH/ECDSA等。
2 HTTPS交互過程
    HTTPS的交互過程分爲兩個階段:SSL握手階段,和正式通訊階段。過程以下:apache

    當客戶端與服務器端第一次通訊的時候,瀏覽器將它支持的加密算法列表發送給服務器。服務器在加密算法列表中選擇一個加密算法,而後將服務器本身的證書,以及一個hash算法返回給瀏覽器。
瀏覽器收到服務器的證書之後,須要執行證書驗證。若是經過證書驗證,表示證書合法;若是沒有經過證書驗證,那麼會彈出一個對話框,提示該網址的根證書不受信任,有安全問題。
若是證書驗證經過,或者用戶選擇信任該網站的證書,那麼瀏覽器會生成一個隨機數(該隨機數將做爲HTTPS通訊階段,對稱加密的密匙)。而後使用證書中包含的公匙加密該隨機數。使用隨機數加密握手信息,使用服務器指定的hash算法hash握手信息。而後將這三部分信息傳遞給服務器。
服務器收到瀏覽器的信息後,使用私匙解密隨機數;使用隨機數解密握手信息,而後hash握手信息。最後對比瀏覽器傳遞過來的hash(握手信息)以及本身生成的hash(握手信息),若是二者相同。服務器將給瀏覽器返回以下兩種信息:使用隨機數加密的握手信息,以及hash(握手信息)。
瀏覽器收到服務器的信息後,使用隨機數解密握手信息,而後對握手信息執行hash,最後與服務器傳遞過來的hash(握手信息)對比,若是二者相同,那麼認爲SSL握手成功。
當SSL握手成功後,使用上面生成的隨機數,做爲對稱加密的密匙,雙方但是通訊。
瀏覽器和服務器互發加密的握手信息並驗證的目的是保證雙發獲取到的密碼一致,並可正常加密,解密。爲後續真正的數據傳輸做一次測試。
整個HTTPS協議的過程當中,使用了非對稱加密算法和對稱加密算法。非對稱加密算法的目的就是爲對稱加密算法生成密匙。
3 CA及證書
    在SSL握手階段,一個重要的要素就是公匙。經過使用證書,可確保加密傳輸數據的公匙不被篡改。證書用來證實公鑰擁有者身份的憑證。
CA是頒發證書的組織結構,是可信機構,CA保證了由它所頒發的證書是沒有被篡改過的。
證書分多級,包括:根證書,中級證書,以及三級證書。相應的CA結構也分多級,包括:RootCA,intermediates CAs。它們之間的關係以下圖:windows

    Root CA頒發根證書,Insermediates CA頒發中級證書和三級證書。根證書用來保證中級證書沒有被篡改;中級證書用來保證三級證書沒有被篡改;三級證書用來保證,SSL握手過程當中傳遞的公匙沒有被篡改。
    在操做系統中,通常會內置多個根證書和中級證書,並根據須要安裝三級證書。多級證書造成鏈式結構。
3.1 證書的內容
    當使用證書生成工具,如:keytool工具,或者openssl工具,會生成兩個文件。xxx.keystore密碼文件和xxx.cer證書文件。xxx.keystore文件中含有私鑰,須要將其配置到服務器端;xxx.cer文件持有公鑰,須要將其安裝到客戶端。
    在xxx.cer證書文件中,通常會包含以下內容:瀏覽器

  • 證書頒發機構名稱,信息;
  • 證書有效期;
  • 證書所綁定的域名;
  • 證書全部者的名稱,信息;
  • 證書全部者的公鑰。

    在windows系統中,打開證書文件後,其內容以下圖:tomcat

    證書籤名的生成規則以下:
    對證書的明文信息執行hash,生成摘要信息;
    使用私鑰加密摘要信息,生成證書的簽名。
    若是證書是根證書,那麼該證書的簽名是自簽名。即:使用本身的私鑰加密摘要信息。若是證書是中級證書,或者三級證書,那麼使用該證書的上級證書的私鑰加密摘要信息,造成簽名。
3.2 證書的頒發
    Root CA機構負責爲Intermediates CA機構頒發證書,爲Intermediates CA機構頒發的證書是中級證書。也就是說Intermediates CA機構持有中級證書。
在爲Intermediates CA機構頒發中級證書以前,Root CA機構必須有本身的根證書。Root CA機構的證書是自簽名證書。
在給Intermediates CA機構頒發證書的時候,Root CA機構會將本身的組織名稱寫入到中級證書中,而且用根證書的私鑰中級證書的摘要信息,造成簽名,也寫入中級證書中。
Intermediates CA機構給下級Intermediates CA結構頒發證書的流程也是如此:將本身的組織機構名稱寫入下級證書;用本身的私鑰加密下級證書的摘要信息,做爲下級證書的簽名。
    其關係以下圖所示:安全

    由上圖可見,下級證書持有上級證書的名稱,並持有由上級證書生成的簽名。服務器

3.3 證書驗證
    當SSL握手的時候,服務器端會將本身的證書傳遞給瀏覽器,瀏覽器須要驗證證書的有效性,其流程以下:網絡

    整個驗證過程分兩部分:查找上級證書和逐級向下驗證兩個過程。在第一過程當中,根據當前證書持有的上級CA機構的名稱,在操做系統的證書鏈中,查找上級CA機構的證書。一直遞歸該過程,直到找到根證書。
    當找到根證書後,用根證書的私鑰解密下級證書的簽名,造成摘要信息。同時使用hash算法,將下級證書的明文信息做hash處理,生成另一份摘要信息。對比兩份摘要信息,若是相同,那麼證實該下級證書有效,可信。
    當驗證完證書鏈中全部的證書後,就可證實服務器傳遞過來的三級證書是有效,可信的。使用該三級證書的公鑰加密瀏覽器生成的隨機數,做爲對稱加密的密碼,再次傳遞到服務器端。服務器端使用私鑰解密該隨機數,得到對稱加密的密碼。經過這個過程,客戶端、服務器端就持有了對稱加密的密碼,可以使用該密碼正式通訊。
3.5 生成證書
    可以使用jdk的工具KeyTool生成證書。生成證書分兩步:建立證書,導出證書。由此方式生成證書是自簽名的根證書。
3.5.1 建立證書
    執行以下命令,會建立證書:
    工具

keytool -genkey -alias lifeng -keypass 123456 -keyalg RSA -keysize 1024 -validity 365 -keystore d:/tomcat.keystore -storepass 123456

 

    各參數解釋以下:
        -genkey 表示要生成一個證書,該證書包含私匙。建立方本身使用,通常配置大tomcat服務器上。
        -alias 給證書起別名,隨意
        -keypass 訪問證書內條目的時候所須要的密碼;
        -storepass 訪問證書文件所須要的秒;
        -keyalg 生成證書的算法
        -keysize 證書密碼的大小
        -keystore 生成的證書文件名稱,以及保存位置。
    當執行該命令後,會有一些列交互,分別以下:性能

    當完成該命令後,會在指定的路徑生成一個名爲tomcat.keystore的證書文件,該文件持有公鑰和私鑰。須要將該文件配置到服務器上。

3.5.2 導出證書
    須要從前面生成tomcat.keystore文件中,將公鑰導出,造成證書。執行以下命令,會導出證書:

keytool -export -keystore d:/tomcat.keystore -file d:/server.cer -storepass 123456 -keypass 123456 -alias lifeng

 

    該命令執行成功後,會在指定的位置,生成一個名稱爲server.cer的證書文件。將該文件導入到客戶端瀏覽器便可。

4 證書安裝
4.1 服務器端證書安裝
    在tomcat的<connector>配置節,執行以下配置:

<Connector port="8443" protocol="org.apache.coyote.http11.Http11Protocol"
maxThreads="150" SSLEnabled="true" scheme="https" secure="true"
clientAuth="false" sslProtocol="TLS" keystoreFile="你的keystore路徑" keystorePass="生成證書時的口令" />

 

    配置屬性解釋以下:
clientAuth 若是設爲true,表示Tomcat要求全部的SSL客戶出示安全證書,對SSL客戶進行身份驗證
keystoreFile 指定keystore文件的存放位置,能夠指定絕對路徑,也能夠指定相對於 (Tomcat安裝目錄)環境變量的相對路徑。若是此項沒有設定,默認狀況下,Tomcat將從當前操做系統用戶的用戶目錄下讀取名爲 「.keystore」的文件。
    keystorePass 密鑰庫密碼,指定keystore的密碼。(若是申請證書時有填寫私鑰密碼,密鑰庫密碼即私鑰密碼,不然填寫密鑰庫密碼文件中的密碼)
sslProtocol 指定套接字(Socket)使用的加密/解密協議,默認值爲TLS
4.2 客戶端證書安裝
    在windows系統中,點擊證書文件,打開以下圖所示的界面:

    點擊「安裝證書」按鈕,將打開證書導入嚮導對話框,一路下一步操做,直到完成。
在使用HTTPS通訊的時候,若是客戶端沒有安裝證書,或者證書不可信,會彈出告警信息。根據實際狀況,可選擇信任此證書,繼續通訊;或者終止通訊。
5 SSL卸載
    因爲非對稱加密會損耗大量服務器性能,因此提供了單獨的硬件設備,用來處理SSL握手,以及http通訊加密,解密。將密文的https數據轉換成明文的http過程,被稱爲SSL卸載。以下圖所示:

    SSLGW是特定的加密,解密設備,將https協議轉換爲http協議。SSLGW後面對應的是企業私網,可保證通訊安全。
6 其餘
6.1 證書的分類
    證書有多重類型,負責HTTPS通訊的服務器證書只是其中一種。證書的主要類型包括:我的身份證書、企業或機構身份證書、支付網關證書、服務器證書、安全電子郵件證書、我的代碼簽名證書,這些數字證書特色各有不一樣。
    我的身份證書
    符合 X.509 標準的數字安全證書,證書中包含我的身份信息和我的的公鑰,用於標識證書持有人的我的身份。數字安全證書和對應的私鑰存儲於 E-key 中,用於我的在網上進行合同簽訂、定單、錄入審覈、操做權限、支付信息等活動中標明身份。
    企業或機構身份證書
    符合 X.509 標準的數字安全證書,證書中包含企業信息和企業的公鑰,用於標識證書持有企業的身份。數字安全證書和對應的私鑰存儲於 E-key 或 IC 卡中,能夠用於企業在電子商務方面的對外活動,如合同簽訂、網上證券交易、交易支付信息等方面。
    支付網關證書
    支付網關證書是證書籤發中心針對支付網關簽發的數字證書,是支付網關實現數據加解密的主要工具,用於數字簽名和信息加密。支付網關證書僅用於支付網關提供的服務(Internet 上各類安全協議與銀行現有網絡數據格式的轉換)。支付網關證書只能在有效狀態下使用。支付網關證書不可被申請者轉讓。
    服務器證書
    符合 X.509 標準的數字安全證書,證書中包含服務器信息和服務器的公鑰,在網絡通信中用於標識和驗證服務器的身份。數字安全證書和對應的私鑰存儲於 E-key 中。服務器軟件利用證書機制保證與其餘服務器或客戶端通訊時雙方身份的真實性、安全性、可信任度等。
企業或機構簽發給軟件提供商的數字證書,包含軟件提供商的身份信息、公鑰及 CA 的簽名。軟件提代碼簽名證書

    安全電子郵件證書符合 X.509 標準的數字安全證書,經過 IE 或 Netscape 申請,用 IE 申請的證書存儲於 WINDOWS 的註冊表中,用 NETSCAPE 申請的存儲於我的用戶目錄下的文件中。用於安全電子郵件或向須要客戶驗證的 WEB 服務器(https 服務) 代表身份。    我的代碼簽名證書    我的代碼簽名證書是 CA 中心簽發給軟件提供人的數字證書,包含軟件提供我的的身份信息、公鑰及 CA 的簽名。軟件提供人使用代碼簽名證書對軟件進行簽名後放到 Internet 上,當用戶在 Internet 上下載該軟件時,將會獲得提示,從而能夠確信:軟件的來源;軟件自簽名後到下載前,沒有遭到修改或破壞。代碼簽名證書能夠對 32-bit .exe 、 .cab 、 .ocx 、 .class 等程序和文件進行簽名。 從數字證書的技術角度分,CA中心發放的證書分爲兩類:SSL證書和SET證書。通常地說,SSL 證書(安全套接層)是服務於銀行對企業或企業對企業的電子商務活動的;而SET(安全電子交易)證書則服務於持卡消費、網上購物。雖然它們都是用於識別身份和數字簽名的證書,但它們的信任體系徹底不一樣,並且所符合的標準也不同。

相關文章
相關標籤/搜索