偷偷摘套内射激情视频,久久精品99国产国产精,中文字幕无线乱码人妻,中文在线中文a,性爽19p

深入理解HTTPS原理、過程與實(shí)踐

開發(fā) 后端
HTTP是不安全的,我們的頁(yè)面也被運(yùn)營(yíng)商插入過小黃圖廣告(數(shù)據(jù)被篡改),對(duì)于HTTP來(lái)說,再簡(jiǎn)單不過,只需要設(shè)定相應(yīng)的DNS,做一個(gè)中間人攻擊,再將修改后的數(shù)據(jù)返回,這一方面可能泄露用戶隱私數(shù)據(jù),同時(shí)也對(duì)我們的品牌形象產(chǎn)生惡劣影響。

引言

HTTP是不安全的,我們的頁(yè)面也被運(yùn)營(yíng)商插入過小黃圖廣告(數(shù)據(jù)被篡改),對(duì)于HTTP來(lái)說,再簡(jiǎn)單不過,只需要設(shè)定相應(yīng)的DNS,做一個(gè)中間人攻擊,再將修改后的數(shù)據(jù)返回,這一方面可能泄露用戶隱私數(shù)據(jù),同時(shí)也對(duì)我們的品牌形象產(chǎn)生惡劣影響。

然而,當(dāng)我們切換HTTPS時(shí)候,運(yùn)營(yíng)商的這些小九九就施展不開了,服務(wù)端認(rèn)證不通過,瀏覽器不會(huì)展示相應(yīng)的頁(yè)面數(shù)據(jù);運(yùn)營(yíng)商實(shí)施搞的這一套東東也就不能在用戶不知情的情況下搞起來(lái)了,解決辦法是去除相應(yīng)的受污染的DNS。

全球最大的成人網(wǎng)站PornHub,YouPorn都要全面切HTTPS了,我們還在猶豫什么了?

[[190336]]

安全的HTTP的需求

對(duì)HTTP的安全需求:

  • 加密(客戶端和服務(wù)器的對(duì)話是私密的,無(wú)須擔(dān)心被竊聽)
  • 服務(wù)端認(rèn)證(客戶端知道它們是在與真正的而不是偽造的服務(wù)器通信)
  • 客戶端認(rèn)證(服務(wù)器知道它們是在與真正的而不是偽造的客戶端通信)
  • 完整性(客戶端和服務(wù)器的數(shù)據(jù)不會(huì)被修改)
  • 效率(一個(gè)運(yùn)行足夠快的算法,一遍低端的客戶端和服務(wù)器使用)
  • 普適性(基本上所有的客戶端和服務(wù)器都支持這些協(xié)議)
  • 管理的可擴(kuò)展性(在任何地方的任何人都可以立即進(jìn)行安全通信)
  • 適應(yīng)性(能夠支持當(dāng)前最知名的安全方法)
  • 在社會(huì)上的可行性(滿足社會(huì)的政治文化需要),要有公眾受信能力

在這里面最重要的是前面幾條

  • 數(shù)據(jù)加密 傳輸內(nèi)容進(jìn)行混淆
  • 身份驗(yàn)證 通信雙方驗(yàn)證對(duì)方的身份真實(shí)性
  • 數(shù)據(jù)完整性保護(hù) 檢測(cè)傳輸?shù)膬?nèi)容是否被篡改或偽造

安全HTTP的實(shí)現(xiàn)

加密方式的選擇

共享密鑰加密 對(duì)稱密鑰加密

共享密鑰加密方式使用相同的密鑰進(jìn)行加密解密,通信雙方都需要接收對(duì)方的加密密鑰進(jìn)行數(shù)據(jù)解密,這種方式在通信過程中必須交互共享的密鑰,同樣無(wú)法避免被網(wǎng)絡(luò)監(jiān)聽泄漏密鑰的問題;同時(shí)對(duì)于眾多客戶端的服務(wù)器來(lái)說還需要分配和管理密鑰,對(duì)于客戶端來(lái)說也需要管理密鑰,增加設(shè)計(jì)和實(shí)現(xiàn)的復(fù)雜度,同時(shí)也降低了通信的效率;不用看都不靠譜。

公開密鑰加密

