HTTPS相關(guān)

不使用SSL/TLS的HTTP通信歼培,就是不加密的通信褐啡。所有信息明文傳播冤议,帶來了三大風(fēng)險械馆。

  • 竊聽風(fēng)險(eavesdropping):第三方可以獲知通信內(nèi)容。
  • 篡改風(fēng)險(tampering):第三方可以修改通信內(nèi)容厌杜。
  • 冒充風(fēng)險(pretending):第三方可以冒充他人身份參與通信奉呛。

SSL/TLS協(xié)議是為了解決這三大風(fēng)險而設(shè)計的,希望達到:

  • 所有信息都是加密傳播夯尽,第三方無法竊聽瞧壮。
  • 具有校驗機制,一旦被篡改匙握,通信雙方會立刻發(fā)現(xiàn)咆槽。
  • 配備身份證書,防止身份被冒充圈纺。

https要知道的幾個加密算法:

  • 握手的時候使用的非對稱加密算法 秦忿,用來加密握手之后的請求和應(yīng)答
  • 傳輸信息的時候使用的對稱加密,
  • 保證數(shù)據(jù)的完整性用的是hash算法(數(shù)字簽名)

Https采用混合加密機制
也就是說采用共享密鑰加密(對稱加密)和公開密鑰加密(非對稱加密)兩者并用的混合加密機制蛾娶。
首先灯谣,考慮如果密鑰能夠?qū)崿F(xiàn)安全的交互,那么就會考慮只使用公開密鑰加密蛔琅。
但是胎许,公開密鑰加密與共享密鑰加密相比,其處理速度要慢揍愁。
綜上呐萨,應(yīng)該充分發(fā)揮各自的優(yōu)勢。在交換密鑰的環(huán)節(jié)使用公開密鑰加密(非對稱加密)莽囤,之后的建立通信交換報文階段使用共享密鑰加密方式谬擦。

但是,公開密鑰加密方式還是存在問題朽缎。那就是無法證明公開密鑰本身就是貨真價實的公開密鑰惨远。就是說要證明客戶端收到的公開密鑰就是原本預(yù)想的那臺服務(wù)器發(fā)行的公開密鑰(因為有可能公開密鑰在傳輸過程中谜悟,被攻擊者替換掉了)。

因此北秽,要解決上面的問題葡幸,就可以試用由數(shù)字證書認證機構(gòu)(CA,Certificate Authority)和其相關(guān)機關(guān)頒發(fā)的公開密鑰證書贺氓。

關(guān)于iOS證書:(大多數(shù)證書都會自動安裝蔚叨,因此通常不需要對證書執(zhí)行任何操作,但是有些app是需要下載安裝證書的)

  • 在 iOS 10.3 及更高版本中辙培,手動安裝包含證書有效負載的描述文件時蔑水,這個證書不會自動受 SSL 信任。
  • 在安裝通過電子郵件發(fā)送給您或從網(wǎng)站下載的描述文件時扬蕊,您必須手動開啟受 SSL 信任搀别。
  • 要為這個證書開啟受 SSL 信任,請前往“設(shè)置”>“通用”>“關(guān)于本機”>“證書信任設(shè)置”尾抑。在“針對根證書啟用完全信任”下歇父,開啟對這個證書的信任。
  • Apple 建議通過 Apple Configurator 或移動設(shè)備管理 (MDM) 來部署證書再愈。通過 Apple Configurator 或 MDM 安裝或者作為 MDM 注冊描述文件的一部分安裝的證書有效負載自動受 SSL 信任榜苫。

把Windows CA根證書安裝到iPhone

  • 在Ubuntu下,執(zhí)行如下命令把.cer轉(zhuǎn)換為.pem:
  • openssl x509 -in 1.cer -inform DER -out 2.pem -outform PEM
  • 把.pem放到IIS網(wǎng)站下践磅, IIS添加Mime Type单刁,.pem->application/x-pem-file灸异,在iPhone上用Safari打開.pem的URL即可安裝府适。

