HTTPS

一些概念

http

概述

HTTP是一个客户端(用户)和服务端(网站)之间请求和应答的标准,通常使用TCP协议。其本身位于TCP/IP协议族的应用层。

特点

  - 客户端&服务器
- 无连接
- 无状态

密码学

  • 对称秘钥算法

加密和解密时使用相同的密钥,或是使用两个可以简单地相互推算的密钥,常见算法有:AES、DES、SM4。

  • 非对称秘钥算法

需要两个密钥,一个是公开密钥,另一个是私有密钥;公钥用于加密,私钥则用作解密。使用公钥把明文加密后所得的密文,只能用相对应的私钥才能解密并得到原本的明文。公钥可以公开,可任意向外发布;私钥不可以公开。基于公开密钥加密的特性,它还能提供数字签名的功能,使电子文件可以得到如同在纸本文件上亲笔签署的效果。常见非对称算法有:RSA、DSA、SM2。

  • 散列算法

是一种从任何一种数据中创建小的数字“指纹”的方法。散列函数把消息或数据压缩成摘要,使得数据量变小,将数据的格式固定下来。该函数将数据打乱混合,重新创建一个叫做散列值的指纹。常见算法有:MD5、SHA-256、SM3

SSL&TLS

百科给出的解释是:传输层安全性协议(Transport Layer Security)及其前身安全套接层(Secure Sockets Layer)是一种安全协议,目的是为互联网通信提供安全及数据完整性保障。网景公司在1994年推出HTTPS协议,以SSL进行加密,这是SSL的起源。IETF将SSL进行标准化后即TLS。目前SSL/TLS已成为互联网上保密通信的工业标准。

https

HTTP over SSL/TLS,HTTPS经由HTTP进行通信,但利用SSL/TLS来加密数据包。HTTPS开发的主要目的,是提供对网站服务器的身份认证,保护交换资料的隐私与完整性。

HTTPS机制

证书制作的过程

一个网站如果要使用https,第一步就是找CA机构申请证书。简要流程如下

  1. 申请人服务器server,生成一对非对称秘钥server_prikey、server_pubkey
1. 申请人把一些申请信息(使用者、有效期等)sever_info和server_pubkey递交给CA机构
1. CA机构验证申请人身份后,对server_info+server_pubkey+ca_info(ca机构添加的一些信息)进行散列运算,得到server_hash
1. CA机构使用自己的私钥ca_prikey 对server_hash进行签名,得到sign_server_hash
1. CA机构根据sign_server_hash+server_pubkey+server_info+ca_info构建成证书server_cert,并下发给申请人
1. 申请人配置证书到服务器server,一般情况下会开启443端口对外提供https的能力。

一些特殊的行业,处于多方面的顾虑,可能会搭建自己的CA服务,例如:各大银行、12306、硬件设备制造商等。目前国际上比较知名CA机构的根证书(CA的公钥)是预装在操作系统或浏览器的,如下图。

 

  现实中,网站的证书验证多数是通过证书链的机制实现的,操作系统预装的证书也都是证书链最上层的根证书,而我们申请到的证书,也多是二级证书机构颁发的。

http三次握手

以访问百度为例,查看三次握手的抓包数据,其中110.242.68.3是百度服务器地址,10.100.172.90是我本机的局域网地址(客户端)。

1、客户端发送syn:



2、服务器响应syn+ack



3、客户端发送ack



流程如下(网络取图):

TLS的多次握手

仍旧以访问百度为例,查看https访问时,TLS的多次握手

2.1、客户端发送 client hello

        - Content Type: Handshake (22)
- 0x16表示内容类型为握手协议
- Version: TLS 1.0 (0x0301)
- 使用TLS1.0
- Random: 777cd47f33acca3e39c74b2aac641fc1b5bc7c64ff5436d944281495d38899a7
- 随机数,4字节时间戳+28字节随机数,可以防重放
- Session ID: d14d21a0d37f4987c087d2fca80c2beca15dd93d3c90c69fe30b1fb4870fa84f
- sessionId,0-32字节随机数
- Cipher Suites (18 suites)
- 客户端支持的密码套件算法列表(优先级顺序)
- Extension
- 扩展信息

