一、HTTPS簡介
HTTP我們已經很了解了,其實HTTPS,即HTTP + SSL / TLS,也就是在HTTP上又加了一層處理加密信息的模塊。服務端和客戶端的信息傳輸都會通過TLS進行加密,所以傳輸的數據都是加密后的數據。
SSL證書通過在客戶端瀏覽器和Web服務器之間建立一條SSL安全通道(Secure socketlayer(SSL),SSL安全協議主要用來提供對用戶和服務器的認證,對傳送的數據進行加密和隱藏,以確保數據在傳輸中不被篡改,即數據的完整性,現已成為該領域中全球化的標准。由於SSL技術已建立到所有主要的瀏覽器和web服務器中,因此,服務器端僅需安裝ssl證書就可以使用https功能了,保證了雙方傳遞信息的安全性,而且用戶可以通過服務器證書驗證他所訪問的網站是否是真實可靠。
SSL網站不同於一般的Web站點,它使用的是“HTTPS”協議,而不是普通的“HTTP”協議。因此它的URL(統一資源定位器)格式為“https://”,比如“https://www.baidu.com”。
二、SSL證書
ssl證書是https協議中最重要的部分,是由可信的第三方CA頒發的,用於通信雙方驗證對方的身份真實性。ssl證書根據不同的形式可以有多種分類。
按照安全等級,SSL證書分為三大類:
1、域名型https證書(DVSSL域名驗證類型):信任等級一般,只需驗證網站的真實性便可頒發證書保護網站。適用對象:中小型企業網站、中小型電子商務網站、電子郵局服務器、個人網站等。
2、企業型 https 證書(OVSSL組織驗證類型):信任等級強,須要驗證企業的身份,審核嚴格,安全性更高。適合對象:企業網站、電子商務網站、證券、金融機構。
3、增強型 https 證書(EVSSL擴展驗證類型):信任等級最高,一般用於銀行證券等金融機構,審核嚴格,安全性最高,同時可以激活綠色網址欄。
常用的SSL證書主要是域名型證書DV,又分為三種:單域名證書、多域名證書、通配符證書。
1、單域名SSL證書:只保護一個域名(包括帶www和不帶www)的SSL證書,可以是頂級域名也可以是二級域名,例如:abc.com以及www.abc.com或者bbs.abc.com。
2、多域名SSL證書:可以同時保護多個域名,不限制域名類型;例如:abc.com及它的子域、xyz.com及它的子域、nnn.com及它的子域等,最多可保護2~150個域名。
3、通配符證書:只能保護一個域名以及該域名的所有下一級域名,不限制域名數量;例如:abc.com及它的所有子域*.abc.com,*.*.abc.com等,沒有數量限制。
單域名、多域名、通配符SSL證書的區別就比較明顯,唯一難以區分的就是多域名SSL證書和通配符證書,而它們之間的區別就是多域名SSL證書可以保護不同的主域或者子域,一張證書最多保護2~150個,適合頂級域名多的用戶申請;通配符證書只能保護一個域名,以及該域名的所有下一級域名,不限制下一級域名數量,適合子域數量多的用戶申請。
按照SSL證書規范標准,目前主流的有如下兩種:
1、X509證書
X.509標准是密碼學里公鑰證書的格式標准。X.509證書己應用在包括TLS/SSL(www萬維網安全瀏覽的基石)在內的眾多 Internet協議里,同時它也有很多非在線的應用場景,比如電子簽名服務。X.509證書含有公鑰和標識(主機名、組織或個人),並由證書頒發機構(CA)簽名(或自簽名)。對於一份經由可信的證書簽發機構簽名(或者可以通過其它方式驗證)的證書,證書的擁有者就可以用證書及相應的私鑰來創建安全的通信,以及對文檔進行數字簽名。
在X.509系統中,證書申請者通過發起“證書簽名請求(CSR)”來得到一份被簽名的證書。為此,它需要提前生成一個密鑰對,然后用其中的私鑰對CSR簽名(私鑰本身要妥善保存,對外保密),CSR包含申請人的身份信息、用於驗真CSR的申請人的公鑰,以及所請求證書的專有名稱(DN),CSR還可能帶有CA要求的其它有關身份證明的信息,然后CA對這個專有名稱發布一份證書,並綁定一個公鑰。
組織機構可以把受信的根證書分發給所有的成員,這樣就可以使用公司的PKI系統了。像Firefox, IE, Opera, Safari 以及Google Chrome這些瀏覽器都預裝了一組CA根證書,所以可以直接使用這些主流CA發布的SSL證書。瀏覽器的開發者直接影響它的用戶對第三方的信任。X.509是常見通用的證書格式。所有的證書都符合為Public Key Infrastructure (PKI) 制定的 ITU-T X509 國際標准。
X.509 DER編碼(ASCII)的后綴是: .DER .CER .CRT
X.509 PAM編碼(Base64)的后綴是: .PEM .CER .CRT
.cer/.crt是用於存放證書,它是2進制形式存放的,不含私鑰。
.pem跟crt/cer的區別是它以Ascii來表示。
X.509證書的結構是用ASN.1(Abstract Syntax Notation One:抽象語法標記)來描述其數據結構,並使用ASN1語法進行編碼。X.509 v3數字證書的結構如下:
1、X.509證書基本部分
1.1. 版本號(Version)
——標識證書的版本(版本1、版本2或是版本3)。
1.2. 序列號(Serial Number)
——標識證書的唯一整數,由證書頒發者分配的本證書的唯一標識符。
1.3. 簽名(Signature)
——用於簽證書的算法標識,由對象標識符加上相關的參數組成,用於說明本證書所用的數字簽名算法。例如,SHA-1和RSA的對象標識符就用來說明該數字簽名是利用RSA對SHA-1雜湊加密。
1.4. 頒發者(Issuer:)
——證書頒發者的可識別名(DN)。
1.5. 有效期(Validity)
——證書有效期的時間段。本字段由”Not Before”和”Not After”兩項組成,它們分別由UTC時間或一般的時間表示(在RFC2459中有詳細的時間表示規則)。
1.6. 主體(Subject)
——證書擁有者的可識別名,這個字段必須是非空的,除非你在證書擴展中有別名。
1.7. 主體公鑰信息(Subject Public Key Info)
——主體的公鑰(以及算法標識符)。
1.8. 頒發者唯一標識符(Issuer Unique Identifier)
——標識符—證書頒發者的唯一標識符,僅在版本2和版本3中有要求,屬於可選項。
1.9. 主體唯一標識符(Subject Unique Identifier)
——證書擁有者的唯一標識符,僅在版本2和版本3中有要求,屬於可選項。
1.10.證書的擴展項(可選)
1.11.證書簽名算法
1.12.證書的簽名
2、PKCS證書
PKCS 全稱是 Public-Key Cryptography Standards ,是由 RSA 實驗室與其它安全系統開發商為促進公鑰密碼的發展而制訂的一系列標准,PKCS 目前共發布過 15 個標准。 常用的有:
PKCS#7 Cryptographic Message Syntax Standard
PKCS#10 Certification Request Standard
PKCS#12 Personal Information Exchange Syntax Standard
PKCS#7常用的后綴是: .P7B .P7C .SPC
PKCS#12常用的后綴有: .P12 .PFX
pfx/p12用於存放個人證書/私鑰,他通常包含保護密碼,2進制方式
p10是證書請求
p7r是CA對證書請求的回復,只用於導入
p7b以樹狀展示證書鏈(certificate chain),同時也支持單個證書,不含私鑰。
三、SSL協議
根據身份校驗方式的不同,SSL協議有單向驗證和雙向驗證區別的,兩者的應用場景和安全要求級別不一樣。
1、單向SSL
所謂單向SSL,即在安全連接建立之前,只有服務器一方提供ssl證書,客戶端只需要校驗服務器端證書的合法性即可,而客戶端不需要提供證書供服務器端驗證。
單向ssl協議交互過程如下圖所示:
由於單向ssl協議中,只有服務器端提供證書,客戶端不需要提供證書,所以服務器端是不需要校驗客戶端身份的合法性的。這種應用場景一般適合B2C業務,比如web站點,app api接口等。
2、雙向SSL
所謂雙向ssl,即在安全連接建立之前,客戶端——服務器端雙方都需要校驗對方的安全證書,以確保雙方身份的合法性。
雙向ssl協議交互過程如下圖所示:
雙向ssl協議在客戶端校驗完服務器端的身份后,還會提供自己的證書供服務器端校驗,所以雙向ssl協議的安全性相較單向ssl而言會更高。一般應用在對客戶端身份安全性要求更高的應用場景,比如B2B,SAAS,商戶服務模式等。之前項目中集成某銀行的電子錢包模塊,即使用了雙向ssl協議。