那么什么是HTTPS?

HTTPS(Hypertext Transfer Protocol Secure)是一种通过计算机网络进行安全通信的传输协议。HTTPS经由HTTP进行通信,但利用TLS来加密数据包。

HTTPS开发的主要目的,是对提供提供服务的服务器的身份认证,保护交换数据的隐私与完整性。

什么是TLS?

TLS是传输层加密协议,它的前身是SSL协议。由网景公司于1995年发布。后改名为TLS。常用的 TLS 协议版本有:TLS1.2, TLS1.1, TLS1.0 和 SSL3.0。其中 SSL3.0 由于 POODLE 攻击已经被证明不安全。TLS1.0 也存在部分安全漏洞,比如 RC4 和 BEAST 攻击。

由于HTTP协议采用明文传输

HTTPS相对HTTP提供了更安全的数据传输保障,主要体现在三个方面:

1)内容加密:客户端到服务器的内容都是以加密形式传输,中间者无法直接查看明文内容;

2)身份认证:通过校验保证客户端访问的是自己的服务器;

3)数据完整性:防止内容被第三方冒充或者篡改。(如:fiddler打断点截取数据篡改请求参数)

那么HTTPS实现原理到底具体是怎样的呢?

对称加密:

即加密和解密使用同一个密钥,虽然对称加密破解难度很大,但由于对称加密需要在网络上传输密钥和密文,一旦被黑客截取很容就能被破解,安全性角度讲很不安全,你暴露了把我也拉下水!因此对称加密并不是一个较好的选择。

(详见文章:《即时通讯安全篇(三):常用加解密算法与通讯安全讲解》)

非对称加密:

即加密和解密使用不同的密钥,分别称为公钥和私钥。我们可以用公钥对数据进行加密,但必须要用私钥才能解密。在网络上只需要传送公钥,私钥保存在服务端用于解密公钥加密后的密文。

但是非对称加密消耗的CPU资源非常大,效率很低,严重影响HTTPS的性能和速度。因此非对称加密也不是HTTPS的理想选择。(详见文章:《即时通讯安全篇(六):非对称加密技术的原理与应用实践》)

到这里你会问纯对称不安全,纯非对称性能差那你说咋办?

其实为了提高安全性和效率HTTPS结合了对称和非对称两种加密方式。即客户端使用对称加密生成密钥(key)对传输数据进行加密,

然后使用非对称加密的公钥再对key进行加密。因此网络上传输的数据是被key加密的密文和用公钥加密后的密文key,

因此即使被黑客截取,由于没有私钥,无法获取到明文key,便无法获取到明文数据。所以HTTPS的加密方式是安全的。

数字证书

我们上面提到了HTTPS的工作原理,通过对称加密和非对称加密实现数据的安全传输。我们也知道非对称加密过程需要用到公钥进行加密。

那么公钥从何而来?

其实公钥就被包含在数字证书中。数字证书通常来说是由受信任的数字证书颁发机构CA,在验证服务器身份后颁发,证书中包含了一个密钥对(公钥和私钥)和所有者识别信息。数字证书被放到服务端,具有服务器身份验证和数据传输加密功能。

除了CA机构颁发的证书之外,还有非CA机构颁发的证书和自签名证书:

1)非CA机构即是不受信任的机构颁发的证书,理所当然这样的证书是不受信任的;

2)自签名证书,就是自己给自己颁发的证书。当然自签名证书也是不受信任的。

例如12306网站使用的就是非CA机构颁发的证书(最近发现12306购票页面已经改为CA证书了),12306的证书是由SRCA颁发,SRCA中文名叫中铁数字证书认证中心,简称中铁CA。这是个铁道部自己搞的机构,相当于是自己给自己颁发证书。

说了这么多,我们来总结一下数字证书的两个作用:

1)分发公钥:每个数字证书都包含了注册者生成的公钥。在 TLS握手时会通过 certificate 消息传输给客户端;

2)身份授权:确保客户端访问的网站是经过 CA 验证的可信任的网站。(在自签名证书的情况下可以验证是否是我们自己的服务器)

最后我们从别处搬来一个中间人攻击的例子,来认识证书是如何保证我们的数据安全的。

HTTPS双向认证

