本书是一本专业的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知识的入口。
致谢
感谢廼悦,从整体结构上给本书提供了很多建设性的意见,非常感谢他为本书作序,他是我最尊敬的技术领导。同时也感谢公司的技术大牛卫华为本书作序,以及其他四位专家的宝贵推荐。感谢博文视点的董英编辑和她的同事们,让我认识到编辑工作的专业性,以及一丝不苟的态度。感谢老婆的默默付出,让我有足够的时间和精力去写这本书,感谢闺女带来家庭快乐,希望老婆健健康康、开心生活,闺女健康成长。
卫东老师,您的大作受益很大,但还有一些不明白的,能够告诉我协商出主密钥后,客户端如何生成对称密钥,谢谢您!key_block=PRF(master_secret,”key expansion”,server_random,client_random),假定第一次PRF输出32字节(SHA256),是否迭代多次,逐步拼接key_block,直到足够的长度,我使用AES-128-GCM算法,那该如何取得对称密钥呢!期待您在解答!万分感谢!18620918908,中卫同学