目錄
第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.3.1 安裝Certbot客戶端 250
7.3.2 用戶注冊 250
7.3.3 獲取和安裝證書 251
7.3.4 Certbot Nginx插件 252
7.3.5 Certbot Apache插件 255
7.3.6 Certbot Webroot插件 257
7.3.7 Certbot Standalone插件 259
7.3.8 Certbot Manual插件 259
7.3.9 Certbot管理證書 260
7.3.10 Certbot查看證書 261
7.3.11 Certbot撤銷證書 262
7.3.12 Certbot Revoking證書 262
7.3.13 Certbot高級操作 263
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.4.1 連接狀態 278
8.4.2 TLS記錄層協議的處理步驟 281
8.5 TLS/SSL握手協議 288
8.5.1 Client Hello子消息 291
8.5.2 Server Hello子消息 292
8.5.3 Server Certificate子消息 293
8.5.4 Server Key Exchange子消息 295
8.5.5 Server Hello Done子消息 299
8.5.6 Client Key Exchange子消息 299
8.5.7 計算主密鑰和密鑰塊 301
8.5.8 Change Cipher Spec協議 304
8.5.9 Finished子消息 304
8.6 擴展 306
8.6.1 ECC橢圓麯綫擴展 308
8.6.2 signed_certificate_timestamp 309
8.6.3 Status Request擴展 310
8.6.4 renegotiation_info重協商擴展 312
8.6.5 ALPN擴展 312
8.6.6 Maximum Fragment Length擴展 313
8.6.7 SNI擴展 313
8.6.8 Signature Algorithms擴展 314
8.7 基於Session ID的會話恢復 316
8.7.1 什麼是會話 316
8.7.2 Session ID的工作原理 317
8.7.3 Session ID的優缺點 319
8.8 SessionTicket 319
8.8.1 SessionTicket的應用場景 320
8.8.2 SessionTicket的交互流程 320
8.8.3 SessionTicket TLS擴展 322
8.8.4 NewSessionTicket握手子消息 323
8.8.5 兩種會話恢復方式如何共存 325
8.9 使用Wireshark學習TLS/SSL協議 325
8.9.1 Wireshark的幾個使用技巧 326
8.9.2 使用Wireshark分析TLS/SSL協議 329
第9章 HTTPS性能和安全 347
9.1 密碼套件 347
9.1.1 密碼套件編號 349
9.1.2 關鍵字和關鍵字修飾符 349
9.1.3 密碼套件一覽 360
9.2 安全性 364
9.2.1 已知的安全漏洞 366
9.2.2 常規建議 371
9.2.3 密碼套件 373
9.2.4 前嚮安全性 377
9.2.5 證書 378
9.2.6 從客戶端審視安全性 381
9.2.7 應用層安全建議 383
9.3 性能 385
9.3.1 網絡層優化 386
9.3.2 應用層優化 389
9.3.3 HTTP/2優化 391
9.3.4 TLS/SSL優化 399
9.3.5 TLS/SSL優化方案 402
第10章 HTTPS網站實戰 414
10.1 工具化配置HTTPS 414
10.1.1 SSL Configuration Generator 415
10.1.2 Cloudflare推薦的配置 421
10.2 自動化測試HTTPS網站 426
10.2.1 SSL Server Test 426
10.2.2 SSL Client Test 433
10.2.3 SSL Pulse 436
10.3 OpenSSL命令行工具 439
10.3.1 s_client工具 440
10.3.2 s_server工具 447
10.3.3 其他工具 451
10.4 實戰HTTPS網站部署 454
10.4.1 使用Nginx+OpenSSL部署HTTPS網站 455
10.4.2 使用Nginx+BoringSSL部署HTTPS網站 470
10.5 大型網站部署HTTPS 471
10.5.1 係統架構 472
10.5.2 HTTPS網站的部署方式 476
10.5.3 其他部署問題 484
· · · · · · (
收起)