名詞解釋
1、簽名
簽名就是在信息的后面再加上一段內(nèi)容肺樟,可以證明信息沒有被修改過檐春,怎么樣可以達到這個效果呢?一般是對信息做一個hash計算得到一個hash值么伯,注意疟暖,這個過程是不可逆的,也就是說無法通過hash值得出原來的信息內(nèi)容田柔。在把信息發(fā)送出去時俐巴,把這個hash值加密后做為一個簽名和信息一起發(fā)出去。 接收方在收到信息后硬爆,會重新計算信息的hash值欣舵,并和信息所附帶的hash值(解密后)進行對比,如果一致缀磕,就說明信息的內(nèi)容沒有被修改過缘圈,因為這里hash計算可以保證不同的內(nèi)容一定會得到不同的hash值劣光,所以只要內(nèi)容一被修改,根據(jù)信息內(nèi)容計算的hash值就會變化糟把。當然绢涡,不懷好意的人也可以修改信息內(nèi)容的同時也修改hash值,從而讓它們可以相匹配遣疯,為了防止這種情況雄可,hash值一般都會加密后(也就是簽名)再和信息一起發(fā)送,以保證這個hash值不被修改缠犀。但是客戶端如何解密呢滞项?這就涉及到數(shù)字證書了。
2夭坪、公鑰私鑰
剛開始的時候以為https只能用公鑰進行加密文判,私鑰解密,后來看來“公鑰密碼體制”室梅,才知道戏仓,其實兩者都可以加密、解密亡鼠。
3赏殃、RSA(非對稱加密)
RSA是一種公鑰密碼體制,現(xiàn)在使用得很廣泛间涵。公鑰公開仁热,私鑰保密,它的加密解密算法是公開的勾哩。 由公鑰加密的內(nèi)容可以并且只能由私鑰進行解密抗蠢,并且由私鑰加密的內(nèi)容可以并且只能由公鑰進行解密。也就是說思劳,RSA的這一對公鑰迅矛、私鑰都可以用來加密和解密,并且一方加密的內(nèi)容可以由并且只能由對方進行解密潜叛』喟可用于驗證hTTPS中各種密鑰的加密。
4威兜、對稱加密
加密使用的密鑰和解密使用的密鑰是相同的销斟。因此對稱加密算法要保證安全性的話,密鑰要做好保密椒舵,只能讓使用的人知道蚂踊,不能對外公開。

