浅析 HTTPS 和 SSL/TLS 协议-程序员宅基地

技术标签: python  java  编程语言  http  https  

名词说明

1.ssl协议:通过认证、数字签名确保完整性;使用加密确保私密性;确保客户端和服务器之间的通讯安全
2.tls协议:在SSL的基础上新增了诸多的功能,它们之间协议工作方式一样
3.https协议:https over tls,tls协议是https协议的核心
4.CA:Certificate Authority,也称为电子商务认证中心,是负责发放和管理数字证书的权威机构
对称加密:加密和解密使用相同密钥的加密算法。它的速度快,通常在加密大量数据时使用
非对称加密:需要两个密钥来进行加密和解密,公钥与私钥。公钥加密的只能用私钥解密,反之私钥加密的也只能用公钥解密。通常用于重要信息的安全传输,缺点是速度比对称加密慢很多

HTTPS 简介

HTTPS (全称:Hyper Text Transfer Protocol over SecureSocket Layer),是以安全为目标的 HTTP 通道,在HTTP的基础上通过传输加密和身份认证保证了传输过程的安全性。

HTTPS 在HTTP 的基础下加入SSL,HTTPS 的安全基础是 SSL,因此加密的详细内容就需要 SSL。 整体架构如下:

HTTPS 存在不同于 HTTP 的默认端口及一个加密/身份验证层(在 HTTP与 TCP 之间)。这个系统提供了身份验证与加密通讯方法。它被广泛用于万维网上安全敏感的通讯,例如交易支付等方面。

SSL 与 TLS 协议

协议架构

SSL 协议

SSL(Secure Sockets Layer 安全套接层),及其继任者传输层安全(Transport Layer Security,TLS)是为网络通信提供安全及数据完整性的一种安全协议。TLS与SSL在传输层对网络连接进行加密。

SSL协议位于TCP/IP协议与各种应用层协议之间,为数据通讯提供安全支持。SSL协议可分为两层:

  • SSL记录协议(SSL Record Protocol):它建立在可靠的传输协议(如TCP)之上,为高层协议提供数据封装、压缩、加密等基本功能的支持。

  • SSL握手协议(SSL Handshake Protocol):它建立在SSL记录协议之上,用于在实际的数据传输开始前,通讯双方进行身份认证、协商加密算法、交换加密密钥等。

TLS

  • TLS:Transport Layer Security,安全传输层协议(TLS)用于在两个通信应用程序之间提供保密性和数据完整性。该协议由两层组成: TLS 记录协议(TLS Record)和 TLS 握手协议(TLS Handshake)。较低的层为 TLS 记录协议,位于某个可靠的传输协议(例如 TCP)上面。安全传输层协议(TLS)用于在两个通信应用程序之间提供保密性和数据完整性。该协议由两层组成: TLS 记录协议(TLS Record)和 TLS 握手协议(TLS Handshake)。TLS 的最大优势就在于:TLS 是独立于应用协议。高层协议可以透明地分布在 TLS 协议上面。然而,TLS 标准并没有规定应用程序如何在 TLS 上增加安全性;它把如何启动 TLS 握手协议以及如何解释交换的认证证书的决定权留给协议的设计者和实施者来判断。

安全传输层协议(TLS)用于在两个通信应用程序之间提供保密性和数据完整性。

该协议由两层组成: TLS记录协议(TLS Record)和TLS握手协议(TLS Handshake)。

较低的层为TLS记录协议,位于某个可靠的传输协议(例如TCP)上面。

TLS记录协议提供的连接安全性具有两个基本特性:

  • 私有——对称加密用以数据加密(DES、RC4等)。对称加密所产生的密钥对每个连接都是唯一的,且此密钥基于另一个协议(如握手协议)协商。记录协议也可以不加密使用。
  • 可靠——信息传输包括使用密钥的MAC进行信息完整性检查。安全哈希功能(SHA、MD5等)用于MAC计算。记录协议在没有MAC的情况下也能操作,但一般只能用于这种模式,即有另一个协议正在使用记录协议传输协商安全参数。

TLS记录协议用于封装各种高层协议。作为这种封装协议之一的握手协议允许服务器与客户机在应用程序协议传输和接收其第一个数据字节前彼此之间互相认证,协商加密算法和加密密钥。TLS握手协议提供的连接安全具有三个基本属性:

  • 可以使用非对称的,或公共密钥的密码术来认证对等方的身份。该认证是可选的,但至少需要一个结点方。
  • 共享解密密钥的协商是安全的。对偷窃者来说协商加密是难以获得的。此外经过认证过的连接不能获得加密,即使是进入连接中间的攻击者也不能。
  • 协商是可靠的。没有经过通信方成员的检测,任何攻击者都不能修改通信协商。

