HTTP(HyperText Transfer Protocol,超文本传输协议)被用于在Web浏览器和网站服务器之间传递信息,在TCP/IP中处于应用层。这里提一下TCP/IP的分层共分为四层:应用层、传输层、网络层、数据链路层; 分层的目的是:分层能够解耦,动态替换层内协议

各个层包含的内容:

应用层:向用户提供应用服务时的通讯活动(ftp,dns,http)

传输层:网络连接中两台计算机的数据传输(tcp、udp)

网络层:处理网络上流动的数据包,通过怎样的传输路径把数据包传送给对方(ip)

数据链路层:与硬件相关的网卡、设备驱动等等

然而HTTP也有以下明显缺点:

  1. 通信使用明文,内容可能被窃听
  2. 不验证通信方的身份,因此有可能遭遇伪装
  3. 无法证明报文的完整性,所以有可能遭到篡改

这样,HTTPS就登场了。HTTPS中的S表示SSL或者TLS,就是在原HTTP的基础上加上一层用于数据加密、解密、身份认证的安全层,即

  • HTTP + 加密 + 认证 + 完整性保护 = HTTPS

加密相关的预备知识:对称加密和非对称加密。

  1. 对称加密 : 加密和解密数据使用同一个密钥。这种加密方式的特点是速度很快,常见对称加密的算法有 AES;
  2. 非对称加密: 加密和解密使用不同的密钥,这两个密钥形成有且仅有唯一的配对,叫公钥和私钥。数据用公钥加密后必须用私钥解密,数据用私钥加密后必须用公钥解密。一般来说私钥自己保留好,把公钥公开给别人(一般公钥不会单独出现,而是会写进证书中),让别人拿自己的公钥加密数据后发给自己,这样只有自己才能解密。 这种加密方式的特点是速度慢,CPU 开销大,常见非对称加密算法有 RSA。

CA证书的相关知识: CA证书是由CA(Certification Authority)机构发布的数字证书。其内容包含:电子签证机关的信息、公钥用户信息、公钥签名和有效期。这里的公钥服务端的公钥,这里的签名是指:用hash散列函数计算公开的明文信息的信息摘要,然后采用CA的私钥对信息摘要进行加密,加密完的密文就是签名。 即:证书 = 公钥 + 签名 +申请者和颁发者的信息。 客户端中因为在操作系统中就预置了CA的公钥,所以支持解密签名(因为签名使用CA的私钥加密的)

有了这些预备知识后,就可以来看看HTTPS是如何怎么做到安全认证的

HTTPS单向认证

从上图可以看出,服务端拥有一对非对称密钥:B_公钥和B_私钥。详细过程如下: (1)客户端发起HTTPS请求,将SSL协议版本的信息发送给服务端。

(2)服务端去CA机构申请来一份CA证书,在前面提过,证书里面有服务端公钥和签名。将CA证书发送给客户端

(3)客户端读取CA证书的明文信息,采用相同的hash散列函数计算得到信息摘要(hash目的:验证防止内容被修改),然后用操作系统带的CA的公钥去解密签名(因为签名是用CA的私钥加密的),对比证书中的信息摘要。如果一致,则证明证书是可信的,然后取出了服务端公钥

(4)客户端生成一个随机数(密钥F),用刚才等到的服务端B_公钥去加密这个随机数形成密文,发送给服务端。

(5)服务端用自己的B_私钥去解密这个密文,得到了密钥F

(6)服务端和客户端在后续通讯过程中就使用这个密钥F进行通信了。和之前的非对称加密不同,这里开始就是一种对称加密的方式

HTTPS 双向认证

双向认证和单向认证原理基本差不多,单向认证客户端需要认证服务端,而在双向认证中增加了服务端对客户端的认证

双向认证详细过程如下:

(1)客户端发起HTTPS请求,将SSL协议版本的信息发送给服务端。

(2)服务端去CA机构申请来一份CA证书,在前面提过,证书里面有服务端公钥和签名。将CA证书发送给客户端

(3)客户端读取CA证书的明文信息,采用相同的hash散列函数计算得到信息摘要(hash目的:验证防止内容被修改),然后用操作系统带的CA的公钥去解密签名(因为签名是用CA的私钥加密的),对比证书中的信息摘要。如果一致,则证明证书是可信的,然后取出了服务端公钥

(4)客户端发送自己的客户端证书给服务端,证书里面有客户端的公钥:C_公钥

(5)客户端发送支持的对称加密方案给服务端,供其选择

(6)服务端选择完加密方案后,用刚才得到的C_公钥去加密选好的加密方案

(7)客户端用自己的C_私钥去解密选好的加密方案,客户端生成一个随机数(密钥F),用刚才等到的服务端B_公钥去加密这个随机数形成密文,发送给服务端。

(8)服务端和客户端在后续通讯过程中就使用这个密钥F进行通信了。和之前的非对称加密不同,这里开始就是一种对称加密的方式

HTTPS基本思路总结