通信流程
為了搞清楚逮栅,https是怎樣運轉(zhuǎn)的悴势,接下來是借鑒一篇博文窗宇,并稍加改動,形象易懂的解釋了整個流程特纤。step1: “客戶”向服務(wù)端發(fā)送一個通信請求“客戶”->“服務(wù)器”:你好
step2: “服務(wù)器”向客戶發(fā)送自己的數(shù)字證書军俊。證書中有一個公鑰用來加密信息,私鑰由“服務(wù)器”持有“服務(wù)器”->“客戶”:你好捧存,我是服務(wù)器粪躬,這里是我的數(shù)字證書
step3: “客戶”收到“服務(wù)器”的證書后,它會去驗證這個數(shù)字證書到底是不是“服務(wù)器”的昔穴,數(shù)字證書有沒有什么問題镰官,數(shù)字證書如果檢查沒有問題,就說明數(shù)字證書中的公鑰確實是“服務(wù)器”的吗货。檢查數(shù)字證書后泳唠,“客戶”會發(fā)送一個公鑰加密的隨機字符串給“服務(wù)器”,讓服務(wù)器用私鑰去加密(檢查數(shù)字證書宙搬,后文介紹)“客戶”->“服務(wù)器”:向我證明你就是服務(wù)器笨腥,這是一個隨機字符串step4:服務(wù)器把加密的結(jié)果返回給“客戶”∮露猓“服務(wù)器”->“客戶”:{一個隨機字符串}(用私鑰進行RSA加密)
step5:“客戶”用公鑰解密這個返回結(jié)果脖母,如果解密結(jié)果與之前生成的隨機字符串一致,那說明對方確實是私鑰的持有者闲孤,或者說對方確實是“服務(wù)器”谆级。 驗證“服務(wù)器”的身份后,“客戶”生成一個對稱加密算法和密鑰讼积,用于后面的通信的加密和解密肥照。這個對稱加密算法和密鑰,“客戶”會用公鑰加密后發(fā)送給“服務(wù)器”币砂,別人截獲了也沒用建峭,因為只有“服務(wù)器”手中有可以解密的私鑰玻侥。這樣决摧,后面“服務(wù)器”和“客戶”就都可以用對稱加密算法來加密和解密通信內(nèi)容了〈绽迹“服務(wù)器”->“客戶”:{OK掌桩,已經(jīng)收到你發(fā)來的對稱加密算法和密鑰!有什么可以幫到你的姑食?}(用密鑰進行對稱加密)“客戶”->“服務(wù)器”:{我的帳號是aaa波岛,密碼是123,把我的余額的信息發(fā)給我看看}(用密鑰進行對稱加密)“服務(wù)器”->“客戶”:{你好音半,你的余額是100元}(用密鑰進行對稱加密)