TLS的最大优势就在于:TLS是独立于应用协议。高层协议可以透明地分布在TLS协议上面。然而,TLS标准并没有规定应用程序如何在TLS上增加安全性;它如何启动TLS握手协议以及如何解释交换的认证证书的决定权留给协议的设计者和实施者来判断。

TLS和SSL的关系

1.TLS与SSL的差异

1)版本号:TLS记录格式与SSL记录格式相同,但版本号的值不同,TLS的版本1.0使用的版本号为SSLv3.1。

2)报文鉴别码:SSLv3.0和TLS的MAC算法及MAC计算的范围不同。TLS使用RFC-2104定义的HMAC算法。SSLv3.0使用了相似的算法,两者差别在于SSLv3.0中,填充字节与密钥之间采用的是连接运算,而HMAC算法采用的异或运算。但是两者的安全程度是相同的。

3)伪随机函数:TLS使用了称为PRF的伪随机函数来将密钥扩展成数据块,是更安全的方式。

4)报警代码:TLS支持几乎所有的SSLv3.0报警代码,而且TLS还补充定义了很多报警代码,如解密失败(decryption_failed)、记录溢出(record_overflow)、未知CA(unknown_ca)、拒绝访问(access_denied)等。

5)密文族和客户证书:SSLv3.0和TLS存在少量差别,即TLS不支持Fortezza密钥交换、加密算法和客户证书。

6)certificate_verify和finished消息:SSLv3.0和TLS在用certificate_verify和finished消息计算MD5和SHA-1散列码时,计算的输入有少许差别,但安全性相当。

7)加密计算:TLS和SSLv3.0在计算主密值(master secret)时采用的方式不同。

8)填充:用户数据加密之前需要增加的填充字节。在SSL中,填充后的数据长度哟啊达到密文快长度的最小整数倍。而在TLS中,填充后的数据长度可以是密文块长度的任意整数倍(但填充的最大长度为255字节),这种方式可以防止基于对报文长度进行分析的攻击。

2.TLS的主要增强内容

TLS的主要目标是使SSL更安全,并使协议的规范更精确和完善。TLS在SSL v3.0的基础上,提供了以下增加内容:

1)更安全的MAC算法

2)更严密的警报

3)“灰色区域”规范的更明确的定义

3.TLS对于安全性的改进

1)对于消息认证使用密钥散列法:TLS使用“消息认证代码的密钥散列法”(HMAC),当记录在开放的网络(如因特网)上传送时,该代码确保记录不会被变更。SSLv3.0还提供键控消息认证,但HMAC比SSLv3.0使用(消息认证代码)MAC功能更安全。

2)增强的伪随机功能(PRF):PRF生成密钥数据。在TLS中,HMAC定义PRF。PRF使用两种散列算法保证其安全性。如果任一算法暴露了,只要第二种算法未暴露,则数据仍然是安全的。

3)改进的已完成消息验证:TLS和SSLv3.0都对两个端点提供已完成的消息,该消息认证交换的消息没有被变更。然而,TLS将此已完成消息基于PRF和HMAC值之上,这也比SSLv3.0更安全。

4)一致证书处理:与SSLv3.0不同,TLS试图指定必须在TLS之间实现交换的证书类型。

5)特定警报消息:TLS提供更多的特定和附加警报,以指示任一会话端点检测到的问题。TLS还对何时应该发送某些警报进行记录。

HTTPS 通信握手过程

SSL协议提供的服务主要有:

1)认证用户和服务器,确保数据发送到正确的客户机和服务器;

2)加密数据以防止数据中途被窃取;

3)维护数据的完整性,确保数据在传输过程中不被改变。

SSL协议的工作流程:

服务器认证阶段:

1)客户端向服务器发送一个开始信息“Hello”以便开始一个新的会话连接;

2)服务器根据客户的信息确定是否需要生成新的主密钥,如需要则服务器在响应客户的“Hello”信息时将包含生成主密钥所需的信息;

3)客服根据收到的服务器响应信息,产生一个主密钥,并用服务器的公开密钥加密后传给服务器;

4)服务器恢复该主密钥,并返回给客户一个用主密钥认证的信息,以此让客户认证服务器。

用户认证阶段:

在此之前,服务器已经通过了客户认证,这一阶段主要完成对客户的认证。经认证的服务器发送一个提问给客户,客户则返回(数字)签名后的提问和其公开密钥,从而向服务器提供认证。

