深入浅出 HTTPS:从原理到实战
  • 推荐0
  • 收藏4
  • 浏览1.1K

深入浅出 HTTPS:从原理到实战

虞卫东 (作者) 

  • 书  号:978-7-121-34178-6
  • 出版日期:2018-06-12
  • 页  数:512
  • 开  本:16(185*235)
  • 出版状态:上市销售
  • 维护人:董英
电子书 ¥54.00
购买电子书
纸质版 ¥89.00
本书是一本专业的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协议)知识,架构人员、开发人员、运维人员都适合阅读本书。
国内鲜有的专业的HTTPS书籍HTTPS实践指南
涉及密码学基础、TLS协议、PKI体系、HTTPS安全及性能、安全网站实践
作者是具有10多年大型网站开发经验的一线开发者和资深架构师
深刻明白Web技术体系的精髓,
通过本书将自己的方法论分享给读者
本书内容由浅入深、通俗易懂
书中有大量实例方便读者加深理解
虞卫东,网名虞大胆,新浪网高级技术经理。曾先后供职过新浪博客产品部和赶集网移动事业部。在新浪博客工作多年,担任过开发工程师、技术经理、应用架构师等,负责新浪博客的开发、运维、设计、性能优化等工作。在赶集网担任过技术总监,负责赶集网客户端后端开发工作。十余年来一直致力于Web后端开发,积累了丰富的架构设计、开发、运维经验,擅长PHP、Python等开发语言。
序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知识的入口。
致谢
感谢廼悦,从整体结构上给本书提供了很多建设性的意见,非常感谢他为本书作序,他是我最尊敬的技术领导。同时也感谢公司的技术大牛卫华为本书作序,以及其他四位专家的宝贵推荐。感谢博文视点的董英编辑和她的同事们,让我认识到编辑工作的专业性,以及一丝不苟的态度。感谢老婆的默默付出,让我有足够的时间和精力去写这本书,感谢闺女带来家庭快乐,希望老婆健健康康、开心生活,闺女健康成长。

目录

目录

第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

读者评论

  • 卫东老师,您的大作受益很大,但还有一些不明白的,能够告诉我协商出主密钥后,客户端如何生成对称密钥,谢谢您!key_block=PRF(master_secret,”key expansion”,server_random,client_random),假定第一次PRF输出32字节(SHA256),是否迭代多次,逐步拼接key_block,直到足够的长度,我使用AES-128-GCM算法,那该如何取得对称密钥呢!期待您在解答!万分感谢!18620918908,中卫同学

    老朽工程师发表于 2018/8/27 19:35:52

电子书版本

  • Epub

图书类别

相关图书

架构解密:从分布式到微服务(第2版)

吴治辉 (作者)

微服务、云原生、Kubernetes、Service Mesh是分布式领域的热点技术,它们并不是凭空出现的,一定继承了某些“前辈”的优点。我们不仅要了解这些技术...

 

趣谈网络协议

刘超 (作者)

网络协议是每个程序员入门的必修课,但是完全掌握网络协议知识并进行实际应用却并非易事。在本书中,作者将结合自己从业多年的“泣血”经验,以通俗易懂、更加贴近日常生活...

¥108.00

大型系统应用架构实战:部署、容灾、性能优化

李彦超 郭东白 陈禹 谢松林 周志伟 桑植 (作者)

本书理论与实战相结合,以AliExpress 网站为基础,全面介绍大型系统的总体技术方案、全球区域化部署技术、全球网络调度技术、性能优化,以及SRE 在AliE...

 

Java微服务测试:基于Arquillian、Hoverfly、AssertJ、JUnit、Selenium与Mockito

Alex Soto Bueno, Jason Porter, Andy Gumbrecht (作者) 刘梦馨 (译者)

本书从实战出发,介绍微服务架构所带来的测试方面的挑战,以及如何利用新的技术来应对这些挑战。通过本书,读者可以学会如何编写微服务架构下的单元测试、组件测试、集成测...

¥89.00

Spring响应式微服务:Spring Boot 2+Spring 5+Spring Cloud实战

郑天民 (作者)

《Spring响应式微服务:Spring Boot 2+Spring 5+Spring Cloud实战》主要包含构建响应式微服务架构过程中所应具备的技术体系和工...

 

小团队构建大网站:中小研发团队架构实践

张辉清 杨丽 (作者)

本书结合作者近几年的工作经验,总结了一套可直接落地、基于开源、成本低、可快速搭建的中小研发团队架构实践方法。本书共5篇22章,开篇是本书的导读;架构篇是设计思想...

¥69.00