握手與密鑰協(xié)商真正過程
(1).client_hello
客戶端發(fā)起請求则拷,以明文傳輸請求信息贡蓖,包含版本信息,加密套件候選列表煌茬,壓縮算法候選列表斥铺,隨機數(shù),擴展字段等信息坛善,相關(guān)信息如下:
支持的最高TSL協(xié)議版本version晾蜘,從低到高依次 SSLv2 SSLv3 TLSv1 TLSv1.1 TLSv1.2,當前基本不再使用低于 TLSv1 的版本;
客戶端支持的加密套件 cipher suites 列表眠屎, 每個加密套件對應(yīng)前面 TLS 原理中的四個功能的組合:認證算法 Au (身份驗證)剔交、密鑰交換算法 KeyExchange(密鑰協(xié)商)、對稱加密算法 Enc (信息加密)和信息摘要 Mac(完整性校驗);
支持的壓縮算法 compression methods 列表改衩,用于后續(xù)的信息壓縮傳輸;
隨機數(shù) random_C岖常,用于后續(xù)的密鑰的生成;
擴展字段 extensions,支持協(xié)議與算法的相關(guān)參數(shù)以及其它輔助信息等葫督,常見的 SNI 就屬于擴展字段腥椒,后續(xù)單獨討論該字段作用。
(2).server_hello+server_certificate+sever_hello_done
(a) server_hello, 服務(wù)端返回協(xié)商的信息結(jié)果候衍,包括選擇使用的協(xié)議版本 version笼蛛,選擇的加密套件 cipher suite,選擇的壓縮算法 compression method蛉鹿、隨機數(shù) random_S 等滨砍,其中隨機數(shù)用于后續(xù)的密鑰協(xié)商;
(b)server_certificates, 服務(wù)器端配置對應(yīng)的證書鏈,用于身份驗證與密鑰交換;
(c) server_hello_done妖异,通知客戶端 server_hello 信息發(fā)送結(jié)束;
(3).證書校驗
客戶端驗證證書的合法性惋戏,如果驗證通過才會進行后續(xù)通信,否則根據(jù)錯誤情況不同做出提示和操作他膳,合法性驗證包括如下:
證書鏈的可信性 trusted certificate path响逢,方法如前文所述;
證書是否吊銷 revocation,有兩類方式離線 CRL 與在線 OCSP棕孙,不同的客戶端行為會不同;
有效期 expiry date舔亭,證書是否在有效時間范圍;
域名 domain,核查證書域名是否與當前的訪問域名匹配蟀俊,匹配規(guī)則后續(xù)分析;
(4).client_key_exchange+change_cipher_spec+encrypted_handshake_message
(a) client_key_exchange钦铺,合法性驗證通過之后,客戶端計算產(chǎn)生隨機數(shù)字 Pre-master肢预,并用證書公鑰加密矛洞,發(fā)送給服務(wù)器;
(b) 此時客戶端已經(jīng)獲取全部的計算協(xié)商密鑰需要的信息:兩個明文隨機數(shù) random_C 和 random_S 與自己計算產(chǎn)生的 Pre-master,計算得到協(xié)商密鑰;
enc_key=Fuc(random_C, random_S, Pre-Master)
(c) change_cipher_spec烫映,客戶端通知服務(wù)器后續(xù)的通信都采用協(xié)商的通信密鑰和加密算法進行加密通信;
(d) encrypted_handshake_message沼本,結(jié)合之前所有通信參數(shù)的 hash 值與其它相關(guān)信息生成一段數(shù)據(jù)噩峦,采用協(xié)商密鑰 session secret 與算法進行加密,然后發(fā)送給服務(wù)器用于數(shù)據(jù)與握手驗證;
(5).change_cipher_spec+encrypted_handshake_message
(a) 服務(wù)器用私鑰解密加密的 Pre-master 數(shù)據(jù)抽兆,基于之前交換的兩個明文隨機數(shù) random_C 和 random_S壕探,計算得到協(xié)商密鑰:enc_key=Fuc(random_C, random_S, Pre-Master);
(b) 計算之前所有接收信息的 hash 值,然后解密客戶端發(fā)送的 encrypted_handshake_message郊丛,驗證數(shù)據(jù)和密鑰正確性;
(c) change_cipher_spec, 驗證通過之后李请,服務(wù)器同樣發(fā)送 change_cipher_spec 以告知客戶端后續(xù)的通信都采用協(xié)商的密鑰與算法進行加密通信;
(d) encrypted_handshake_message, 服務(wù)器也結(jié)合所有當前的通信參數(shù)信息生成一段數(shù)據(jù)并采用協(xié)商密鑰 session secret 與算法加密并發(fā)送到客戶端;
(6).握手結(jié)束
客戶端計算所有接收信息的 hash 值,并采用協(xié)商密鑰解密 encrypted_handshake_message厉熟,驗證服務(wù)器發(fā)送的數(shù)據(jù)和密鑰导盅,驗證通過則握手完成;
(7).加密通信
開始使用協(xié)商密鑰與算法進行加密通信。

