深入浅出 HTTPS:从原理到实战
出版信息
虞卫东 / 电子工业出版社 / 2018-6 / 89
内容简介
本书是一本专业的HTTPS书籍,全面讲解了HTTPS领域的相关知识,内容包括密码学、OpenSSL命令行、证书、TLS协议、HTTPS网站性能优化、HTTPS网站优秀实践、大型网站HTTPS架构设计等。本书有几个特点:(1)内容全面而新颖,基于RFC文档、国外书籍、社区等一手资料,总结了大部分最新的HTTPS知识;(2)由浅入深,从基础到进阶全面掌握HTTPS,读者能够轻松构建一个HTTPS网站,并使网站安全性和性能最大化,对于大型网站的HTTPS系统架构和应用架构设计也有指导意义;(3)内容通俗易懂,用语描述精准,充分考虑到读者的阅读和思考习惯,只要具备基础的HTTPS知识和Linux知识就能无障碍阅读;(4)理论结合实践,本书除了让读者掌握HTTPS的交互细节,更注重实践,介绍了很多工具,让读者更好地掌握HTTPS;(5)具有启发性,读者可以通过本书开启密码学和HTTPS学习之门,真正做到“深入”。HTTPS(TLS协议)重点在于密码学,互联网安全是第一位的,所以任何技术领域(比如目前火爆的区块链)都需要密码学和HTTPS(TLS协议)知识,架构人员、开发人员、运维人员都适合阅读本书。
作者简介
肖佳, VMware高级测试工程师,博客园知名博主(网名小坦克),撰写了很多软件开发和测试方面的技术文章;有10多年的软件开发测试经验,有丰富的手动测试和自动化测试经验;个人博客阅读量已经超过500万,乐于分享,善于用浅显的语言来讲解技术
目录
目录
第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