HTTPS在保证数据安全传输上使用对称加密和非对称加密相结合的方式来进行的,简单来说就是通过一次非对称加密算法进行了最终通信密钥的生成、确认和交换,然后在后续的通信过程中使用最终通信密钥进行对称加密通信。之所以不是全程非对称加密,是因为非对称加密的计算量大,影响通信效率。

HTTPS单向认证,双向认证相关推荐

  1. 数据和安全②HTTPS单向和双向认证

    前言 示例 使用SpringBoot模拟服务端和客户端,使用okhttp作为httpClient工具. 如果对https相关理论不太熟悉和理解的可以看上一篇数据和安全①加解密理论概述 Okhttp h ...

  2. HTTPS原理、单向和双向认证

    参考文章:https://blog.51cto.com/11883699/2160032 https://www.songma.com/news/txtlist_i39807v.html 众所周知,W ...

  3. 数字证书原理详细介绍 单向认证 双向认证

    证书:就是为了证明自己身份的东西,所以证书要提供给需要校验我们身份的人:一般情况下,客户端需要校验服务端有没有被人伪造,所以客户端需要安装对应的服务端的证书:证书的实质内容就是一把公钥 这里面主要有三 ...

  4. 锐捷路由器CHAP 单向认证 双向认证

    单向认证 R1为认证客户端 进入Router1 进入Serial 2/0接口 interface Serial 2/0 封装PPP协议 encapsulation ppp 启用CHAP认证 ppp a ...

  5. HTTPS单向认证双向认证

    单向认证:保证server是真的,通道是安全的(对称密钥): 双向认证:保证client和server是真的,通道是安全的(对称密钥): 单向认证: 1.clinet<--server 2.cl ...

  6. 基于mosquitto的MQTT服务器---SSL/TLS 单向认证+双向认证

    配置单/双向认证 1.生成证书 使用如下shell 来生成证书: # * Redistributions in binary form must reproduce the above copyrig ...

  7. ios https 单项认证 双向认证 以及服务端配置

    单项认证:客户端APP包里保存一份证书 用于校验服务端证书是否合法 双向认证:单项认证以外,   客户端(不是app,这里指系统)要拥有一份证书 用于传给服务端用于校验客户端证书是否合法 分两方面讲解 ...

  8. SSL单向、双向认证

    引用:http://cbwdkpl.blog.163.com/blog/static/453293822009814111320789/ 单向认证:客户端向服务器发送消息,服务器接到消息后,用服务器端 ...

  9. Https单向认证和双向认证介绍

    一.Http HyperText Transfer Protocol,超文本传输协议,是互联网上使用最广泛的一种协议,所有WWW文件必须遵循的标准.HTTP协议传输的数据都是未加密的,也就是明文的,因 ...

  10. 干货 | 图解 https 单向认证和双向认证!

    一.Http HyperText Transfer Protocol,超文本传输协议,是互联网上使用最广泛的一种协议,所有WWW文件必须遵循的标准.HTTP协议传输的数据都是未加密的,也就是明文的,因 ...

最新文章

  1. python学习手册翻译很差吗-为什么要翻译?值得坚持下去么?
  2. 【Android工具】安卓手机轻松获取硬件数据和状态信息
  3. 蚂蚁金服的 Service Mesh 演进之道?
  4. C++ string::size_type
  5. Ubuntu系统显卡驱动、CUDA、CUDNN安装(二CUDA和CUDNN)
  6. java 8 kafka 0.82,运行kafka-console-producer.sh的异常(0.8.1.1)
  7. 详解:物理地址,虚拟地址,内存管理,逻辑地址之间的关系
  8. wav文件降噪c语言,语音降噪
  9. RS422--ARINC429通讯转换模块 RS422支持全双工通讯接口,通讯速率可设置,ARINC429支持发送和接收
  10. 计算机通讯端口怎么增加,plc通讯接口如何添加删除方法
  11. Shiro完整教程, 附带各种配置
  12. 联想服务器安装GHO系统,联想win7旗舰版32位gho安装教程
  13. 两人互殴打架派出所如何处理
  14. 百度富文本编辑jsp上传_类百度富文本编辑器文件上传。
  15. python字典与集合
  16. 正点原子IIC例程讲解笔记(三)——24cxx.c中函数理解
  17. k8s 偏向运维技术 ,后端程序员为什么要学习k8s?
  18. 《我的世界》JAVA版本需使用微软账号登录
  19. 2020-10-20 任务三(一) RTOS系统初识
  20. matlab集群版,分布式Matlab计算集群建立方法与Demo

热门文章

  1. JSP与Servlet实现用户注册
  2. 平安科技前端开发面试总结
  3. C1000K安装、并发测试
  4. 一文读懂准确率、精准率、召回率、ROC、AUC、F1值
  5. Python 安装scip
  6. 计算并输出球的体积和表面积,球的半径r的值由用户从键盘输入。
  7. Python爬虫系列之双色球开奖信息爬取
  8. 4位网关高手论道:什么才是好的微服务网关?
  9. 用processing制作套圈大小的效果
  10. Java中常见的名词解释