數(shù)字證書
主要包含這幾大塊:?證書的發(fā)布機構(gòu) ?證書的有效期 ?公鑰 ?證書所有者(Subject) ?簽名所使用的算法 這個數(shù)字證書的數(shù)字簽名所使用的加密算法揍瑟,這樣就可以使用證書發(fā)布機構(gòu)的證書里面的公鑰白翻,根據(jù)這個算法對指紋進行解密。解密結(jié)果就是簽名绢片。?指紋以及指紋算法 這個是用來保證證書的完整性的滤馍,也就是說確保證書沒有被修改過。 其原理就是在發(fā)布證書時底循,發(fā)布者根據(jù)指紋算法(一個hash算法)計算整個證書的hash值(指紋)并和證書放在一起巢株,使用者在打開證書時,自己也根據(jù)指紋算法計算一下證書的hash值(指紋)熙涤,如果和剛開始的值對得上阁苞,就說明證書沒有被修改過,因為證書的內(nèi)容被修改后祠挫,根據(jù)證書的內(nèi)容計算的出的hash值(指紋)是會變化的那槽。 注意,這個指紋會使用"SecureTrust CA"這個證書機構(gòu)的私鑰用簽名算法(Signature algorithm)加密后和證書放在一起.  注意等舔,為了保證安全骚灸,在證書的發(fā)布機構(gòu)發(fā)布證書時,證書的指紋和指紋算法慌植,都會加密后再和證書放到一起發(fā)布甚牲,以防有人修改指紋后偽造相應(yīng)的數(shù)字證書。這里問題又來了涤浇,證書的指紋和指紋算法用什么加密呢鳖藕?他們是用證書發(fā)布機構(gòu)的私鑰進行加密的≈欢В可以用證書發(fā)布機構(gòu)的公鑰對指紋和指紋算法解密,也就是說證書發(fā)布機構(gòu)除了給別人發(fā)布證書外院尔,他自己本身也有自己的證書蜻展。證書發(fā)布機構(gòu)的證書是哪里來的呢喉誊??纵顾?這個證書發(fā)布機構(gòu)的數(shù)字證書(一般由他自己生成)在我們的操作系統(tǒng)剛安裝好時(例如windows xp等操作系統(tǒng))伍茄,這些證書發(fā)布機構(gòu)的數(shù)字證書就已經(jīng)被微軟(或者其它操作系統(tǒng)的開發(fā)機構(gòu))安裝在操作系統(tǒng)中了,微軟等公司會根據(jù)一些權(quán)威安全機構(gòu)的評估選取一些信譽很好并且通過一定的安全認證的證書發(fā)布機構(gòu)施逾,把這些證書發(fā)布機構(gòu)的證書默認就安裝在操作系統(tǒng)里面了敷矫,并且設(shè)置為操作系統(tǒng)信任的數(shù)字證書。這些證書發(fā)布機構(gòu)自己持有與他自己的數(shù)字證書對應(yīng)的私鑰汉额,他會用這個私鑰加密所有他發(fā)布的證書的指紋作為數(shù)字簽名曹仗。  首先應(yīng)用程序(對方通信用的程序蠕搜,例如IE怎茫、OUTLook等)讀取證書中的Issuer(發(fā)布機構(gòu))為"SecureTrust CA" ,然后會在操作系統(tǒng)中受信任的發(fā)布機構(gòu)的證書中去找"SecureTrust CA"的證書妓灌,如果找不到轨蛤,那說明證書的發(fā)布機構(gòu)是個水貨發(fā)布機構(gòu),證書可能有問題虫埂,程序會給出一個錯誤信息祥山。 如果在系統(tǒng)中找到 了"SecureTrust CA"的證書,那么應(yīng)用程序就會從證書中取出"SecureTrust CA"的公鑰掉伏,然后對我們"ABC Company"公司的證書里面的指紋和指紋算法用這個公鑰進行解密枪蘑,然后使用這個指紋算法計算"ABC Company"證書的指紋,將這個計算的指紋與放在證書中的指紋對比岖免,如果一致岳颇,說明"ABC Company"的證書肯定沒有被修改過并且證書是"SecureTrust CA" 發(fā)布的,證書中的公鑰肯定是"ABC Company"

證書:

  • jks為密鑰倉庫颅湘,存放公鑰和私鑰话侧。
  • pfx格式的數(shù)字證書是包含有私鑰的 cer格式的數(shù)字證書里面只有公鑰沒有私鑰。

公開密鑰加密:使用一對非對稱的密鑰闯参,一把叫做私鑰瞻鹏,領(lǐng)一把叫做公鑰,也叫非對稱密鑰加密鹿寨。
共享密鑰加密:加密解密同用一個密鑰新博,也叫對稱加密。