公開密鑰加密方式使用一對(duì)非對(duì)稱的密鑰對(duì)(私鑰和公鑰),不公開的作為私鑰,隨意分發(fā)的作為公鑰;公鑰和私鑰都能進(jìn)行數(shù)據(jù)加密和解密,公鑰能解密私鑰加密的數(shù)據(jù),私鑰也能解密公鑰加密的數(shù)據(jù);這樣只需要一套密鑰就能處理服務(wù)端和眾多客戶端直接的通信被網(wǎng)絡(luò)監(jiān)聽泄漏密鑰的問題,同時(shí)沒有額外的管理成本;看起來(lái)挺合適。

沒那么簡(jiǎn)單

公開密鑰加密安全性高,伴隨著加密方式復(fù)雜,處理速度慢的問題。如果我們的通信都是用公開密鑰的方式加密,那么通信效率會(huì)很低。

HTTPS采用共享密鑰加密和公開密鑰加密混合的加密方式,在交換密鑰對(duì)環(huán)節(jié)使用公開密鑰加密方式(防止被監(jiān)聽泄漏密鑰)加密共享的密鑰,在隨后的通信過程中使用共享密鑰的方式使用共享的密鑰進(jìn)行加解密。

認(rèn)證方式實(shí)現(xiàn)

數(shù)字證書

數(shù)字簽名是附加在報(bào)文上的特殊加密校驗(yàn)碼,可以證明是作者編寫了這條報(bào)文,前提是作者才會(huì)有私鑰,才能算出這些校驗(yàn)碼。如果傳輸?shù)膱?bào)文被篡改,則校驗(yàn)碼不會(huì)匹配,因?yàn)樾r?yàn)碼只有作者保存的私鑰才能產(chǎn)生,所以前面可以保證報(bào)文的完整性。

數(shù)字證書認(rèn)證機(jī)構(gòu)(Certificate Authority CA)是客戶端和服務(wù)器雙方都可信賴的第三方機(jī)構(gòu)。

服務(wù)器的運(yùn)營(yíng)人員向數(shù)字證書認(rèn)證機(jī)構(gòu)提出證書認(rèn)證申請(qǐng),數(shù)字證書認(rèn)證機(jī)構(gòu)在判明申請(qǐng)者的身份之后,會(huì)對(duì)已申請(qǐng)的公開密鑰做數(shù)字簽名,然后分配這個(gè)已簽名的公開密鑰,并將該公開密鑰放入公鑰證書(也叫數(shù)字證書或證書)后綁定在一起。服務(wù)器將這份有數(shù)字認(rèn)證機(jī)構(gòu)頒發(fā)的公鑰證書發(fā)總給客戶端,以進(jìn)行公開密鑰加密方式通信。

EV SSL(Extended Validation SSL Certificate)證書是基于國(guó)際標(biāo)準(zhǔn)的認(rèn)證指導(dǎo)方針辦法的證書,通過認(rèn)證的Web網(wǎng)站能獲得更高的認(rèn)可度。持有EV SSL證書的Web網(wǎng)站的瀏覽器地址欄的背景色是綠色的,同時(shí)在地址欄的左側(cè)顯示了SSL證書中記錄的組織名稱及辦法證書的認(rèn)證機(jī)構(gòu)的名稱。

使用OpenSSL,每個(gè)人都可以構(gòu)建一套認(rèn)證機(jī)構(gòu)文件,同時(shí)可以用來(lái)給自己的證書請(qǐng)求進(jìn)行簽名,這種方式產(chǎn)生的證書稱為自簽名證書,這種證書通常是CA自己的證書,用戶開發(fā)測(cè)試的正式,也可以像12306這樣的,信不信由你。

