第1章 SSL、TLS和密碼學 1
1.1 傳輸層安全 1
1.2 網絡層 2
1.3 協議曆史 3
1.4 密碼學 4
1.4.1 構建基塊 4
1.4.2 協議 12
1.4.3 攻擊密碼 13
1.4.4 衡量強度 13
1.4.5 中間人攻擊 15
第2章 協議 19
2.1 記錄協議 19
2.2 握手協議 21
2.2.1 完整的握手 21
2.2.2 客戶端身份驗證 26
2.2.3 會話恢復 28
2.3 密鑰交換 29
2.3.1 RSA密鑰交換 30
2.3.2 Diffie-Hellman密鑰交換 31
2.3.3 橢圓麯綫Diffie-Hellman密鑰交換 33
2.4 身份驗證 34
2.5 加密 34
2.5.1 序列加密 34
2.5.2 分組加密 35
2.5.3 已驗證的加密 36
2.6 重新協商 37
2.7 應用數據協議 38
2.8 警報協議 38
2.9 關閉連接 39
2.10 密碼操作 39
2.10.1 僞隨機函數 39
2.10.2 主密鑰 40
2.10.3 密鑰生成 40
2.11 密碼套件 41
2.12 擴展 42
2.12.1 應用層協議協商 43
2.12.2 證書透明度 44
2.12.3 橢圓麯綫功能 44
2.12.4 心跳 45
2.12.5 次協議協商 46
2.12.6 安全重新協商 47
2.12.7 服務器名稱指示 47
2.12.8 會話票證 48
2.12.9 簽名算法 48
2.12.10 OCSP stapling 49
2.13 協議限製 49
2.14 協議版本間的差異 50
2.14.1 SSL 3 50
2.14.2 TLS 1.0 50
2.14.3 TLS 1.1 50
2.14.4 TLS 1.2 51
第3章 公鑰基礎設施 52
3.1 互聯網公鑰基礎設施 52
3.2 標準 54
3.3 證書 55
3.3.1 證書字段 55
3.3.2 證書擴展 57
3.4 證書鏈 58
3.5 信賴方 60
3.6 證書頒發機構 61
3.7 證書生命周期 62
3.8 吊銷 63
3.9 弱點 63
3.10 根密鑰泄露 65
3.11 生態係統評估 66
3.12 進步 68
第4章 攻擊PKI 71
4.1 VeriSign簽發的Microsoft代碼簽名證書 71
4.2 Thawte簽發的login.live.com 72
4.3 StartCom違規(2008) 72
4.4 CertStar(Comodo)簽發的Mozilla證書 73
4.5 僞造的RapidSSL CA證書 73
4.5.1 前綴選擇碰撞攻擊 75
4.5.2 創建碰撞證書 75
4.5.3 預測前綴 76
4.5.4 接下來發生的事 78
4.6 Comodo代理商違規 78
4.7 StartCom違規(2011) 80
4.8 DigiNotar 80
4.8.1 公眾的發現 80
4.8.2 一個證書頒發機構的倒下 81
4.8.3 中間人攻擊 82
4.8.4 ComodoHacker宣布負責 83
4.9 DigiCert Sdn. Bhd. 85
4.10 火焰病毒 85
4.10.1 火焰病毒對抗Windows更新 86
4.10.2 火焰病毒對抗Windows終端服務 87
4.10.3 火焰病毒對抗MD5 88
4.11 TURKTRUST 89
4.12 ANSSI 90
4.13 印度國傢信息中心 91
4.14 廣泛存在的SSL竊聽 91
4.14.1 Gogo 91
4.14.2 Superfish和它的朋友們 92
4.15 CNNIC 93
第5章 HTTP和瀏覽器問題 95
5.1 sidejacking 95
5.2 Cookie竊取 97
5.3 Cookie篡改 98
5.3.1 瞭解HTTP Cookie 98
5.3.2 Cookie篡改攻擊 99
5.3.3 影響 102
5.3.4 緩解方法 103
5.4 SSL剝離 103
5.5 中間人攻擊證書 104
5.6 證書警告 105
5.6.1 為什麼有這麼多無效證書 107
5.6.2 證書警告的效果 108
5.6.3 點擊—通過式警告與例外 109
5.6.4 緩解方法 110
5.7 安全指示標誌 110
5.8 混閤內容 112
5.8.1 根本原因 112
5.8.2 影響 114
5.8.3 瀏覽器處理 114
5.8.4 混閤內容的流行程度 116
5.8.5 緩解方法 117
5.9 擴展驗證證書 118
5.10 證書吊銷 119
5.10.1 客戶端支持不足 119
5.10.2 吊銷檢查標準的主要問題 119
5.10.3 證書吊銷列錶 120
5.10.4 在綫證書狀態協議 122
第6章 實現問題 127
6.1 證書校驗缺陷 127
6.1.1 在庫和平颱中的證書校驗缺陷 128
6.1.2 應用程序校驗缺陷 131
6.1.3 主機名校驗問題 132
6.2 隨機數生成 133
6.2.1 Netscape Navigator瀏覽器(1994) 133
6.2.2 Debian(2006) 134
6.2.3 嵌入式設備熵不足問題 135
6.3 心髒齣血 137
6.3.1 影響 137
6.3.2 緩解方法 139
6.4 FREAK 139
6.4.1 齣口密碼 140
6.4.2 攻擊 140
6.4.3 影響和緩解方法 143
6.5 Logjam 144
6.5.1 針對不安全DHE密鑰交換的主動攻擊 144
6.5.2 針對不安全DHE密鑰交換的預先計算攻擊 145
6.5.3 針對弱DH密鑰交換的狀態—水平威脅 146
6.5.4 影響 147
6.5.5 緩解方法 148
6.6 協議降級攻擊 148
6.6.1 SSL 3中的迴退保護 149
6.6.2 互操作性問題 149
6.6.3 自願協議降級 152
6.6.4 TLS 1.0和之後協議的迴退保護 153
6.6.5 攻擊自願協議降級 154
6.6.6 現代迴退防禦 154
6.7 截斷攻擊 156
6.7.1 截斷攻擊的曆史 157
6.7.2 Cookie截斷 157
6.8 部署上的弱點 159
6.8.1 虛擬主機混淆 159
6.8.2 TLS會話緩存共享 160
第7章 協議攻擊 161
7.1 不安全重新協商 161
7.1.1 為什麼重新協商是不安全的 162
7.1.2 觸發弱點 162
7.1.3 針對HTTP協議的攻擊 163
7.1.4 針對其他協議的攻擊 166
7.1.5 由架構引入的不安全重新協商問題 167
7.1.6 影響 167
7.1.7 緩解方法 167
7.1.8 漏洞發現和補救時間錶 168
7.2 BEAST 169
7.2.1 BEAST的原理 170
7.2.2 客戶端緩解方法 173
7.2.3 服務器端緩解方法 175
7.2.4 曆史 176
7.2.5 影響 177
7.3 壓縮旁路攻擊 178
7.3.1 壓縮預示如何生效 178
7.3.2 攻擊的曆史 180
7.3.3 CRIME 181
7.3.4 針對TLS和SPDY攻擊的緩解方法 187
7.3.5 針對HTTP壓縮攻擊的緩解方法 188
7.4 Lucky 13 189
7.4.1 什麼是填充預示 189
7.4.2 針對TLS的攻擊 190
7.4.3 影響 191
7.4.4 緩解方法 191
7.5 RC4缺陷 192
7.5.1 密鑰調度弱點 192
7.5.2 單字節偏差 193
7.5.3 前256字節偏差 194
7.5.4 雙字節偏差 196
7.5.5 針對密碼進行攻擊的改進 196
7.5.6 緩解方法:RC4與BEAST、Lucky 13和POODLE的比較 197
7.6 三次握手攻擊 198
7.6.1 攻擊 198
7.6.2 影響 202
7.6.3 先決條件 203
7.6.4 緩解方法 203
7.7 POODLE 204
7.7.1 實際攻擊 207
7.7.2 影響 208
7.7.3 緩解方法 208
7.8 Bullrun 209
第8章 部署 212
8.1 密鑰 212
8.1.1 密鑰算法 212
8.1.2 密鑰長度 213
8.1.3 密鑰管理 213
8.2 證書 215
8.2.1 證書類型 215
8.2.2 證書主機名 215
8.2.3 證書共享 216
8.2.4 簽名算法 216
8.2.5 證書鏈 217
8.2.6 證書吊銷 218
8.2.7 選擇閤適的CA 218
8.3 協議配置 219
8.4 密碼套件配置 220
8.4.1 服務器密碼套件配置優先 220
8.4.2 加密強度 220
8.4.3 前嚮保密 221
8.4.4 性能 222
8.4.5 互操作性 222
8.5 服務器配置和架構 223
8.5.1 共享環境 223
8.5.2 虛擬安全托管 223
8.5.3 會話緩存 223
8.5.4 復雜體係結構 224
8.6 問題緩解方法 225
8.6.1 重新協商 225
8.6.2 BEAST(HTTP) 225
8.6.3 CRIME(HTTP) 225
8.6.4 Lucky 13 226
8.6.5 RC4 226
8.6.6 TIME和BREACH(HTTP) 227
8.6.7 三次握手攻擊 227
8.6.8 心髒齣血 228
8.7 釘紮 228
8.8 HTTP 228
8.8.1 充分利用加密 228
8.8.2 Cookie安全 229
8.8.3 後端證書和域名驗證 229
8.8.4 HTTP嚴格傳輸安全 229
8.8.5 內容安全策略 230
8.8.6 協議降級保護 230
第9章 性能優化 231
9.1 延遲和連接管理 232
9.1.1 TCP 優化 232
9.1.2 長連接 234
9.1.3 SPDY、HTTP 2.0以及其他 235
9.1.4 內容分發網絡 235
9.2 TLS協議優化 237
9.2.1 密鑰交換 237
9.2.2 證書 240
9.2.3 吊銷檢查 242
9.2.4 會話恢復 243
9.2.5 傳輸開銷 243
9.2.6 對稱加密 244
9.2.7 TLS記錄緩存延遲 246
9.2.8 互操作性 247
9.2.9 硬件加速 247
9.3 拒絕服務攻擊 248
9.3.1 密鑰交換和加密CPU開銷 249
9.3.2 客戶端發起的重新協商 250
9.3.3 優化過的TLS拒絕服務攻擊 250
第10章 HTTP嚴格傳輸安全、內容安全策略和釘紮 251
10.1 HTTP嚴格傳輸安全 251
10.1.1 配置HSTS 252
10.1.2 確保主機名覆蓋 253
10.1.3 Cookie安全 253
10.1.4 攻擊嚮量 254
10.1.5 瀏覽器支持 255
10.1.6 強大的部署清單 256
10.1.7 隱私問題 257
10.2 內容安全策略 257
10.2.1 防止混閤內容問題 258
10.2.2 策略測試 259
10.2.3 報告 259
10.2.4 瀏覽器支持 259
10.3 釘紮 260
10.3.1 釘紮的對象 261
10.3.2 在哪裏釘紮 262
10.3.3 應該使用釘紮嗎 263
10.3.4 在本機應用程序中使用釘紮 263
10.3.5 Chrome公鑰釘紮 264
10.3.6 Microsoft Enhanced Mitiga-tion Experience Toolkit 265
10.3.7 HTTP公鑰釘紮擴展 265
10.3.8 DANE 267
10.3.9 證書密鑰可信保證 270
10.3.10 證書頒發機構授權 271
第11章 OpenSSL 272
11.1 入門 272
11.1.1 確定OpenSSL版本和配置 273
11.1.2 構建OpenSSL 274
11.1.3 查看可用命令 275
11.1.4 創建可信證書庫 276
11.2 密鑰和證書管理 277
11.2.1 生成密鑰 277
11.2.2 創建證書簽名申請 280
11.2.3 用當前證書生成CSR文件 282
11.2.4 非交互方式生成CSR 282
11.2.5 自簽名證書 283
11.2.6 創建對多個主機名有效的證書 283
11.2.7 檢查證書 284
11.2.8 密鑰和證書格式轉換 286
11.3 配置 288
11.3.1 選擇密碼套件 288
11.3.2 性能 298
11.4 創建私有證書頒發機構 300
11.4.1 功能和限製 301
11.4.2 創建根CA 301
11.4.3 創建二級CA 306
第12章 使用OpenSSL進行測試 309
12.1 連接SSL服務 309
12.2 測試升級到SSL的協議 312
12.3 使用不同的握手格式 313
12.4 提取遠程證書 313
12.5 測試支持的協議 314
12.6 測試支持的密碼套件 314
12.7 測試要求包含SNI的服務器 315
12.8 測試會話復用 316
12.9 檢查OCSP吊銷狀態 316
12.10 測試OCSP stapling 318
12.11 檢查CRL吊銷狀態 319
12.12 測試重新協商 321
12.13 測試BEAST漏洞 322
12.14 測試心髒齣血 323
12.15 確定Diffie-Hellman參數的強度 325
第13章 配置Apache 327
13.1 安裝靜態編譯OpenSSL的Apache 328
13.2 啓用TLS 329
13.3 配置TLS協議 329
13.4 配置密鑰和證書 330
13.5 配置多個密鑰 331
13.6 通配符和多站點證書 332
13.7 虛擬安全托管 333
13.8 為錯誤消息保留默認站點 334
13.9 前嚮保密 335
13.10 OCSP stapling 336
13.10.1 配置OCSP stapling 336
13.10.2 處理錯誤 337
13.10.3 使用自定義OCSP響應程序 338
13.11 配置臨時的DH密鑰交換 338
13.12 TLS會話管理 338
13.12.1 獨立會話緩存 338
13.12.2 獨立會話票證 339
13.12.3 分布式會話緩存 340
13.12.4 分布式會話票證 341
13.12.5 禁用會話票證 342
13.13 客戶端身份驗證 343
13.14 緩解協議問題 344
13.14.1 不安全的重新協商 344
13.14.2 BEAST 344
13.14.3 CRIME 344
13.15 部署HTTP嚴格傳輸安全 345
13.16 監視會話緩存狀態 346
13.17 記錄協商的TLS參數 346
13.18 使用mod_sslhaf的高級日誌記錄 347
第14章 配置Java和Tomcat 349
14.1 Java加密組件 349
14.1.1 無限製的強加密 350
14.1.2 Provider配置 350
14.1.3 功能概述 351
14.1.4 協議漏洞 352
14.1.5 互操作性問題 352
14.1.6 屬性配置調優 354
14.1.7 常見錯誤消息 355
14.1.8 保護Java Web應用 358
14.1.9 常見密鑰庫操作 362
14.2 Tomcat 366
14.2.1 TLS配置 369
14.2.2 JSSE配置 371
14.2.3 APR和OpenSSL配置 373
第15章 配置Microsoft Windows和IIS 375
15.1 Schannel 375
15.1.1 功能概述 375
15.1.2 協議漏洞 377
15.1.3 互操作性問題 377
15.2 Microsoft根證書計劃 379
15.2.1 管理係統可信證書庫 379
15.2.2 導入可信證書 380
15.2.3 可信證書黑名單 380
15.2.4 禁用根證書自動更新 380
15.3 配置 380
15.3.1 Schannel配置 381
15.3.2 密碼套件配置 382
15.3.3 密鑰和簽名限製 384
15.3.4 重新協商配置 389
15.3.5 配置會話緩存 390
15.3.6 監控會話緩存 391
15.3.7 FIPS 140-2 391
15.3.8 第三方工具 393
15.4 保護ASP.NET網站應用的安全 394
15.4.1 強製使用SSL 394
15.4.2 Cookie的保護 395
15.4.3 保護會話Cookie和Forms身份驗證的安全 395
15.4.4 部署HTTP嚴格傳輸安全 396
15.5 Internet信息服務 396
第16章 配置Nginx 402
16.1 以靜態鏈接OpenSSL方式安裝Nginx 402
16.2 啓用TLS 403
16.3 配置TLS協議 403
16.4 配置密鑰和證書 404
16.5 配置多密鑰 405
16.6 通配符證書和多站點證書 405
16.7 虛擬安全托管 406
16.8 默認站點返迴錯誤消息 406
16.9 前嚮保密 407
16.10 OCSP stapling 407
16.10.1 配置OCSP stapling 408
16.10.2 自定義OCSP響應 409
16.10.3 手動配置OCSP響應 409
16.11 配置臨時DH密鑰交換 410
16.12 配置臨時ECDH密鑰交換 410
16.13 TLS會話管理 411
16.13.1 獨立會話緩存 411
16.13.2 獨立會話票證 411
16.13.3 分布式會話緩存 412
16.13.4 分布式會話票證 412
16.13.5 禁用會話票證 413
16.14 客戶端身份驗證 413
16.15 緩解協議問題 414
16.15.1 不安全的重新協商 414
16.15.2 BEAST 415
16.15.3 CRIME 415
16.16 部署HTTP嚴格傳輸安全 415
16.17 TLS緩衝區調優 416
16.18 日誌記錄 416
第17章 總結 418
· · · · · · (
收起)