?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末脚草,一起剝皮案震驚了整個濱河市赫悄,隨后出現(xiàn)的幾起案子,更是在濱河造成了極大的恐慌,老刑警劉巖埂淮,帶你破解...
    沈念sama閱讀 222,627評論 6 517
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件姑隅,死亡現(xiàn)場離奇詭異,居然都是意外死亡倔撞,警方通過查閱死者的電腦和手機讲仰,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 95,180評論 3 399
  • 文/潘曉璐 我一進店門,熙熙樓的掌柜王于貴愁眉苦臉地迎上來痪蝇,“玉大人鄙陡,你說我怎么就攤上這事□飭” “怎么了趁矾?”我有些...
    開封第一講書人閱讀 169,346評論 0 362
  • 文/不壞的土叔 我叫張陵,是天一觀的道長丙唧。 經(jīng)常有香客問我愈魏,道長,這世上最難降的妖魔是什么想际? 我笑而不...
    開封第一講書人閱讀 60,097評論 1 300
  • 正文 為了忘掉前任培漏,我火速辦了婚禮,結(jié)果婚禮上胡本,老公的妹妹穿的比我還像新娘牌柄。我一直安慰自己,他們只是感情好侧甫,可當我...
    茶點故事閱讀 69,100評論 6 398
  • 文/花漫 我一把揭開白布珊佣。 她就那樣靜靜地躺著,像睡著了一般披粟。 火紅的嫁衣襯著肌膚如雪咒锻。 梳的紋絲不亂的頭發(fā)上,一...
    開封第一講書人閱讀 52,696評論 1 312
  • 那天守屉,我揣著相機與錄音惑艇,去河邊找鬼。 笑死拇泛,一個胖子當著我的面吹牛滨巴,可吹牛的內(nèi)容都是我干的。 我是一名探鬼主播俺叭,決...
    沈念sama閱讀 41,165評論 3 422
  • 文/蒼蘭香墨 我猛地睜開眼恭取,長吁一口氣:“原來是場噩夢啊……” “哼!你這毒婦竟也來了熄守?” 一聲冷哼從身側(cè)響起蜈垮,我...
    開封第一講書人閱讀 40,108評論 0 277
  • 序言:老撾萬榮一對情侶失蹤耗跛,失蹤者是張志新(化名)和其女友劉穎,沒想到半個月后窃款,有當?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體课兄,經(jīng)...
    沈念sama閱讀 46,646評論 1 319
  • 正文 獨居荒郊野嶺守林人離奇死亡牍氛,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點故事閱讀 38,709評論 3 342
  • 正文 我和宋清朗相戀三年晨继,在試婚紗的時候發(fā)現(xiàn)自己被綠了。 大學(xué)時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片搬俊。...
    茶點故事閱讀 40,861評論 1 353
  • 序言:一個原本活蹦亂跳的男人離奇死亡紊扬,死狀恐怖,靈堂內(nèi)的尸體忽然破棺而出唉擂,到底是詐尸還是另有隱情餐屎,我是刑警寧澤,帶...
    沈念sama閱讀 36,527評論 5 351
  • 正文 年R本政府宣布玩祟,位于F島的核電站腹缩,受9級特大地震影響,放射性物質(zhì)發(fā)生泄漏空扎。R本人自食惡果不足惜藏鹊,卻給世界環(huán)境...
    茶點故事閱讀 42,196評論 3 336
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望转锈。 院中可真熱鬧盘寡,春花似錦、人聲如沸撮慨。這莊子的主人今日做“春日...
    開封第一講書人閱讀 32,698評論 0 25
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽砌溺。三九已至影涉,卻和暖如春,著一層夾襖步出監(jiān)牢的瞬間规伐,已是汗流浹背蟹倾。 一陣腳步聲響...
    開封第一講書人閱讀 33,804評論 1 274
  • 我被黑心中介騙來泰國打工, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留楷力,地道東北人喊式。 一個月前我還...
    沈念sama閱讀 49,287評論 3 379
  • 正文 我出身青樓,卻偏偏與公主長得像萧朝,于是被迫代替她去往敵國和親岔留。 傳聞我的和親對象是個殘疾皇子,可洞房花燭夜當晚...
    茶點故事閱讀 45,860評論 2 361

推薦閱讀更多精彩內(nèi)容