作者简介:
Ivan Ristić
资深安全专家、工程师,开发了开源应用防火墙ModSecurity以及许多SSL/TLS和PKI相关工具,并运营提供Web应用安全测试服务的SSL Labs网站。Ivan Ristić是诸多安全论坛的积极参与者,经常在Black Hat、RSA、OWASP AppSec等安全大会上发表演讲。他曾任Qualys的应用程序安全研究主任,是SSL Labs、Feisty Duck和Hardenize的创始人。
译者简介:
杨洋
前阿里巴巴SSL/TLS、密码学和网络安全领域专家,曾负责阿里巴巴集团全站HTTPS和7层DDoS防御等产品的核心设计和研发。
李振宇
阿里巴巴运维专家,负责阿里巴巴集团HTTPS证书管理、架构设计等相关工作。
蒋锷
阿里巴巴应用运维专家,负责阿里巴巴集团HTTPS接入平台的建设,同时担任阿里巴巴全站HTTPS项目总项目经理,助力阿里巴巴进入HTTPS时代。
周辉
阿里巴巴应用运维专家,负责阿里全站HTTPS性能优化以及淘宝海外用户访问性能优化。
陈传文
前阿里巴巴集团专家,曾负责Tengine以及HTTPS接入层设计与研发。现专注于无线安全方面的研究探索工作。
第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
· · · · · · (
收起)