关于数字证书

证书内容:如发行机构、有效期、公司信息等
● 摘要:证书内容等经过hash之后生成摘要
● 数字签名:CA使用私钥对摘要,加密之后生成签名
● 数字证书主要由证书内容、公钥、数字签名、使用的hash算法等组成

证书验证分为真实性验证与有效性验证:

真实性验证:
● 通过内置根证书的公钥对数字签名解密,得到一个hash值,这个hash值就是摘要
● 使用证书内的hash算法将证书内容进行hash之后得到一个hash值,用这个新的hash值与上一步的hash值进行对比
● 若相同,证明证书真实有效,若不同,则证明被串改过

有效性验证:
● CRL。CA会提供一份证书失效名单,浏览器会缓存并定期更新该名单。
● OCSP。CA提供实时接口查询

关于数字签名中,CA使用的私钥的问题:
● CA也会生成一对私钥、公钥,私钥对用户证书进行加密
● 而公钥会内置在操作系统的安装当中成为系统默认的根证书
● 在真实性验证中,客户端使用内置根证书中的公钥对用户的证书进行解密

参考文章

SSL vs TLS - What's the Difference?: https://www.globalsign.com/en/blog/ssl-vs-tls-difference

聊聊HTTPS和SSL/TLS协议 | 程序师 - 程序员、编程语言、软件开发、编程技术 http://www.techug.com/post/https-ssl-tls.html

详解SSL/TLS http://www.mamicode.com/info-detail-1846390.html (推荐阅读)

【HTTPS、SSL、TLS三者之间的联系和区别_Enweitech Software Works-程序员宅基地_ssl和tls】https://blog.csdn.net/enweitech/article/details/81781405

https://www.jianshu.com/p/55ff4c3b4b5c

版权声明:本文为博主原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。
本文链接:https://blog.csdn.net/universsky2015/article/details/115024915

智能推荐

百度c语言贴吧 经典C源程序100例-2_c语言贴吧顶贴机源码-程序员宅基地

文章浏览阅读1k次。【程序2】 题目:企业发放的奖金根据利润提成。利润(I)低于或等于10万元时,奖金可提10%;利润高    于10万元,低于20万元时,低于10万元的部分按10%提成,高于10万元的部分,可可提    成7.5%;20万到40万之间时,高于20万元的部分,可提成5%;40万到60万之间时高于    40万元的部分,可提成3%;60万到100万之间时,高于60万元的部分,可提成1.5_c语言贴吧顶贴机源码

偏向锁,轻量级锁与重量级锁_轻量级锁和偏向锁,重量级锁-程序员宅基地

文章浏览阅读256次。偏向锁Hotspot 的作者经过以往的研究发现大多数情况下锁不仅不存在多线程竞争,而且总是由同一线程多次获得,为了让线程获得锁的代价更低而引入了偏向锁。当一个线程访问同步块并获取锁时,会在对象头和栈帧中的锁记录里存储锁偏向的线程 ID。以后该线程在进入和退出同步块时不需要花费CAS操作来加锁和解锁,而只需简单的检验一下对象头的Mark Word里是否存储着指向当前线程的偏向锁,如果存在,表示线_轻量级锁和偏向锁,重量级锁

TMS320C6678开发例程使用手册(7)_sa tic fir-程序员宅基地

文章浏览阅读608次。3.算法Demo例程演示所有工程均位于光盘"Demo\Algorithm\Application"文件夹内,本章节例程仅演示算法功能,算法与平台和系统无关,如需使用SYS/BIOS请自行移植。使用CCS工程导入和编译步骤导入例程。备注:本节提供的例程测试结果仅供参考。3.1FIR——有限长单位冲激响应滤波器此程序的作用是进行FIR有限长单位冲激响应滤波器测试。按照工程导入步骤加载FIR.out文件,然后点击程序运行按钮,程序会在断点处停下来。点击CCS菜单"Tools->Gra_sa tic fir

Spring AOP配置标签解析_spring-aop:5.0.8.release-程序员宅基地

文章浏览阅读1.2k次。准备Spring版本:5.0.8解析过程开启 Spring AOP 注解自动代理需要配置标签 <aop:aspectj-autoproxy/>,查看 spring-aop:5.0.8.RELEASE\META-INF\spring.handlers 文件,配置以下内容:http\://www.springframework.org/schema/aop=org.sp..._spring-aop:5.0.8.release

git命令大全_git diff testtag head --name-only | xargs tar-程序员宅基地