證書信任的方式

  • 操作系統(tǒng)和瀏覽器內(nèi)置每個(gè)操作系統(tǒng)和大多數(shù)瀏覽器都會(huì)內(nèi)置一個(gè)知名證書頒發(fā)機(jī)構(gòu)的名單。因此,你也會(huì)信任操作系統(tǒng)及瀏覽器提供商提供和維護(hù)的可信任機(jī)構(gòu)。受信認(rèn)證機(jī)構(gòu)(也有不受信的,比如賽門鐵克,沃通,或者像2011年被入侵的DigiNotar等)的證書一般會(huì)被操作系統(tǒng)或者瀏覽器在發(fā)行或者發(fā)布時(shí)內(nèi)置。
  • 證書頒發(fā)機(jī)構(gòu)CA( Certificate Authority,證書頒發(fā)機(jī)構(gòu))是被證書接受者(擁有者)和依賴證書的一方共同信任的第三方。
  • 手動(dòng)指定證書所有瀏覽器和操作系統(tǒng)都提供了一種手工導(dǎo)入信任證書的機(jī)制。至于如何獲得證書和驗(yàn)證完整性則完全由你自己來(lái)定。

PKI(Public Key Infrastructure),即公開密鑰基礎(chǔ)設(shè)施,是國(guó)際上解決開放式互聯(lián)網(wǎng)絡(luò)信息安全需求的一套體系。PKI支持身份認(rèn)證,信息傳輸,存儲(chǔ)的完整性,消息傳輸,存儲(chǔ)的機(jī)密性以及操作的不可否認(rèn)性。

數(shù)據(jù)完整性

數(shù)字簽名是只有信息發(fā)送者才能產(chǎn)生的別人無(wú)法偽造的一段文本,這段文本是對(duì)信息發(fā)送者發(fā)送信息真實(shí)性的一個(gè)有效證明,具有不可抵賴性。

報(bào)文的發(fā)送方從報(bào)文文本生成一個(gè)128位的散列值(或稱為報(bào)文摘要活哈希值),發(fā)送方使用自己的私鑰對(duì)這個(gè)摘要值進(jìn)行加密來(lái)形成發(fā)送方的數(shù)字簽名。然后這個(gè)數(shù)字簽名將作為報(bào)文的附件一起發(fā)送給報(bào)文的接收方。報(bào)文的接收方首先從接收到的原始報(bào)文中計(jì)算出128位的散列值,再用發(fā)送方的公鑰來(lái)對(duì)報(bào)文附加的數(shù)字簽名進(jìn)行解密。如果兩次得到的結(jié)果是一致的那么接收方可以確認(rèn)該數(shù)字簽名是發(fā)送方的,同時(shí)確認(rèn)信息是真實(shí)的 。

HTTPS數(shù)據(jù)交互過程

HTTP中沒有加密機(jī)制,可以通過SSL(Secure Socket Layer 安全套接層)或TLS(Transport Layer Security 安全層傳輸協(xié)議)的組合使用,加密HTTP的通信內(nèi)容。

HTTPS是 HTTP Secure 或 HTTP over SSL。

SSL(Security Socket Layer)是最初由網(wǎng)景公司(NetScape)為了保障網(wǎng)上交易安全而開發(fā)的協(xié)議,該協(xié)議通過加密來(lái)保護(hù)客戶個(gè)人資料,通過認(rèn)證和完整性檢查來(lái)確保交易安全。網(wǎng)景公司開發(fā)過SSL3.0之前的版本;目前主導(dǎo)權(quán)已轉(zhuǎn)移給IETF(Internet Engineering Task Force),IETF以SSL3.0為原型,標(biāo)準(zhǔn)化并制定了TSL1.0,TLS1.1,TLS1.2。但目前主流的還是SSL3.0和TSL1.0。

SSL工作在OSI七層模型中的表示層,TCP/IP 四層模型的應(yīng)用層。

SSL 和 TLS 可以作為基礎(chǔ)協(xié)議的一部分(對(duì)應(yīng)用透明),也可以嵌入在特定的軟件包中(比如Web服務(wù)器中的實(shí)現(xiàn))。

SSL 基于TCP,SSL不是簡(jiǎn)單地單個(gè)協(xié)議,而是兩層協(xié)議;SSL記錄協(xié)議(SSL Record Protocol)為多種高層協(xié)議(SSL握手協(xié)議,SSL修改密碼參數(shù)協(xié)議,SSL報(bào)警協(xié)議)提供基本的安全服務(wù)。HTTP是為Web客戶端/服務(wù)器交互提供傳輸服務(wù)的,它可以在SSL的頂層運(yùn)行;SSL記錄協(xié)議為SSL鏈接提供兩種服務(wù),機(jī)密性:握手協(xié)議定義了一個(gè)共享密鑰,用于SSL載荷的對(duì)稱加密。 消息完整性:握手協(xié)議還定義了一個(gè)共享密鑰,它用來(lái)產(chǎn)生一個(gè)消息認(rèn)證碼(Message Authentication Code,MAC)。