2.2、服务器响应 server hello

        - Cipher Suite: TLS_ECDHE_RSA_WITH_AES_128_GCM_SHA256 (0xc02f)
- 服务器根据客户端秘钥算法列表协商的秘钥
- TLS 通讯协议类型
- ECDHE 交换秘钥算法
- RSA 身份验证算法,一般为证书使用的算法
- AES 通信时的加密算法
- HSA256 哈希算法,计算签名使用

** 2.3服务器下发公钥证书**

        

        - Certificates (3749 bytes)
- 下发给客户端的证书,一般情况下如上图有两个证书,一个是根认证机构颁发给二级机构的证书,一个是二级认证机构颁发给百度的证书

2.4服务器下发交换秘钥参数、协商秘钥的公钥(非必须,使用ECDHE交换秘钥算法时需下发参数)

        - Named Curve: secp256r1 (0x0017)
- 指定非对称秘钥算法的椭圆曲线
- Pubkey:
- 公钥
- Signature Algorithm: rsa_pkcs1_sha256 (0x0401)
- 签名算法
- Signature:
- 签名

2.5服务端响应结束,因为有一些不确定响应,需要最后回复一次客户端响应完毕。



在服务器响应结束前还有可能还有一次Certificate Request请求,用于请求客户端公钥证书,适用用高安全性场景下的双向认证。

3、客户端请求,这一部分协议差异比较大,在TLS1.3中规定该步骤为最后一步,无需TLS1.2后续确认响应,但是百度使用的TLS1.2,也没有后续的确认操作了。

        - EC Diffie-Hellman Client Params
- 协商秘钥客户端参数
- Change Cipher Spec Message
- 告知后续使用密文传输
- Handshake Protocol: Encrypted Handshake Message
- 密文,如果服务器能顺利解密则协商成功

4.1、服务器创建session ticket

        - Session Ticket:
- 服务的生成的session ticket,session ticket包含sessionId和协商的加密参数以便连接重用。

4.2 服务端告知密文传输



**

        - Change Cipher Spec Message
- 告知客户端以后使用加密通讯

4.3 服务器发送密文数据

        - Handshake Protocol: Encrypted Handshake Message
- 使用协商秘钥加密后的密文数据

至此,tls整个协商过程结束

https总结

  1. http syn握手建立tcp连接

  2. 客户端开始tls握手

  3. 服务端开始tls握手,并下发证书供客户端认证服务器身份

  4. 客户端和服务端通过秘钥交换算法交换秘钥

  5. 通过协商秘钥安全协商出对称秘钥key

  6. 后续双方使用key加密传输的数据

  7. 服务端创建session ticket,用于保持和恢复连接

    最后附上完整交互图,摘自网络,大致相同,待后续补充