所谓双向认证就是客户端校验服务器证书,同时服务器也需要校验客户端的证书。因此,双向认证就另需一张证书放到客户端待服务端去验证。面试官要面试我能力,我也要查看下面试官你的财力

(对于HTTPS双向认证,用到的情况不多。但是对于像金融行业等对安全性要求较高的企业,通常都会使用双向认证,一般企业都是单项认证,

客户端在请求服务端时验证服务器的证书即可,单向认证只能保证自己客户端我们的服务器因为服务器有证书客户端就认为你是我的服务器了,那就会出现我伪造服务器放个同样的证书客户端还傻乎乎的给你的信息安全吗透明吗)

双向认证流程

接下来我们来了解下双向认证的流程,以加深对双向认证的理解:

a. 客户端发送一个连接请求给服务器。

b. 服务器将自己的证书,以及同证书相关的信息发送给客户端。

c. 客户端检查服务器送过来的证书是否和App内置证书相同。如果是,就继续执行协议;如果不是则终止此次请求。

d. 接着客户端比较证书里的消息,例如域名和公钥,与服务器刚刚发送的相关消息是否一致,如果是一致的,客户端认可这个服务器的合法身份。

e. 服务器要求客户发送客户自己的证书。收到后,服务器验证客户端的证书,如果没有通过验证,拒绝连接;如果通过验证,服务器获得用户的公钥。

f. 客户端告诉服务器自己所能够支持的通讯对称密码方案。

g. 服务器从客户发送过来的密码方案中,选择一种加密程度最高的密码方案,用客户的公钥加过密后通知客户端。

h. 客户端针对这个密码方案,选择一个通话密钥,接着用服务器的公钥加过密后发送给服务器。

i. 服务器接收到客户端送过来的消息,用自己的私钥解密,获得通话密钥。

j. 服务器通过密钥解密客户端发送的被加密数据,得到明文数据。

说了这么多我们总结下:到底服务端和客户端怎么实现安全传输的安全性呢,首先证书机构机构把数字证书颁发给服务器保存起来(里面有公钥和私钥),和客户端向服务器发请求的时候,服务器将自己的证书,以及同证书相关的信息(sever 的pubkey)发送给客户端,客户端检查服务器是不是自己家的对比下自己客户端本地的证书和这个叫server的发来的一致不,不一致终断连接,一致就把自己本地的证书(里面有客户端公钥)发给自己家的server,server收到了证书我也防着你我看下你这客户端是不是我家的,我也对比下证书和自己的服务端证书一致不,不一致断开,一致获得客户端的pubkey客户端允许连接;然后客户端给server发送自己支持的通讯对称密码方案,让server选一个客户端支持的加密方案,然后拿着客户端给的公钥加密这个server确定的加密方案(你客户端小弟要用哪个加密方法我服务端来决定)告诉客户端,客户端选择一个加密算法来通话并用server 给的pubkey 加密这个加密算法发给server,r然后server拿着自己的私钥解密这个能够解密通讯信息的钥匙,再用这个钥匙来解密加密算法加密的实际明文消息,至此一次通讯结束