SSL記錄協(xié)議操作

  • 分段 將每個(gè)上層消息分解成不大于2^14(16384)位,然后有選擇的進(jìn)行壓縮
  • 添加MAC 在壓縮數(shù)據(jù)的基礎(chǔ)上計(jì)算MAC
  • 加密 消息加上MAC用對(duì)稱加密方法加密
  • 添加SSL記錄頭 內(nèi)容類型(8位),主版本(8位),副版本(8位),壓縮長(zhǎng)度(16位)

SSL握手過程

  • 第一階段 建立安全能力 包括協(xié)議版本 會(huì)話Id 密碼構(gòu)件 壓縮方法和初始隨機(jī)數(shù)
  • 第二階段 服務(wù)器發(fā)送證書 密鑰交換數(shù)據(jù)和證書請(qǐng)求,最后發(fā)送請(qǐng)求-相應(yīng)階段的結(jié)束信號(hào)
  • 第三階段 如果有證書請(qǐng)求客戶端發(fā)送此證書 之后客戶端發(fā)送密鑰交換數(shù)據(jù) 也可以發(fā)送證書驗(yàn)證消息
  • 第四階段 變更密碼構(gòu)件和結(jié)束握手協(xié)議

SSL協(xié)議兩個(gè)重要概念,SSL會(huì)話,SSL連接;SSL連接是點(diǎn)到點(diǎn)的連接,而且每個(gè)連接都是瞬態(tài)的,每一個(gè)鏈接都與一個(gè)會(huì)話關(guān)聯(lián)。SSL會(huì)話是一個(gè)客戶端和一個(gè)服務(wù)器之間的一種關(guān)聯(lián),會(huì)話由握手協(xié)議(Handshake Protocol)創(chuàng)建,所有會(huì)話都定義了一組密碼安全參數(shù),這些安全參數(shù)可以在多個(gè)連接之間共享,會(huì)話可以用來(lái)避免每一個(gè)鏈接需要進(jìn)行的代價(jià)高昂的新的安全參數(shù)協(xié)商過程。

      Client                                               Server

      ClientHello:HandShake       -------->
                                                      ServerHello:Handshake
                                                     Certificate*:Handshake
                                               ServerKeyExchange*:Handshake
                                              CertificateRequest*:Handshake
                                   <--------      ServerHelloDone:Handshake
      Certificate*:Handshake
      ClientKeyExchange:Handshake
      CertificateVerify*:Handshake
      [ChangeCipherSpec]
      Finished:Handshake           -------->
                                                         [ChangeCipherSpec]
                                   <--------             Finished:Handshake
      Application Data             <------->               Application Data

客戶端服務(wù)器數(shù)據(jù)交互實(shí)戰(zhàn)

使用openssl命令

openssl s_client -state -connect q.qunarzz.com:443

該命令可以顯示SSL握手過程,SSL證書鏈,公鑰證書以及其他相關(guān)的狀態(tài)和屬性信息。

使用Wireshark抓取數(shù)據(jù)包

相關(guān)配置

  • 配置環(huán)境變量,同時(shí)保證文件路徑存在
    SSLKEYLOG=/path/to/sslkeylog.log
  • 配置Wireshark
    Wireshark->Preference->Protocols->SSL->(Pre)-Master-Secret log filename=>選擇上面的路徑

抓包操作

  • 在命令行中打開Chrome或者Firefox,確保環(huán)境變量被讀取;如果不行就用Chrome或者Firefox的開發(fā)版。
    open /Applications/Firefox.app
    open /Applications/Google\ Chrome.app
  • 確保$SSLKEYLOGFILE里面有內(nèi)容了,再往下進(jìn)行。
  • 選擇對(duì)應(yīng)網(wǎng)卡,抓包配置為host http://q.qunarzz.com,開始抓包
  • 使用剛剛打開的瀏覽器訪問一個(gè)對(duì)應(yīng)host http://q.qunarzz.com下的某個(gè)資源,在抓包界面使用ssl過濾數(shù)據(jù)
  • 在抓包界面可以看到對(duì)應(yīng)的SSL握手信息,同時(shí)還能看到解密后的應(yīng)用數(shù)據(jù)。