HTTPS原理解析的更多相关文章

  1. Tengine HTTPS原理解析、实践与调试【转】

    本文邀请阿里云CDN HTTPS技术专家金九,分享Tengine的一些HTTPS实践经验.内容主要有四个方面:HTTPS趋势.HTTPS基础.HTTPS实践.HTTPS调试. 一.HTTPS趋势 这一 ...

  2. HTTPS原理解析-转

    这篇文章关于Https的讲解真的是太透彻了,转过来备忘. 来源:腾讯bugly 另附两个SSL/TLS的交互详解:一.二 基于此文章的学习总结:下一篇文章 1.HTTPS 基础 HTTPS(Secur ...

  3. HTTPS 原理解析

    一 前言 在说HTTPS之前先说说什么是HTTP,HTTP就是我们平时浏览网页时候使用的一种协议.HTTP协议传输的数据都是未加密的,也就是明文的,因此使用HTTP协议传输隐私信息非常不安全.为了保证 ...

  4. HTTPS 原理解析(转)

    一 前言 在说HTTPS之前先说说什么是HTTP,HTTP就是我们平时浏览网页时候使用的一种协议.HTTP协议传输的数据都是未加密的,也就是明文的,因此使用HTTP协议传输隐私信息非常不安全.为了保证 ...

  5. 【大量干货】史上最完整的Tengine HTTPS原理解析、实践与调试

    本文邀请阿里云CDN HTTPS技术专家金九,分享Tengine的一些HTTPS实践经验.内容主要有四个方面:HTTPS趋势.HTTPS基础.HTTPS实践.HTTPS调试. 一.HTTPS趋势 这一 ...

  6. NetWork--HTTPS 原理解析<转>

    转载链接:https://www.cnblogs.com/zery/p/5164795.html HTTPS 原理解析   一 前言 在说HTTPS之前先说说什么是HTTP,HTTP就是我们平时浏览网 ...

  7. 【算法】(查找你附近的人) GeoHash核心原理解析及代码实现

    本文地址 原文地址 分享提纲: 0. 引子 1. 感性认识GeoHash 2. GeoHash算法的步骤 3. GeoHash Base32编码长度与精度 4. GeoHash算法 5. 使用注意点( ...

  8. JavaScript 模板引擎实现原理解析

    1.入门实例 首先我们来看一个简单模板: <script type="template" id="template"> <h2> < ...

  9. 开源磁力搜索爬虫dhtspider原理解析

    开源地址:https://github.com/callmelanmao/dhtspider. 开源的dht爬虫已经有很多了,有php版本的,python版本的和nodejs版本.经过一些测试,发现还 ...

随机推荐

  1. 非Windows系统 如何解压带中文密码和中文文件名的zip压缩文件

    数据科学交流群,群号:189158789 ,欢迎各位对数据科学感兴趣的小伙伴的加入! 一.安装unar软件包: Linux(Debian系列): apt install unarLinux(RedHa ...

  2. Java——介绍

    Java基础语法: 一个Java程序可以认为是一系列对象的集合,而这些对象通过彼此的方法来协同工作. 对象: 对象是类的一个实例,有状态和行为.例如,一条狗是一个对象,它的状态有:颜色.名字.品种:行 ...

  3. Maven 私服(Nexus)

    @[toc](Maven 私服(Nexus)) 1.Nexus 简介 Nexus是Maven仓库管理器,也可以叫Maven的私服.Nexus是一个强大的Maven仓库管理器,它极大地简化了自己内部仓库 ...

  4. Spark练习之创建RDD(集合、本地文件),RDD持久化及RDD持久化策略

    Spark练习之创建RDD(集合.本地文件) 一.创建RDD 二.并行化集合创建RDD 2.1 Java并行创建RDD--计算1-10的累加和 2.2 Scala并行创建RDD--计算1-10的累加和 ...

  5. Consonant Fencity Gym - 101612C 暴力二进制枚举 Intelligence in Perpendicularia Gym - 101612I 思维

    题意1: 给你一个由小写字母构成的字符串s,你可以其中某些字符变成大写字母.如果s中有字母a,你如果想把a变成大写,那s字符串中的每一个a都要变成A 最后你需要要出来所有的字符对,s[i]和s[i-1 ...

  6. HihoCoder-1870 Jin Yong’s Wukong Ranking List(并查集)

    我发现大佬好像都是用拓扑排序写的(本菜鸡不会拓扑哭唧唧 说一下并查集的做法吧... 就是找两人右边的(辣鸡的那个人)那个是否比左边厉害,厉害的话就矛盾. 如果他俩没比较过就把厉害的并到辣鸡的. (辣鸡 ...

  7. poj3757 Training little cats

    Time Limit: 2000MS   Memory Limit: 65536K Total Submissions: 11496   Accepted: 2815 Description Face ...

  8. redis如何实现高可用【主从复制、哨兵机制】

    实现redis高可用机制的一些方法: 保证redis高可用机制需要redis主从复制.redis持久化机制.哨兵机制.keepalived等的支持. 主从复制的作用:数据备份.读写分离.分布式集群.实 ...

  9. 80x86/Pentium微机原理及接口技术-微处理器-学习笔记

    80x86/  Pentium微机原理及接口技术 1.    计算机基础... 1 1.1常用术语... 1 1.2计算机中数与编码的表示方法... 1 1.2.1进制表示及进制转换... 1 1.2 ...

  10. Jenkins 持续集成测试工具

    一.Jenkins(hudson)流程 创建job 执行job 通知机制 二.两种执行策略 定时执行:每隔一段时间执行一下(适合UI和接口测试的执行) 监控代码库执行:单元测试的执行模式(适合单元测试 ...