基础知识准备:在了解HTTPS的基本原理之前,需要先了解如下的基本知识。
一、什么是HTTPS,TLS,SSL
HTTPS,也称作HTTP over TLS。TLS的前身是SSL,TLS 1.0通常被标示为SSL 3.1,TLS 1.1为SSL 3.2,TLS 1.2为SSL 3.3。下图描述了在TCP/IP协议栈中TLS(各子协议)和HTTP的关系。
二、HTTP和HTTPS协议的区别
1、https协议需要到证书颁发机构(Certificate Authority,简称CA)申请证书,一般免费证书很少,需要交费。
2、http是超文本传输协议,信息是明文传输,https 则是具有安全性的ssl加密传输协议。
3、http和https使用的是完全不同的连接方式,使用的端口也不一样,前者是80,后者是443。
4、http的连接很简单,是无状态的 。
5、HTTPS协议是由SSL+HTTP协议构建的可进行加密传输、身份认证的网络协议, 要比http协议安全。
从上面可看出,HTTPS和HTTP协议相比提供了
- 数据完整性:内容传输经过完整性校验
- 数据隐私性:内容经过对称加密,每个连接生成一个唯一的加密密钥
- 身份认证:第三方无法伪造服务端(客户端)身份
其中,数据完整性和隐私性由TLS Record Protocol保证,身份认证由TLS Handshaking Protocols实现。
三、证书
1、什么是证书呢?
2、证书中包含什么信息
- 证书信息:过期时间和序列号
- 所有者信息:姓名等
- 所有者公钥
3、为什么服务端要发送证书给客户端
互联网有太多的服务需要使用证书来验证身份,以至于客户端(操作系统或浏览器等)无法内置所有证书,需要通过服务端将证书发送给客户端。
4、客户端为什么要验证接收到的证书
中间人攻击
5、客户端如何验证接收到的证书
为了回答这个问题,需要引入数字签名(Digital Signature)。
将一段文本通过哈希(hash)和私钥加密处理后生成数字签名。
假设消息传递在Bob,Susan和Pat三人之间发生。Susan将消息连同数字签名一起发送给Bob,Bob接收到消息后,可以这样验证接收到的消息就是Susan发送的
当然,这个前提是Bob知道Susan的公钥。更重要的是,和消息本身一样,公钥不能在不安全的网络中直接发送给Bob。
此时就引入了证书颁发机构(Certificate Authority,简称CA),CA数量并不多, Bob客户端内置了所有受信任CA的证书。CA对Susan的公钥(和其他信息)数字签名后生成证书。
Susan将证书发送给Bob后,Bob通过CA证书的公钥验证证书签名。
Bob信任CA,CA信任Susan, 使得 Bob信任Susan,信任链(Chain Of Trust)就是这样形成的。
事实上,Bob客户端内置的是CA的根证书(Root Certificate),HTTPS协议中服务器会发送证书链(Certificate Chain)给客户端。
正式开始HTTPS的内容:
一、HTTPS的基本原理
从上面可知,HTTPS能够加密信息,以免敏感信息被第三方获取。所以很多银行网站或电子邮箱等等安全级别较高的服务都会采用HTTPS协议。HTTPS其实是有两部分组成:HTTP + SSL / TLS,也就是在HTTP上又加了一层处理加密信息的模块。服务端和客户端的信息传输都会通过TLS进行加密,所以传输的数据都是加密后的数据。具体是如何进行加密,解密,验证的,且看下图。
1. 客户端发起HTTPS请求
这个没什么好说的,就是用户在浏览器里输入一个https网址,然后连接到server的443端口。
2. 服务端的配置
采用HTTPS协议的服务器必须要有一套数字证书,可以自己制作,也可以向组织申请。区别就是自己颁发的证书需要客户端验证通过,才可以继续访问,而使用受信任的公司申请的证书则不会弹出提示页面(startssl就是个不错的选择,有1年的免费服务)。这套证书其实就是一对公钥和私钥。如果对公钥和私钥不太理解,可以想象成一把钥匙和一个锁头,只是全世界只有你一个人有这把钥匙,你可以把锁头给别人,别人可以用这个锁把重要的东西锁起来,然后发给你,因为只有你一个人有这把钥匙,所以只有你才能看到被这把锁锁起来的东西。
3. 传送证书
这个证书其实就是公钥,只是包含了很多信息,如证书的颁发机构,过期时间等等。
4. 客户端解析证书
这部分工作是由客户端的TLS来完成的,首先会验证公钥是否有效,比如颁发机构,过期时间等等,如果发现异常,则会弹出一个警告框,提示证书存在问题。如果证书没有问题,那么就生成一个随机值。然后用证书对该随机值进行加密。就好像上面说的,把随机值用锁头锁起来,这样除非有钥匙,不然看不到被锁住的内容。
5. 传送加密信息
这部分传送的是用证书加密后的随机值,目的就是让服务端得到这个随机值,以后客户端和服务端的通信就可以通过这个随机值来进行加密解密了。
6. 服务端解密信息
服务端用私钥解密后,得到了客户端传过来的随机值(私钥),然后把内容通过该值进行对称加密。所谓对称加密就是,将信息和私钥(随机值)通过某种算法混合在一起,这样除非知道私钥(随机值),不然无法获取内容,而正好客户端和服务端都知道这个私钥(随机值),所以只要加密算法够彪悍,私钥(随机值)够复杂,数据就够安全。
7. 传输加密后的信息
这部分信息是服务端用私钥(随机值)加密后的信息,可以在客户端被还原
8. 客户端解密信息
客户端用之前生成的私钥(随机值)解密服务端传过来的信息,于是获取了解密后的内容。整个过程第三方即使监听到了数据,也束手无策。
二、HTTPS的通信流程和握手过程
1、HTTPS对应的通信时序图:
2、 HTTPS在传输数据之前需要客户端(浏览器)与服务端(网站)之间进行一次握手,在握手过程中将确立双方加密传输数据的密码信息。TLS/SSL协议不仅仅是一套加密传输的协议,更是一件经过艺术家精心设计的艺术品,TLS/SSL中使用了非对称加密,对称加密以及HASH算法。握手过程的具体描述如下:
1. 浏览器将自己支持的一套加密规则发送给网站。
2.网站从中选出一组加密算法与HASH算法,并将自己的身份信息以证书的形式发回给浏览器。证书里面包含了网站地址,加密公钥,以及证书的颁发机构等信息。
3.浏览器获得网站证书之后浏览器要做以下工作:
a) 验证证书的合法性(颁发证书的机构是否合法,证书中包含的网站地址是否与正在访问的地址一致等),如果证书受信任,则浏览器栏里面会显示一个小锁头,否则会给出证书不受信的提示。
b) 如果证书受信任,或者是用户接受了不受信的证书,浏览器会生成一串随机数的密码,并用证书中提供的公钥加密。
c) 使用约定好的HASH算法计算握手消息,并使用生成的随机数对消息进行加密,最后将之前生成的所有信息发送给网站。
4.网站接收浏览器发来的数据之后要做以下的操作:
a) 使用自己的私钥将信息解密取出密码,使用密码解密浏览器发来的握手消息,并验证HASH是否与浏览器发来的一致。
b) 使用密码加密一段握手消息,发送给浏览器。
5.浏览器解密并计算握手消息的HASH,如果与服务端发来的HASH一致,此时握手过程结束,之后所有的通信数据将由之前浏览器生成的随机密码并利用对称加密算法进行加密。
附录: TLTLS协议
包括TLS Record Protocol和TLS Handshake Protocol
1、TLS Record Protocol
在TLS协议中,有四种子协议运行于Record protocol之上
- Handshake protocol
- Alert protocol
- Change cipher spec protocol
- Application data protocol
Record protocol起到了这样的作用
- 在发送端:将数据(Record)分段,压缩,增加MAC(Message Authentication Code)和加密
- 在接收端:将数据(Record)解密,验证MAC,解压并重组
值得一提的是,Record protocol提供了数据完整性和隐私性保证,但Record类型(type)和长度(length)是公开传输的
Record Protocol有三个连接状态(Connection State),连接状态定义了压缩,加密和MAC算法。所有的Record都是被当前状态(Current State)确定的算法处理的。
TLS Handshake Protocol和Change Ciper Spec Protocol会导致Record Protocol状态切换。
初始当前状态(Current State)没有指定加密,压缩和MAC算法,因而在完成TLS Handshaking Protocols一系列动作之前,客户端和服务端的数据都是明文传输的;当TLS完成握手过程后,客户端和服务端确定了加密,压缩和MAC算法及其参数,数据(Record)会通过指定算法处理。
其中,Record首先被加密,然后添加MAC(message authentication code)以保证数据完整性。
TLS Handshaking Protocols
Handshakeing protocols包括Alert Protocol,Change Ciper Spec Protocol和Handshake protocol。本文不会详细介绍Alert Protocol和Change Ciper Spec Protocol。
使用RSA算法的握手过程是这样的(已在总览中提到)
相关推荐
本篇将深入探讨计算机网络的基础概念、组成结构、主要功能以及常用协议。 首先,计算机网络的基本概念包括节点、链路和网络。节点是指网络上的设备,如计算机、路由器、交换机等;链路则是连接这些节点的物理路径,...
《深入浅出密码学》是一份专为密码学初学者和进阶者设计的文档,旨在帮助读者理解和掌握密码学的基础知识以及应用技术。密码学是信息安全领域中的核心部分,它涉及数据保护、隐私保护以及网络通信的安全。通过学习...
《Head First 深入浅出 Mobile Web》是由[美] Lyza Danger Gardner 和其他作者共同创作,并由林琪等人翻译成中文的书籍。这本书旨在帮助读者深入理解移动Web开发的关键概念和技术,以轻松易懂的方式呈现,适合初学者...
《深入浅出Android》是为Android开发者准备的一本详尽的基础教程,旨在帮助读者全面理解Android平台的各个方面,从核心概念到实际应用开发。这本书涵盖了Android开发中的关键知识点,包括但不限于: 1. **Android...
【深入浅出--新手也能看懂的Tomcat运行逻辑】 Tomcat是一款广泛应用的开源Web服务器和Java应用服务器,尤其在处理Servlet和JSP技术方面表现出色。本资料旨在帮助新手理解Tomcat的运行机制,使其能够更好地管理和...
Ullman合著的经典教材,它深入浅出地介绍了编译器设计的各个方面。这本书是许多计算机科学专业的学生和从业者学习编译技术的重要参考资料。提供的章节答案涵盖了第二章至第七章,这些章节主要包括了编译器的基本...
《计算机组成原理(第二版)》是唐朔飞教授编著的一本经典教材,它深入浅出地介绍了计算机系统的基本构造和工作原理。这本教材的课后答案全面覆盖了书中的各个章节,旨在帮助读者深入理解并巩固所学知识。下面将就这...
该书从Internet编程的基本原理出发,深入浅出、循序渐进地阐述了网络机器人程序Spider、Bot、Aggregator的实现技术,并分析了每种程序的优点及适用场合。本书提供了大量的有效源代码,并对这些代码进行了详细的分析...
3、中文书籍:郭宪的《深入浅出强化学习原理入门》 4、英文文档:https://spinningup.openai.com/en/latest/index.html 5、论文:DDPG、TRPO、SAC等都可以找原论文读一下 6、源码:学一个算法要把它的框架搞懂,输入...
首先,我们来看《深入浅出 HTTPS从原理到实战》。HTTPS(Hypertext Transfer Protocol Secure)是一种用于安全网络通信的协议,它在HTTP的基础上加入了SSL/TLS协议,以确保数据传输的加密性和完整性。该书可能详细...
- 通过检测浏览器的User-Agent字符串,可以大致判断出浏览器所使用的JavaScript引擎类型。 - 利用JavaScript的`navigator`对象和`window`对象的一些属性和方法,可以进一步确定JavaScript引擎的具体版本和其他细节...
本课件深入浅出地讲解了密码学的基本概念和常用加密算法,旨在帮助学习者理解并掌握这一领域的基础知识。 首先,密码学的基石是加密技术,它通过特定的算法将明文(可读信息)转化为密文(不可读信息),以防止未经...
本压缩包包含两本密码学的重要教材,分别为《深入浅出密码学——常用加密技术原理与应用》和《Understanding Cryptography (2010)》。 《深入浅出密码学——常用加密技术原理与应用》这本书旨在为读者提供密码学的...
本文将深入探讨BASIC认证的原理以及如何在实际环境中实现这一机制。 一、BASIC认证概述 BASIC认证是HTTP协议中的一种身份验证方法,它允许服务器在接收到未授权的请求时,要求客户端提供用户名和密码。当客户端...
本教学课件深入浅出地介绍了互联网(Internet)的使用,旨在帮助初学者理解和掌握计算机网络的基础知识以及互联网的基本应用。以下是对课件内容的详细解析: 一、计算机网络的基本概念 计算机网络是连接多台计算机...
《无线通信电路基础教程》是一本深入浅出的教材,主要针对无线通信领域的初学者和对无线通信感兴趣的读者。本书全面介绍了无线通信的基础知识,包括电磁波理论、射频技术、调制解调原理以及无线通信系统的设计与实现...
总结起来,这篇“jslinux总结帖”可能是一个深入浅出的教程,旨在教给读者如何利用JavaScript来理解和模拟Linux操作系统的运作。它不仅涵盖了JavaScript编程的基础,还涉及到了操作系统设计的关键概念,对于想要了解...
吴功宜教授的教材因其深入浅出的讲解和丰富的实例分析而受到广大读者的喜爱,其配套答案详尽地解析了每一个问题,使学习者能够独立思考,解决实际问题。无论是对于在校学生,还是对于自学的网络爱好者,这些答案都是...