內(nèi)容解析(不同的網(wǎng)絡(luò)資源可能不完全一致,比如需要客戶端證書)

客戶端⇒服務(wù)器

  • Client Hello
    • 最高支持的協(xié)議版本 如TLS 1.0
    • 支持的加密算法列表(Cipher Suites)
    • 支持的壓縮算法列表(Compression Methods)
    • 客戶端生成的隨機(jī)數(shù),稍后用于生成會(huì)話密鑰

服務(wù)器⇒客戶端

  • Server Hello
    • 選定的協(xié)議版本
    • 選定的加密算法
    • 選定的壓縮方法
    • 服務(wù)端生成的隨機(jī)數(shù),稍后用于生成會(huì)話密鑰
  • Certificate 證書內(nèi)容
  • Server Key Exchange, Server Hello Done
    • 公鑰
    • 數(shù)字簽名
    • Server Hello Done

客戶端⇒服務(wù)器

  • Client Key Exchange, Change Cipher Spec, Finished
    • 公鑰
    • Change Cipher Spec
    • Finished

客戶端⇒服務(wù)器

  • HTTP GET

服務(wù)端⇒客戶端

  • 內(nèi)容的數(shù)據(jù)片段信息
  • HTTP HTTP/1.1 200 OK

服務(wù)端⇒客戶端

  • Encrypted Alert
  • Alert (Level Warning, Description: Close Notify)

參考資料

  1. 《Web性能權(quán)威指南》
  2. 《RFC 2246》
  3. 《圖解HTTP》
  4. 《HTTP權(quán)威指南》
  5. 《HTTPS權(quán)威指南 在服務(wù)器和Web應(yīng)用上部署SSL/TLS和PKI》
  6. 《計(jì)算機(jī)網(wǎng)絡(luò)系統(tǒng)方法》
  7. 《計(jì)算機(jī)網(wǎng)絡(luò)自上而下方法》
  8. 《計(jì)算機(jī)安全原理與實(shí)踐》
  9. 《網(wǎng)絡(luò)安全基礎(chǔ)-應(yīng)用與標(biāo)準(zhǔn)》
  10. 《PKI/CA與數(shù)字證書技術(shù)大全》
  11. 《SSL與TLS》
  12. 《OpenSSL官方命令文檔》
  13. 《OpenSSL與網(wǎng)絡(luò)信息安全-基礎(chǔ)、結(jié)構(gòu)和指令》
  14. 《OpenSSL攻略》
  15. Wireshark Doc SSL
責(zé)任編輯:張燕妮 來(lái)源: 張釕
相關(guān)推薦

2024-05-23 08:02:23

2024-12-02 11:39:30

2017-05-04 15:36:54

Openstack Q實(shí)現(xiàn)實(shí)踐

2022-11-04 09:43:05

Java線程

2022-09-05 08:39:04

kubernetesk8s

2024-03-12 00:00:00

Sora技術(shù)數(shù)據(jù)

2021-03-10 10:55:51

SpringJava代碼

2024-11-01 08:57:07

2020-08-10 18:03:54

Cache存儲(chǔ)器CPU

2024-04-15 00:00:00

技術(shù)Attention架構(gòu)

2025-09-08 07:14:25

2024-08-15 08:11:10

2023-09-19 22:47:39

Java內(nèi)存

2022-01-14 12:28:18

架構(gòu)OpenFeign遠(yuǎn)程

2020-03-26 16:40:07

MySQL索引數(shù)據(jù)庫(kù)

2022-09-26 08:01:31

線程LIFO操作方式

2019-07-01 13:34:22

vue系統(tǒng)數(shù)據(jù)

2020-03-17 08:36:22

數(shù)據(jù)庫(kù)存儲(chǔ)Mysql

2023-10-13 13:30:00

MySQL鎖機(jī)制

2020-11-04 15:35:13

Golang內(nèi)存程序員
點(diǎn)贊
收藏

51CTO技術(shù)棧公眾號(hào)