文章浏览阅读9.2k次。git操作配置.gitignore文件作用:可以屏蔽掉某些不需要被管理的文件或文件夹,如日志文件、临时文件等。git rm -r --cached .git add .git commit -m ‘update .gitignore’新建创建一个新的git仓库。这个版本库的配置、存储等信息会被保存到.git文件中# 初始化当前项目$ git init# 新建一个目录,将其初始化为Git代码库$ git init [project-name]# 在指定目录创建一个空的 Git _git diff testtag head --name-only | xargs tar

悲催的程序员,以及程序员的悲催-程序员宅基地

文章浏览阅读458次。我尽量用平和一点的口吻跟你说说关于程序员的那点事儿。1.我在一个叫摩托罗拉的公司干过,那地方有50%的人整天干的事情就是催另外25%的人没完没了的解剩下那25%的人造成的bug。我是个程序员,每天敲敲打打,哪天电脑崩溃了你会发现我这辈子啥都没留下。大多数人甚至都没有想过我们是怎么把手机捣鼓出来的,包括是是否人手一套乐高的家庭套装工具。我那可爱的岳父岳母在向自己的亲戚朋友们介绍我的时候,总是用一种充满自豪的口吻轻描淡写的说,他在摩托罗拉上班(我离开摩托罗拉以后他

随便推点

centos7 mysql允许连接_centos7 mysql允许远程连接设置-程序员宅基地

文章浏览阅读779次。Mysql为了安全性,在默认情况下用户只允许在本地登录,可是在有此情况下,还是需要使用用户进行远程连接,因此为了使其可以远程需要进行如下操作:一、允许root用户在任何地方进行远程登录,并具有所有库任何操作权限,具体操作如下:在本机先使用root用户登录mysql:mysql -u root -p"youpassword"进行授权操作:mysql>GRANT ALL PRIVILEGES O..._centos7 mysql 允许客户端连接

【小Y学算法】️每日LeetCode打卡️——40.二叉树的后序遍历-程序员宅基地

文章浏览阅读1.3w次,点赞24次,收藏60次。没有特别幸运,那么请先特别努力,别因为懒惰而失败,还矫情地将原因归于自己倒霉。所以说,树倒了,没有一片雪花是无辜的

搬砖:ioctl函数,可以获取ip地址,修改ip地址,网卡地址等_if(ioctl(if_fd, i_push, "ip") < 0){-程序员宅基地

文章浏览阅读482次。Android配置ip地址ioctl函数,可以获取ip地址,修改ip地址,网卡地址等部分转自http://www.cnblogs.com/zht-blog/p/4025903.htmlint ioctl(int d, int request, ...);ioctl用来控制特殊设备文件的属性,第一个参数fd必须是一个已经打开的文件描述符,第三个参数一般为cha..._if(ioctl(if_fd, i_push, "ip") < 0){

USB-C 端口在您的 Mac 上无法使用如何解决?_macos 使用usbc 转接头 会提示 winusb-程序员宅基地

文章浏览阅读266次。由于 Mac 上缺少 USB-C 端口,即使一个端口停止工作,对许多用户来说也可能很麻烦。如果 MacBook 上的 USB-C 端口突然停止工作,请查看以下解决问题的一些可能解决方案。如何修复 USB-C 端口在您的 MacBook 上不工作重启你的 Mac如果 MacBook 上的 USB-C 端口突然停止工作,最简单的修复方法就是重新启动 Mac。在大多数情况下,这应该足以解决手头的问题并确保 MacBook 上的 USB-C 端口再次工作。更新到最新的 macOS 版本如果您的 MacB_macos 使用usbc 转接头 会提示 winusb

【计算机毕业设计】基于 SpringBoot+SpringCloud+Vue 电商秒杀系统-程序员宅基地

文章浏览阅读18次。基于 SpringBoot+SpringCloud+Vue 电商秒杀系统

C++编程规范---第9章 类的构造函数、析构函数与赋值函数_c++析构函数规范-程序员宅基地

文章浏览阅读574次。Blogdown--构造函数、析构函数与赋值函数是每个类最基本的函数。它们太普通以致让人容易麻痹大意,其实这些貌似简单的函数就象没有顶盖的下水道那样危险。 每个类只有一个析构函数和一个赋值函数,但可以有多个构造函数(包含一个拷贝构造函数,其它的称为普通构造函数)。对于任意一个类A,如果不想编写上述函数,C++编译器将自动为A产生四个缺省的函数,如 A(void);_c++析构函数规范

推荐文章

热门文章

相关标签