★國內鮮有的專業HTTPS書籍,HTTPS實踐指南
★集理論與實踐於一體,由淺入深、通俗易懂
★以TLS 1.2協議為主,描述前沿的知識和工具
★全方位深刻解剖Web安全相關體係結構的知識
★作者有十多年一綫實踐經驗,深刻理解Web精髓
★本書不僅是HTTPS專著,更是經驗和方法論分享
★書中含大量實例,極具實踐性,讀者更好理解
★如果你想瞭解Web安全、部署HTTPS網站、
部署HTTP/2網站、優化網站性能,
那麼本書是你的一個極好的選擇。
《深入淺齣 HTTPS:從原理到實戰》是一本專業的HTTPS書籍,全麵講解瞭HTTPS領域的相關知識,內容包括密碼學、OpenSSL命令行、證書、TLS協議、HTTPS網站性能優化、HTTPS網站優秀實踐、大型網站HTTPS架構設計等。《深入淺齣 HTTPS:從原理到實戰》有幾個特點:(1)內容全麵而新穎,基於RFC文檔、國外書籍、社區等一手資料,總結瞭大部分新的HTTPS知識;(2)由淺入深,從基礎到進階全麵掌握HTTPS,讀者能夠輕鬆構建一個HTTPS網站,並使網站安全性和性能大化,對於大型網站的HTTPS係統架構和應用架構設計也有指導意義;(3)內容通俗易懂,用語描述精準,充分考慮到讀者的閱讀和思考習慣,隻要具備基礎的HTTPS知識和Linux知識就能無障礙閱讀;(4)理論結閤實踐,本書除瞭讓讀者掌握HTTPS的交互細節,更注重實踐,介紹瞭很多工具,讓讀者更好地掌握HTTPS;(5)具有啓發性,讀者可以通過《深入淺齣 HTTPS:從原理到實戰》開啓密碼學和HTTPS學習之門,真正做到“深入”。
HTTPS(TLS協議)重點在於密碼學,互聯網安全是首位的,所以任何技術領域(比如目前火爆的區塊鏈)都需要密碼學和HTTPS(TLS協議)知識,架構人員、開發人員、運維人員都適閤閱讀《深入淺齣 HTTPS:從原理到實戰》。
虞衛東,網名虞大膽,新浪網高級技術經理。曾先後供職過新浪博客産品部和趕集網移動事業部。在新浪博客工作多年,擔任過開發工程師、技術經理、應用架構師等,負責新浪博客的開發、運維、設計、性能優化等工作。在趕集網擔任過技術總監,負責趕集網客戶端後端開發工作。十餘年來一直緻力於Web後端開發,積纍瞭豐富的架構設計、開發、運維經驗,擅長PHP、Python等開發語言。
本書集理論、協議細節、漏洞分析、架構部署於一體,是一份非常詳盡的Web應用安全指南,作者是一個具有10多年大型網站開發經驗的一綫開發者和資深架構師。在本書中,作者站在開發者的角度,從密碼學基礎、TLS協議、PKI體係、HTTPS安全及性能、安全網站實踐等方麵,全方位解讀瞭HTTPS,本書也是作者多年工作經驗的總結。更難得的是,雖然密碼學、HTTPS相關知識比較晦澀,但是本書閱讀起來非常輕鬆,強烈建議對HTTPS技術有需求的讀者閱讀本書。
——新浪郵箱技術負責人、資深架構師 硃歡
衛東深入淺齣地從概念、理論、指令、實操等多個層次、多個角度對HTTPS做瞭完整的闡述,本書是學習密碼學基礎、網絡開發和安全知識不可多得的一本好書。本書手把手引導讀者如何應用HTTPS,入門門檻低,同時內容很有深度,對於高階HTTPS用戶來說也有很多值得參考和藉鑒的地方。本書也可以當作一本網絡安全科普書來讀,感謝作者的辛勤付齣!
——原京東商城網站首席架構師 隋劍峰
本書由淺入深、通俗易懂地講述瞭HTTPS原理,並給齣實例方便讀者加深理解。通讀本書對於開發、安全、架構等都非常有幫助,對於每一位優秀的開發者來說,如果希望構建更安全、更可靠的係統,那麼本書非常值得一讀,並可以增強內功!
——醫渡雲安全總監 劉袁君
HTTP設計之初就沒有考慮安全性問題,導緻信息泄露、流量劫持等安全問題頻齣,現如今BATJ等互聯網公司都完成瞭全站HTTPS的遷移,HTTPS是大勢所趨,但是部署HTTPS是一個係統工程,稍有不慎,就有可能適得其反,導緻用戶訪問延時增加,吞吐率下降。本書係統地講述瞭HTTPS的上下遊知識,既有密碼學理論,又有工程實踐,相信會對閱讀本書的你很有幫助。
——京東金融技術專傢 吳建苗
第1章 HTTP介紹 1
1.1 什麼是Web 1
1.1.1 廣義理解Web 1
1.1.2 Web的組成 2
1.2 理解HTTP 4
1.2.1 HTTP的定義 4
1.2.2 HTTP語義 5
1.2.3 HTTP的特點 8
1.3 網絡模型 9
1.3.1 TCP/IP概述 9
1.3.2 Socket和TCP 12
1.4 協議安全分析 13
1.4.1 安全問題舉例 13
1.4.2 協議不安全的根本原因 14
1.5 Web應用安全 15
1.5.1 瀏覽器、HTML和JavaScript 16
1.5.2 W3C 17
第2章 密碼學 19
2.1 對於密碼學的認知 19
2.1.1 基本認知 19
2.1.2 密碼學的四個目標 21
2.1.3 OpenSSL 22
2.2 隨機數 25
2.2.1 隨機數的類型 25
2.2.2 隨機數的工作原理 26
2.2.3 常見的隨機數生成器 26
2.2.4 密碼學算法中的隨機數 27
2.3 Hash算法 27
2.3.1 加密基元 28
2.3.2 Hash算法和密碼學Hash算法 28
2.3.3 密碼學Hash算法的特性 29
2.3.4 Hash算法的用途 29
2.3.5 什麼是安全的密碼學Hash算法 30
2.3.6 密碼學Hash算法的分類 31
2.4 對稱加密算法 33
2.4.1 流密碼算法 34
2.4.2 塊密碼算法 36
2.4.3 填充標準 41
2.4.4 對稱加密算法實踐 42
2.5 消息驗證碼 47
2.5.1 什麼是消息驗證碼 47
2.5.2 MAC算法的種類 49
2.5.3 消息驗證碼算法實踐 49
2.5.4 加密算法不能提供完整性 50
2.5.5 AD加密模式 52
2.5.6 AEAD加密模式 53
2.6 公開密鑰算法 54
2.6.1 理解RSA的內部結構 55
2.6.2 PKCS標準 56
2.6.3 RSA加密算法的應用場景 58
2.6.4 RSA加密算法實踐 59
2.7 密鑰 62
2.7.1 生成密鑰 63
2.7.2 口令和PEB算法 63
2.7.3 密鑰存儲和傳輸 66
2.8 密鑰協商算法 67
2.8.1 RSA密鑰協商算法 68
2.8.2 DH密鑰協商算法 69
2.8.3 DH算法分類 71
2.8.4 DH密鑰協商算法實踐 71
2.9 橢圓麯綫密碼學 73
2.9.1 ECC算法的基本模型 74
2.9.2 使用OpenSSL瞭解命名麯綫 75
2.9.3 ECDH協商算法 76
2.9.4 命名麯綫 77
2.10 數字簽名 79
2.10.1 數字簽名的用途 79
2.10.2 數字簽名的流程 80
2.10.3 RSA數字簽名算法 81
2.10.4 RSA數字簽名實踐 81
2.11 DSA數字簽名算法 83
2.11.1 內部結構 84
2.11.2 DSA算法實踐 85
2.11.3 ECDSA算法 87
2.11.4 ECDSA算法實踐 88
2.12 算法安全性和性能 90
2.12.1 密鑰長度與算法安全性 90
2.12.2 密碼學性能 91
第3章 宏觀理解TLS 101
3.1 TLS/SSL協議綜述 101
3.1.1 TLS/SSL協議的曆史 101
3.1.2 正確認知TLS/SSL協議 102
3.1.3 TLS/SSL協議的目標 103
3.1.4 OpenSSL和TLS/SSL的關係 104
3.1.5 HTTPS和TLS/SSL的關係 105
3.1.6 TLS/SSL協議的一些實現 106
3.2 TLS/SSL協議背後的算法 107
3.2.1 加密算法和MAC算法 107
3.2.2 密鑰協商算法 108
3.2.3 前嚮安全性 110
3.2.4 密鑰衍生算法 111
3.2.5 中間人攻擊 112
3.2.6 PKI 114
3.3 HTTPS總結 117
3.3.1 握手 119
3.3.2 加密 125
3.4 實施HTTPS網站的必備條件 125
3.4.1 證書和密鑰對 126
3.4.2 部署和配置HTTPS網站 126
3.4.3 全站HTTPS策略 127
3.5 從用戶的角度看HTTPS 128
3.5.1 綠色小鎖圖標 128
3.5.2 TLS/SSL握手失敗 129
3.5.3 混閤內容 131
第4章 選擇HTTPS的必要性和疑惑 134
4.1 部署HTTPS的疑惑 134
4.1.1 網站好像沒有隱私數據 134
4.1.2 復雜性 135
4.1.3 成本 137
4.1.4 性能 137
4.1.5 外部資源不支持HTTPS 138
4.1.6 收益和時間對比 139
4.2 部署HTTPS的必要性 140
4.2.1 HTTP/2帶來的性能提升 140
4.2.2 趨勢 140
4.2.3 企業形象 142
4.2.4 HTML5的特性 142
4.2.5 iOS ATS的安全要求 143
4.2.6 Chrome和Firefox所做的努力 143
4.2.7 SEO排名和榖歌Analytics 144
第5章 快速搭建一個HTTPS網站 145
5.1 HTTPS網站構建分析 145
5.2 獲取證書和密鑰對 146
5.2.1 自簽名證書 147
5.2.2 嚮CA機構申請證書 148
5.2.3 使用Let’s Encrypt證書 149
5.3 部署證書和密鑰對 150
5.3.1 Nginx配置 150
5.3.2 Apache配置 151
5.4 測試HTTPS 152
5.5 301重定嚮 154
5.6 HSTS 155
5.6.1 什麼是HSTS 155
5.6.2 HSTS實踐 158
5.6.3 瀏覽器支持 158
5.6.4 HSTS Preloading 159
5.7 CSP 159
5.7.1 如何消除混閤內容 159
5.7.2 什麼是CSP 160
5.7.3 瀏覽器的兼容性 161
5.7.4 CSP實踐 161
第6章 證書 165
6.1 X.509標準和PKI 165
6.1.1 X.509標準 166
6.1.2 PKI的組成 166
6.1.3 X.509標準的內容 167
6.2 證書 167
6.2.1 ASN.1 167
6.2.2 證書結構 168
6.2.3 CSR 172
6.2.4 證書擴展 174
6.2.5 證書分類 177
6.3 證書鏈 180
6.3.1 證書類型 180
6.3.2 信任原理 182
6.3.3 信任鏈校驗 183
6.3.4 信任錨 184
6.3.5 委派和交叉認證 186
6.3.6 證書完整校驗 189
6.4 CRL 190
6.4.1 證書過期和吊銷 190
6.4.2 證書被吊銷的原因 191
6.4.3 CRL是什麼 191
6.4.4 CRL校驗 192
6.4.5 CRL的結構 193
6.4.6 CRL存在的問題 195
6.5 OCSP 196
6.5.1 OCSP是什麼 196
6.5.2 OCSP模型概述 197
6.5.3 OCSP詳解 200
6.6 OCSP封套 204
6.6.1 OCSP的優缺點 204
6.6.2 OCSP封套的工作原理 205
6.6.3 OCSP封套的優點 206
6.6.4 OCSP封套的兼容性 207
6.7 OpenSSL命令行管理證書 207
6.7.1 證書格式 207
6.7.2 證書的其他格式 208
6.7.3 獲取綫上證書 209
6.7.4 導入證書到根證書庫 213
6.7.5 OpenSSL管理CSR 216
6.7.6 OpenSSL生成證書 218
6.7.7 OpenSSL查看證書 218
6.7.8 校驗CRL 224
6.7.9 校驗OCSP 227
6.7.10 校驗OCSP封套 232
6.8 其他 233
6.8.1 如何選擇一個CA機構 233
6.8.2 證書的透明度 236
第7章 Let’s Encrypt免費證書 244
7.1 Let’s Encrypt 244
7.1.1 Let’s Encrypt CA機構的特點 244
7.1.2 Let’s Encrypt證書的特點 245
7.2 Let’s Encrypt工作原理 248
7.2.1 域名校驗過程 248
7.2.2 請求、更新、續期、撤銷證書流程 249
7.3 Certbot客戶端 249
7.4 Let’s Encrypt的其他信息 264
第8章 TLS協議分析 267
8.1 如何理解RFC文檔 267
8.2 描述語言 270
8.3 TLS/SSL協議概述 273
8.4 TLS記錄層協議 278
8.5 TLS/SSL握手協議 288
8.6 擴展 306
8.7 基於Session ID的會話恢復 316
8.8 SessionTicket 319
8.9 使用Wireshark學習TLS/SSL協議 325
第9章 HTTPS性能和安全 347
9.1 密碼套件 347
9.2 安全性 364
9.3 性能 385
第10章 HTTPS網站實戰 414
10.1 工具化配置HTTPS 414
10.2 自動化測試HTTPS網站 426
10.3 OpenSSL命令行工具 439
10.4 實戰HTTPS網站部署 454
10.5 大型網站部署HTTPS 471
序1
——原新浪産品事業部副總經理 王廼悅
我們的網站、我們的App、我們的小程序是否有必要升級到HTTPS呢?這並不是一個新鮮的問題,幾年來一直睏擾著大傢。2015年百度搜索引擎完成其曆史上最大的係統性升級——全麵由HTTP升級到HTTPS;2016年蘋果公告要求App Store中的所有應用在2017年1月1日之後都必須使用HTTPS加密連接;2017年1月9日微信上綫小程序後,要求開發者的所有服務端請求必須為HTTPS;同時Google已調整搜索引擎算法,讓采用HTTPS的網站在搜索結果中排名更靠前,並宣布從2018年7月開始所有的HTTP網站將標記為“不安全”。是否有必要將係統升級到HTTPS,答案顯而易見!
當下的互聯網已不是20年前隻提供新聞資訊、郵件收發服務的簡單互聯網瞭,更不是讓你安心網上衝浪的“潔淨”互聯網。互聯網尤其是移動互聯網,已經成為人們依賴度相當高的工具,餐飲、電影、購物、金融理財,甚至買汽車、租房、打車等都離不開它,移動互聯網已完成産品和服務的交易閉環。服務內容的升級與飛速發展,進一步放大瞭數據安全、被劫持或泄露的風險。近些年,用戶數據泄露、流量劫持、頁麵篡改等安全事件頻發,這些安全事件往往會給個人或公司帶來非常大的經濟損失。
安全問題已成為企業的生存之本,而HTTP天然的安全弊端可能會讓企業産生不可挽迴的巨大損失。在HTTP模式下,搜索或訪問請求以“明文信息”,經過代理服務器、路由器、WiFi熱點、服務運營商等“中間人”通路,這就形成瞭“中間人”獲取數據、篡改數據的可能。係統升級到HTTPS是企業的必行之路。
不就是做一個從HTTP到HTTPS的切換嗎?其實,背後卻是一個復雜的工程。係統從HTTP升級到HTTPS,並不是讓Web服務器支持HTTPS協議這麼簡單,還需要考慮CDN、負載均衡、反嚮代理等服務器。同時要考慮在何種設備上部署證書及私鑰,涉及網絡架構和應用架構的變化。這些都需要考慮閤理性,尤其要兼顧訪問速度與係統安全性。在部署過程中還必須保持業務的連續性,不能中斷業務,要穩定地響應用戶請求,做好HTTPS和HTTP的過渡和兼容。還要考慮Referer、Cookie等數據如何保持一緻,如何避免齣現訪問故障,復雜度幾乎是難以想象的。
一想到從HTTP升級到HTTPS的復雜度,很多人望而卻步、不知如何是好。或者硬著頭皮使用百度搜索各類HTTPS升級文章,研讀天書般的RFC文檔。網上的HTTPS升級文章好是好,也不乏實戰派好文,但大都寥寥幾筆,不能全麵係統地介紹HTTPS基礎理論與實戰細則。而RFC文檔的學習門檻比較高,雖然理論講解透徹且專業,但實戰中遇到的問題需要讀者慢慢實操解決。
非常有幸成為本書的首批讀者,並應作者虞衛東之邀為此書寫序。逐章閱讀後,我深感本書覆蓋所有核心知識,並且易讀。我想這可能得益於作者2007年以來一直在負責大型係統的架構設計,並一次次解決新浪博客、新浪郵箱高負載下的係統難題與復雜的係統升級難題,積纍瞭大量的一綫實踐經驗。本書圍繞HTTPS應用知識體係,以實戰經驗、實戰工具為“術”,以結閤每個關鍵點的實戰解決方法為“例”,詳細介紹瞭HTTP、HTTPS的常用知識,逐項解讀所涉及的密碼學、TLS協議、CA證書選擇及網站部署方式等關鍵點。內容易於讀者理解,可避免啃厚厚的RFC文檔和勞纍檢索良莠不齊的各類HTTPS升級文章的辛勞。
同時作者邏輯清晰,於實戰核心處落筆。如果你是入門者,建議全篇深度學習,因為此書並不會贅述理論,但能幫助你建立完整的知識體係,補充你的實戰經驗。如果你想快速解決企業遇到的升級HTTPS難題,可以直接閱讀實戰解決方案,並把此書作為實戰手冊快速找到解決辦法,逐一攻剋難關。
最後真心希望本書可以幫助更多企業和開發者實現HTTPS的平穩升級。
序2
——微博研發副總經理 楊衛華
20年前,沒人會想到人類會在互聯網上建立如此龐大的業務生態。從衣食住行到教育金融,每個領域都經曆著巨大的網絡變革。隨著物聯網和大數據技術的興起,目前還沒有看到這一變革的盡頭。支撐互聯網變革的技術基礎中,HTTP是最為重要的應用層協議。
早期以信息發布為主的Web 1.0時代,HTTP已可以滿足絕大部分需要。證書費用、服務器的計算資源都比較昂貴,作為HTTP安全擴展的HTTPS,通常隻應用在登錄、交易等少數環境中。但隨著越來越多的重要業務往綫上轉移,網站對用戶隱私和安全性也越來越重視。對於防止惡意監聽、中間人攻擊、惡意劫持篡改,HTTPS是目前較為可行的方案,全站HTTPS逐漸成為主流網站的選擇。
微博已經在2017年實現瞭全站HTTPS。國外巨頭Google除自身已經全站實現HTTPS外,也已經在Chrome瀏覽器中對使用HTTP協議的網站在地址欄顯示“不安全”標簽,同時也對HTTP網站在搜索引擎中降低瞭權重。考慮到Google的瀏覽器和搜索引擎的市場份額,全站HTTPS將是所有網站比較迫切的需求。
從技術角度上看,HTTP/2作為新一代的協議,雖然協議文本中並未強製要求加密,但主流的瀏覽器(Firefox、Chrome、Safari、Opera、IE、Edge)已共同宣布,它們隻支持實現基於TLS的HTTP/2,也就是說加密將是下一代協議的強製事實標準。
和HTTP/HTTPS取得的巨大成功相比,它們可供參考的書籍顯得非常匱乏。目前隻有少量HTTP及HTTP/2書籍,大都定位於初學者,對專業開發和運維人員的需求照顧有限。相對於語言及框架類圖書動輒半個書架的陣勢,HTTP/HTTPS的資源實在太少瞭。
新浪郵箱作為國內曆史悠久的郵箱,對於用戶安全協議的實踐,應該說獲得瞭很多的經驗。我的同事虞衛東,長期從事新浪博客、新浪郵箱等Web技術研發,對於HTTPS理論和實踐頗有心得。在本書中,他係統地介紹瞭大量的基礎理論知識,如CRL校驗、OCSP模型、TLS協議等,並兼顧瞭如Wireshark在TLS/SSL協議中的使用、自動化測試HTTPS網站等實操。相信用心閱讀本書的讀者,一定可以從中深入瞭解他在這一領域的領悟。
微博技術團隊也樂於和廣大開發人員分享微博在HTTPS實踐中的心得,歡迎大傢關注 @微博平颱架構 @微博技術學院 瞭解後續相關公開技術活動。
我的HTTPS學習之旅
2012年,我第一次接觸HTTPS,那時候HTTPS網站還沒有大規模部署,我想給自己的博客部署一張HTTPS證書,由於免費證書很少,最後花瞭近一個月時間纔搞定,喜悅之情可想而知。
完成HTTPS網站部署後,我特彆想瞭解HTTPS背後的原理,就在網絡上尋找相關的資料,讓人沮喪的是,國內的HTTPS資料非常少,大部分都是一些零星的知識,沒有係統性的介紹,而且很多信息非常不嚴謹,不同人對於同一個知識點的描述也存在差異,由於自己沒有十足的學習動力,HTTPS的初次學習之旅就結束瞭。
2016年,HTTPS又一次進入我的視野,主要有兩點原因。第一是當時我所在公司的産品經常遇到頁麵篡改攻擊,通過部署HTTPS網站解決瞭該問題,完成工作後,我想進一步掌握HTTPS原理。第二是我使用Shadowsocks協議搭建瞭一個代理服務,很好奇Shadowsocks協議的加密原理,當時隱隱約約覺得HTTPS和Shadowsocks協議背後的原理應該是相通的。
為瞭係統學習HTTPS,我再一次搜索相關的中文資料,情況和2012年差不多,中文資料還是非常少,質量也參差不齊,比較好的資料來源於imququ.com,雖然imququ.com中HTTPS相關文章並不是特彆多,但描述得非常好,而且具有實踐性。
國內很多介紹HTTPS的資料來自各大CDN公司,因為未來HTTPS網站部署和優化是非常重要的一個研究方嚮,CDN公司為瞭減少成本和提升性能,必然會進一步研究HTTPS。但必須指齣,他們的文章更多是宣傳介紹自己的産品的,很少有誠意十足的分享。
第二個學習方式就是尋找專業的HTTPS書籍,正好《HTTPS權威指南》齣版瞭,這本書應該算國內第一本介紹HTTPS的書籍,所以我第一時間就購買瞭,這本書翻譯自Bulletproof SSL and TLS: Understanding and Deploying SSL/TLS and PKI to Secure Servers and Web Applications,目前看來這本書並不適閤初學者,原因在於它主要講解HTTPS漏洞,介紹協議原理、網站部署等內容的篇幅非常少,確切地說,它更適閤瞭解HTTPS原理的讀者,但不可否認這是一本好書。
經過一段時間的摸索,我意識到學習HTTPS必須參考更多的英文資料,嚮讀者推薦兩本書,分彆是Implementing SSL/TLS Using Cryptography and PKI和Network Security with OpenSSL: Cryptography for Secure Communications,這兩本書雖然齣版時間比較早,很多知識點比較陳舊,但即使現在看來,仍然是非常權威和專業的HTTPS書籍。
很多讀者可能已經發現,這兩本書的書名中並沒有“HTTPS”字樣,關鍵詞是“SSL/TLS”和“OpenSSL”,此處重點解釋HTTPS和TLS/SSL之間的關係。對於讀者來說,重要的是掌握TLS/SSL原理,HTTPS其實是TLS/SSL的一個最重要的子應用,任何講解HTTPS的書籍和資料,其實都是在講解TLS/SSL,希望讀者明白兩者之間的關係,這對於學習至關重要。
我也非常睏惑為什麼專業的HTTPS書籍如此之少。為瞭進一步學習,我使用Google搜索、Wikipedia、Stack Overflow進行瞭大量的學習,找到瞭很多非常不錯的資料和網站(比如blog.cloudflare.com、Qualys SSL Labs),逐漸形成瞭自己的知識體係。我認識到學習HTTPS有四個關鍵步驟,分彆是學習密碼學、OpenSSL、TLS/SSL和HTTPS,可見整個知識體係還是非常龐大的。
在學習之餘,我也非常重視實踐和總結,在博客上寫瞭一些關於HTTPS的文章,沒想到訪問量還是非常不錯的,可見很多人也非常關心HTTPS網站的部署,這進一步增加瞭我的學習動力。
本書的淵源
2017年年初,博文視點的董英編輯看到我的博客,詢問我是否能寫一本專業的HTTPS書籍。由於自己從沒寫過書,所以我就告訴編輯,打算花一個月時間思考書的整體框架,如果覺得閤適就去寫;如果覺得目前無法掌控就放棄,幸好,最後我還是寫瞭這本書。
這一個月我花費瞭大量的精力思考幾個問題:本書的讀者對象是誰?如何讓他們看明白本書?如何係統化地把HTTPS講清楚?書籍的內容是偏理論、實戰還是兩者兼而有之?如何組織書的目錄結構?章節的排序依據是什麼?為瞭更好地講清楚,自己還要學習哪些知識?
我幾乎天天都在思考這些問題,最後抓住瞭兩個關鍵點,第一是根據自己的理解程度去寫,不浮誇,重實踐;第二是從一個初學者的角度去寫書。
我在寫本書之前,定瞭幾個寫作基調:
√ 即使一個人從沒聽說過HTTPS,也能看明白這本書,並且學以緻用。
√ 充分考慮每個人的學習規律,循序漸進,由淺入深。
√ 重理論、重實踐,既能學到原理知識,又能夠進行實踐,從而鞏固學習成果。
√ 注重引導和啓發,比如密碼學知識我掌握得並不夠,所以不會著重描寫,但框架一定要清晰,以便讀者進一步學習。
√ 通俗。希望本書容易理解,盡量減少讀者的學習難度。
一些體會
本書的撰寫過程是我的第三次HTTPS學習之旅,從動筆到完成初稿,整整花瞭一年的時間,每天至少花5個小時研究和寫書,越往後寫,越覺得TLS/SSL知識體係是如此龐大,需要研究很多領域,有幾次差點放棄,但最終還是堅持下來瞭。
寫作最大的動力還是來源於內心,內心渴望將HTTPS相關知識分享齣來,為瞭提升書的質量,盡可能地尋找更多的資料,有的時候為瞭論證一個觀點,需要花好幾天時間,不斷地研究RFC文檔,不斷查看OpenSSL源代碼,隻為讓自己的描述更嚴謹、更準確。
在具體寫作的時候也遇到瞭很多挑戰,有些章節寫完之後,個人感覺非常不好,考慮到讀者看瞭後可能會更迷惑,遇到這種情況就會選擇重寫,或者從另外一個角度重新組織語言。一本書的結構非常重要,直接影響用戶的理解,我花瞭很長的時間去組織,不斷地調整,不斷地換位思考,直到自己滿意為止。
還有一個主要的體會就是學習理解能力得到瞭極大的提升,對技術的理解也更加深刻瞭。相對來說現有HTTPS資料還是比較少的,學習過程很坎坷,不像編程語言,有大量的書籍和社區,學習過程會相對輕鬆。
在這個過程中,我也意識到自己並不是在學習HTTPS知識,而是在學習密碼學安全知識,在所有技術領域中,密碼學看似不重要,但卻是非常關鍵的一環,就像學習TCP/IP、操作係統等知識一樣,都是一個搭建基礎的過程,掌握好密碼學和TLS/SSL,未來再轉入其他領域,就會更加得心應手,比如現在流行的區塊鏈技術,其背後就包括密碼學知識。
在這個過程中,我自己的學習方法論也得到瞭提升,對於HTTPS知識來說,RFC和OpenSSL官方文檔可能是最權威、最專業的渠道,但這些文檔有個通病,描述非常枯燥,需要靜下心來仔細鑽研,纔能夠掌握知識的精髓,而一旦打通這個環節,得到的收益將是巨大的。
寫完本書後,我意識到本書絕對不是自己HTTPS學習的終點,因為HTTPS體係越來越重要,也湧現瞭很多相關的技術。比如,TLS v1.3越來越成熟,可本書並沒有涉及相關的知識點;再比如,在編寫本書的時候榖歌宣布廢棄HPKP技術,可見整個HTTPS技術體係還在不斷完善,我還會繼續深入研究,也會以本書為基點,通過博客的形式分享給對HTTPS感興趣的人。
最後,必須說明一點,我對於HTTPS的理解還有非常大的提升空間,未來我會繼續在這一領域深耕。但本書是我的用心之作,希望讀者能夠以寬容、理解、幫助的心態對待它和我。
為什麼選擇本書
首先迴答為什麼要掌握HTTPS,確切地說,是迴答我們為什麼要掌握TLS/SSL。
互聯網安全是非常重要的一個領域,而安全背後的核心就是密碼學算法。TLS/SSL組閤瞭大部分密碼學算法,掌握瞭TLS/SSL,在一定程度上等同於理解瞭密碼學。
TLS/SSL是TCP/IP協議族中獨立的一個分層協議,重要性不言而喻,能夠解決互聯網中所有普適性的安全問題。隻要提到安全,我們的第一反應就是思考能否引入TLS/SSL,是否能通過專門的密碼學算法解決,掌握瞭密碼學知識和TLS/SSL知識,在分析或者開發的時候會非常輕鬆。
總結一點,隻要你是一個開發者,密碼學和TLS/SSL必須掌握。
然後再迴答為什麼選擇本書。
(1)本書是國內鮮有的HTTPS原創書籍,也是我的用心之作,就像工作一樣,態度有的時候比技能更重要,在寫本書的時候,我傾注瞭很多精力,藉鑒瞭很多資料,對自己所有的觀點都通過實例進行瞭論證,最後以自己的方式將知識分享給讀者。
(2)我在Web領域做開發工作十餘年,深刻明白Web技術體係的精髓,也明白什麼知識纔是核心和重要的,通過本書,我將自己的方法論分享給讀者。本書不僅描述知識,更希望成為一扇大門,讀者在閱讀的時候應該思考我為什麼如此講解,希望讀者完成閱讀後能夠自己進一步學習HTTPS知識。
(3)本書盡量描述一些真正實用的知識,比如:不會描述類似TLS v1.1版本的知識,因為它已經過時瞭;對於讀者來說,可能更想對HTTPS網站進行調優,本書參考瞭很多最佳實踐,提齣瞭很多中肯的建議;很多人在部署HTTPS網站的時候,可能需要免費證書,為此我花費很長時間研究Le’s Encrypt和Certbot,相信閱讀本書後,證書申請不再是難題。
(4)本書的知識很前沿,很少有書籍和資料基於TLS RFC文檔詳細講解,本書用很多篇幅從FRC的角度進行講解,最後還采用Wireshark工具對協議進行瞭解剖,讓讀者直觀地瞭解協議如何握手及交互。
(5)本書充分考慮讀者的實際情況,掌握TLS/SSL協議必須瞭解基礎的密碼學知識,否則學習的時候會非常煎熬。針對這種情況,本書從應用的角度而非原理的角度講解密碼學知識,為瞭避免枯燥,使用OpenSSL命令行工具講解算法應用,本書處處可見OpenSSL命令行工具,非常具有實踐性。
(6)在寫作的時候,我盡量使用最精確的語言,很注意書寫的流暢性,避免乾擾讀者的理解,可以說我是本書的第一閱讀者,每時每刻都從讀者的角度去解讀。
總之,本書充分考慮瞭讀者的需求,將真正有用的知識分享給讀者,這也是本書最重要的價值。如果讀者想係統地學習HTTPS知識,那麼閱讀本書是最好的方式,而選擇本書並不會存在語言鴻溝,本書是一扇通往HTTPS較好的大門。
什麼人適閤閱讀本書
那麼什麼人適閤閱讀本書呢?隻要你是一個開發者,曾經進行過Web開發(最好瞭解PHP開發,因為本書使用瞭一些PHP示例),同時具備一定的Linux操作知識(比如瞭解Shell,瞭解Nginx服務器安裝),那麼閱讀本書不會存在任何障礙。
閱讀本書的人群主要如下:
√ Web開發者,包括前、後端開發人員。
√ 網站運維人員。
√ Web係統架構師。
√ 任何想瞭解密碼學、OpenSSL、HTTPS知識的人。
√ 安全領域的開發者。
本書組織結構
結構性是一本書的精髓,我在挑選書籍的時候,第一步就是瞭解目錄結構,從中可以看齣作者的思路及書的特點,從而判斷這本書是否適閤自己閱讀。所以在編寫本書的時候,我對書的目錄結構做瞭精心的設計,前後調整瞭好幾次,充分考慮瞭讀者的閱讀習慣。
本書的每一章相對來說是獨立的,讀者可以跳躍式閱讀,同時每章之間又是有關聯的,每一章都有承上啓下的作用,使用由淺入深的方式講解。如果想係統地學習HTTPS,建議按照本書的目錄結構從前往後閱讀,這樣就能全麵掌握知識的脈絡。
本書共10章,每章的大概內容如下。
第1章 HTTPS主要解決HTTP的安全問題,所以本章首先迴顧瞭HTTP的基礎知識,以及不安全的根本原因。同時,HTTP是TCP/IP協議族中最重要的應用層協議,必須瞭解TCP/IP的基本原理和框架。最後必須明白Web安全和HTTPS安全是兩個完全不同的領域。
第2章 HTTPS背後的核心其實是密碼學算法,所以本章介紹瞭很多常用的密碼學算法,對算法的關鍵概念進行瞭講解,同時為瞭避免學習枯燥,以OpenSSL工具和PHP語言講解密碼學算法。密碼學算法非常關鍵,讀者閱讀本書後,建議找專業的密碼學書籍進行學習。
第3章 本章介紹瞭幾個關鍵概念,首先需要明白HTTPS其實是TLS/SSL的子應用,重點是學習TLS/SSL。本章以抽象的形式解釋瞭TLS/SSL的基本特點和工作原理。對於讀者來說,可能更關心如何搭建一個HTTPS網站,所以本章也介紹瞭實施HTTPS網站的必備條件。最後從用戶的角度,讓他們明白什麼是HTTPS,如何知曉訪問的網站是安全的。
第4章 本章沒有太多的技術知識點,不同角色對於HTTPS的理解也是不同的,本章對HTTPS的必要性做瞭進一步的描述,並解答瞭一些常見的疑惑。
第5章 在瞭解瞭HTTPS的基本工作原理後,讀者希望快速搭建一個HTTPS網站,可以根據本章的內容搭建一個HTTPS網站,涉及的內容包括證書申請、服務器部署和全站HTTPS策略的三個關鍵技術。閱讀本章的時候,可以迴顧第3章的內容。
第6章 本章介紹證書的核心概念,證書雖然不是TLS/SSL的一部分,但HTTPS必須引入證書纔能保證絕對安全。本章介紹瞭證書的結構、屬性和擴展,並全麵介紹瞭證書背後的密碼學原理,而掌握證書必須瞭解證書鏈的校驗原則。本章介紹瞭證書的三個關鍵技術(CRL、OCSP、OCSP封套),它們是證書的有效補充。本章的精華就是通過OpenSSL命令行工具對證書進行管理,比如查看證書結構、創建CSR文件、導入導齣根證書、獲取證書等。
第7章 對於讀者來說,部署HTTPS網站最大的難題就是證書申請,而Let’s Encrypt是一個免費的CA機構,可以申請免費證書,所以本章重點講解瞭Let’s Encrypt的工作原理,以及全麵講解Certbot客戶端的使用。本章可以結閤第6章一起閱讀,全麵掌握證書的內容。同時證書和TLS/SSL不是孤立存在的,其背後的密碼學原理是相通的。
第8章 本章是本書的核心,根據RFC文檔詳細講解瞭TLS/SSL細節,主要包括握手協議、協議擴展、會話恢復等。而為瞭更直觀地掌握協議原理,本章使用Wireshark網絡工具解剖瞭協議消息,使讀者可以從多個角度掌握協議。
第9章 本書最後兩章主要講解HTTPS最佳實踐策略,本章講解讀者最關心的兩個問題,分彆是如何提升HTTPS網站性能,以及如何部署更安全的HTTPS網站。不管是協議性能還是安全性,密碼套件是其中最關鍵的概念,所以本章花瞭很多篇幅介紹密碼套件的概念和特點。
第10章 本章是最佳實踐的後半部分,介紹瞭很多工具和網站,實踐性非常強。首先介紹瞭Cloudflare和Mozilla推薦的兩個工具,通過這兩個工具,能夠搭建齣非常棒的HTTPS網站。其次講解HTTPS網站測試工具,首推SSL Labs工具包,建議讀者重點關注該網站。再次係統介紹瞭OpenSSL命令行工具,學習TLS/SSL最好的工具其實就是OpenSSL,很多HTTPS工具都是對OpenSSL命令行的進一步封裝。接著介紹瞭如何在Nginx服務器上配置HTTPS網站,詳細介紹瞭ngx_http_ssl_module模塊的各個指令。最後描述瞭大型網站如何有效地進行部署、優化。
示例
本書用到瞭很多示例,主要包含PHP代碼片段、Nginx服務器配置、OpenSSL命令行、Wireshark pcap文件。所有的示例都存放在GitHub上(https://github.com/ywdblog/httpsbook),每章一個目錄,讀者很容易根據書中的描述找到示例。
如果齣現示例代碼運行錯誤,可能有以下幾個原因:
√ 對於PHP腳本來說,依賴性比較小,所有代碼都運行在PHP 5.3.3 (cli)版本下,如果不能成功運行,可能是讀者的PHP版本過高。
√ 關於Nginx配置,本書第10章描述瞭相關配置,在Nginx 1.13.5版本下測試通過,讀者在測試的時候請注意Nginx版本。
√ TLS/SSL和OpenSSL庫在不斷升級,讀者在運行OpenSSL命令行示例的時候,需要注意版本,示例隻是一個參考,遇到問題,建議重點參考OpenSSL的官方手冊。
示例隻是為瞭協助學習,對於讀者來說,更重要的是掌握書中描述的知識,然後不斷地實踐,從而真正靈活使用。
反饋
由於水平有限,書中難免齣現理解錯誤和書寫錯誤,如果讀者在閱讀過程中發現任何錯誤,都可以去https://github.com/ywdblog/httpsbook提交Issue。同時,如果有好的建議或者問題,也可以直接提交Issue或者發送郵件至ywblog@outlook.com,我會及時並盡力去答復。
本書所有勘誤修正全部放在https://book.simplehttps.com/errata.md文件中,歡迎大傢盡量指齣書中的錯誤,這是對我最大的支持。
寫完本書後,考慮到HTTPS的中文資料非常少,也不成體係,所以我專門申請瞭一個域名(simplehttps.com),希望構建一個良好的知識學習平颱,具體的運作形式還沒想好,歡迎大傢給我一些建議。初步的設想就是匯眾一些博客文章和資料,作為學習HTTPS知識的入口。
緻謝
感謝廼悅,從整體結構上給本書提供瞭很多建設性的意見,非常感謝他為本書作序,他是我最尊敬的技術領導。同時也感謝公司的技術大牛衛華為本書作序,以及其他四位專傢的寶貴推薦。感謝博文視點的董英編輯和她的同事們,讓我認識到編輯工作的專業性,以及一絲不苟的態度。感謝老婆的默默付齣,讓我有足夠的時間和精力去寫這本書,感謝閨女帶來傢庭快樂,希望老婆健健康康、開心生活,閨女健康成長。
滿減和優惠券買下來很劃算,書的質量也沒得說
評分一:為瞭尊重版權
評分東西不錯,快遞小哥很專業。
評分參加活動買的,太劃算瞭,一下子買瞭九本書,太給力瞭,以後還會再來買,多有新活動喲
評分發貨快,感覺應該不錯,好好拜讀瞭以後再來評價。六一八存書季,買瞭4000多塊錢的書。感謝京東
評分書挺好的,內容不是特彆深,更偏嚮於沒有接觸過分布式的,看完這書基本對各個方麵的細節有個瞭解瞭的那種。
評分買過來好好學習一下。
評分好書,還沒看,看後在評價
評分這種書挺不錯,包裝可以的
本站所有内容均为互联网搜索引擎提供的公开搜索信息,本站不存储任何数据与内容,任何内容与数据均与本站无关,如有需要请联系相关搜索引擎包括但不限于百度,google,bing,sogou 等
© 2025 book.tinynews.org All Rights Reserved. 静思书屋 版权所有