https安全协议原理的更多相关文章

  1. HTTPS传输协议原理

    我们常常在使用网上银行时看到的连接都是以“https”开始的,那么这个https是什么呢?这其实是表示目前连接使用了SSL进行加密,能保证客户端到服务器端的通信都在被保护起来,那么浏览器是如果实现的呢 ...

  2. Http协议原理解析第一篇

    一:http的由来: OSI模型把网络通信分成七层:物理层.数据链路层.网络层.传输层.会话层.表示层和应用层,对于开发网络应用人员来说,一般把网络分成五层,这样比较容易理解.这五层为:物理层.数据链 ...

  3. 爬虫前篇 /https协议原理剖析

    爬虫前篇 /https协议原理剖析 目录 爬虫前篇 /https协议原理剖析 1. http协议是不安全的 2. 使用对称秘钥进行数据加密 3. 动态对称秘钥和非对称秘钥 4. CA证书的应用 5. ...

  4. HTTPS协议原理解析

    一.对称加密与非对称加密 1,定义: 对称加密:加密和解密的秘钥使用的是同一个. 非对称加密:与对称加密算法不同,非对称加密算法需要两个密钥:公开密钥(publickey)和私有密钥(privatek ...

  5. 深入理解HTTP协议、HTTP协议原理分析【转】

    转自:http://blog.csdn.net/lmh12506/article/details/7794512 版权声明:本文为博主原创文章,未经博主允许不得转载.   目录(?)[-] 基础概念篇 ...

  6. HTTPS-使用Fiddler抓取HTTPS数据包原理

    最近想尝试基于Fiddler的录制功能做一些接口的获取和处理工作,碰到的一个问题就是简单连接Fiddler只能抓取HTTP协议,关键的登录请求等HTTPS协议都没有捕捉到,所以想让Fiddler能够同 ...

  7. Fiddler抓取https设置及其原理

    iddler抓取https设置及其原理 2018-02-02 目录 1 HTTPS握手过程2 Fiddler抓取HTTPS过程3 Fiddler抓取HTTPS设置参考 数字签名是什么? 1 HTTPS ...

  8. 一篇读懂HTTPS:加密原理、安全逻辑、数字证书等

    1.引言 HTTPS(全称: Hypertext Transfer Protocol Secure,超文本传输安全协议),是以安全为目标的HTTP通道,简单讲是HTTP的安全版.本文,就来深入介绍下其 ...

  9. 一文读懂Https的安全性原理、数字证书、单项认证、双项认证等

    本文引用了作者Smily(博客:blog.csdn.net/qq_20521573)的文章内容,感谢无私分享. 1.前言 目前苹果公司已经强制iOS应用必须使用HTTPS协议开发(详见<苹果即将 ...

随机推荐

  1. 【github&&git】6、SmartGit(试用期30后),个人继续使用的方法。

    在我们做项目的过程中,我们会用到SmartGit这个软件来将本地的MAVEN项目push到国内的码云(https://git.oschina.net)或者是国外的github网站进行项目的管理,这个时 ...

  2. 使用vue-cli开发过程中如何把jQuery设置为全局

    说明:vue-cli是vue快速构建项目的命令行式开发模式. vue主要针对数据层,更多的操作在数据上,很少在DOM上,偶尔也会需要操作DOM,偶尔也会用到JQ插件,下面简单说下如何在使用vue-cl ...

  3. Spring基于注解和XML混合方式的使用

    首先要明白,基于注解和XML两种方式的实现功能是一样的,只是两种不同的配置方式. 一.IoC配置 1.配置xml 在使用注解与xml结合的方式配置IoC之前,首先要引入context标签: xmlns ...

  4. NIO学习笔记四 :SocketChannel 和 ServerSocketChannel

    Java NIO中的SocketChannel是一个连接到TCP网络套接字的通道.可以通过以下2种方式创建SocketChannel: 打开一个SocketChannel并连接到互联网上的某台服务器. ...

  5. Flask 中的 CBV 与上传文件

    from flask import Flask, views, render_template, request app = Flask(__name__) app.config['DEBUG'] = ...

  6. js 中导出excel 较长数字串会变成科学计数法

    在做项目中,碰到如题的问题.比如要将居民的信息导出到excel中,居民的身份证号码因为长度过长(大于10位),excel会自动的将过长的数字串转换成 科学计数法.现在网上找到解决方案之一: (在数字串 ...

  7. 【读书笔记】iOS-开发者证书

    虽然使用通配符听起来很赞,但问题是使用这种App ID的应用无法使用苹果的Push Notification服务以及应用内支付服务. 如果你有钱的话,建议单独买一个设备用于开发,将来你可能会安装iOS ...

  8. IDEA项目搭建八——使用MybatisPlus简化数据库交互

    一.MybatisPlus简化数据库交互 我们使用Mybatis发现需要在mapper.xml中写很多重复的简单CRUD(增删改查),使用MybatisPlus可以大大简化这部分代码,官方文档http ...

  9. 启动weblogic服务时,还需要输入用户名和密码的解决方法

    当启动weblogic服务时,还需要输入用户名和密码,相当繁琐,如下: 而在生产环境中,一般会要求不要在每次启动时都输入用户名密码, 因此可以通过一些简单的配置达到此目的,通常的做法有两种: 1.修改 ...

  10. angular升级指南

    废话少说 上链接 angular 升级指南