从DNS到HTTPS

一、HTTPS定义

超文本传输安全协议(HyperText Transfer Protocol Secure,缩写:HTTPS)是一种通过计算机网络进行安全通信的传输协议。
HTTPS经由HTTP进行通信,利用SSL/TLS来加密数据包。其主要目的,是提供对网站服务器的身份认证,保护交换资料的隐私与完整性。

二、HTTPS流程

一般而言HTTPS需要基于DNS域名系统(Domain Name System),它作为将域名和IP地址相互映射的一个分布式数据库,能够使人更方便地访问互联网。DNS使用UDP端口53;
当前,对于每一级域名长度的限制是63个字符,域名总长度则不能超过253个字符。

域名解析过程

操作系统会首先检查自己本地的hosts文件是否有该网址映射关系,如果有就直接调用ip地址映射完成解析;
查找本地dns解析器缓存是否有该网址映射关系,如果有就直接返回完成域名解析;
查询tcp/ip参数中设置的首选dns服务器,此服务器收到查询时,如果要查询的域名包含在本地配置区域资源中,则返回解析结果给客户机,完成域名解析;
如果该服务器缓存了此网址映射关系,则调用这个ip地址映射,完成域名解析;
根据本地dns服务器的设置进行查询,当未使用转发模式,本地dns就把请求发至13台根dns服务器,根dns服务器收到请求后会判断这个域名是谁来授权管理,并返回一个负责该顶级域名服务器的一个ip。当本地dns服务器收到这个地址后,就会找到该域名服务器,重复上面的动作进行查询直到找到该域名主机;
如果使用转发模式,此dns服务器就会把请求转发至上一级dns服务器,由上一级服务器进行解析,如此循环。

HTTP组成

协议组成:
起始行(start line),描述请求或响应的基本信息(方法&空格&url&空格&版本号&回车换行);
头部字段(header),使用key-value形式更详细的说明报文;
消息正文(entity),实际传输的数据;
起始行和头部字段合并成为请求头或响应头,即Header;
消息正文即body,Header与body之间有一个空行(CRLF);
请求方法:
GET获取资源,请求访问已被uri识别的资源;
POST传输实体;
PUT传输文件;
HEAD获得响应首部,与GET相同,只是不返回报文主体;
DELETE删除文件;
OPTIONS询问支持的方法,用来查询针对uri指定资源支持的方法;TRACE追踪路径,服务端将之前的请求通信环返还给客户端;CONNECT要求使用隧道协议连接代理,实现用隧道协议进行TCP通信。

TCP/UDP

TCP(Transmission Control Protocol)是一种面向连接的、可靠的、基于字节流的传输层(Transport layer)通信协议,当客户端和服务端彼此传输数据前,必须先在双方之间建立连接,之后才能传输数据;
TCP协议使用超时重传、数据确认等方式来确保数据包被正确的发送;
UDP(User Datagram Protocol)是一种无连接、不可靠、基于数据包的用户数据协议;
UDP传输数据包前不需要在客户端和服务端之间建立连接,只是把包发出去;
容易丢包,效率高;
TCP连接流程:
客户端发送syn包(syn=x)到服务端,并进入SYN_SENT状态,等待服务端确认;
服务端收到syn包,必须确认客户的SYN(ack=x+1),同时自己也发送一个SYN包(syn=y),即SYN+ACK包,此时服务器进入SYN_RECV状态;
客户端收到服务端的SYN+ACK包,向服务端发送确认包ACK(ack=y+1),客户端和服务端进入ESTABLISHED(TCP连接成功)状态;
TCP断开流程:
客户端向服务端发送的报文中FIN设置为1,请求与服务端断开连接;
服务端收到FIN报文,返回确认应答包(ACK);
服务端发送FIN报文段,请求关闭连接;
客户端想服务端发送ACK报文段,服务端收到后直接断开连接,客户端等待2ms后断开;
一般而言使用UDP时通过广播找到目标地址,然后点对点进行数据传输。

HTTPS加密流程

客户端发起一个HTTPS请求,请求服务器公钥,连接443端口,还包含此时客户端生成的随机数(Client Random);
服务端收到请求后生成一对公私钥和一个随机数(Server Random),把公钥以数字证书的形式加上刚才生成的随机数(Server Random)返回给客户端;证书中有一个公钥(CA)来加密信息,私钥(CA)由服务端持有;
客户端收到数字证书后,先验证证书的合法性;
验证通过后,客户端生成一个随机值(pre-master),并用服务器生成的公钥加密,发给服务端;
服务端收到随机值(pre-master)后,使用私钥进行解密,通过(Client Random、Server Random、pre-master)随机数合成会话密钥(对称加密);
双方使用该密钥对传输信息加密;
客户端和服务端相互发送摘要信息(Encrypted Handshake Message(Finishd)),使用会话密钥加密验证是否被篡改过。

三、如何避免中间人攻击(劫持)

证书锁死,证书过期强制更新;
开启校验域名、证书有效性、证书关键信息及证书链。

四、HTTP与HTTPS的区别

HTTP默认使用80端口,HTTPS默认使用443端口;
安全性;
HTTPS需要多次握手,导致加载时间是HTTP的2-100倍;
HTTPS连接缓存不如HTTP高效,会增加数据开销和功耗;
SSL涉及安全算法会消耗CPU资源。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/581539.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

Android原生实现分段选择

六年前写的一个控件,一直没有时间总结,趁年底不怎么忙,整理一下之前写过的组件。供大家一起参考学习。废话不多说,先上图。 一、效果图 实现思路使用的是radioGroup加radiobutton组合方式。原理就是通过修改RadioButton 的backgr…

初始JVM

目录 一、什么是JVM 二、JVM与字节码 三、Java程序运行机制 四、JVM 的主要组成部分及其作用 一、什么是JVM JVM 本质上是一个运行在计算机上的程序,他的职责是运行Java字节码文件 二、JVM与字节码 三、Java程序运行机制 首先利用IDE集成开发工具编写Java源代码…

Docker 部署RAP2

1、Github介绍 https://github.com/thx/rap2-delos 2、安装Docker环境 yum install -y yum-utils device-mapper-persistent-data lvm2 yum-config-manager --add-repo https://download.docker.com/linux/centos/docker-ce.repo yum install -y docker-ce systemctl enable…

环形链表、环形链表 II、有效的括号​​​​​​​(leetcode)

目录 一、环形链表 方法(快慢指针): 二、环形链表 II 三、有效的括号 一、环形链表 给你一个链表的头节点 head ,判断链表中是否有环。 如果链表中有某个节点,可以通过连续跟踪 next 指针再次到达,则链…

C# 图标标注小工具-查看重复文件

目录 效果 项目 代码 下载 效果 项目 代码 using System; using System.Collections.Generic; using System.Data; using System.IO; using System.Linq; using System.Security.Cryptography; using System.Windows.Forms;namespace ImageDuplicate {public partial clas…

SparkSQL 执行底层原理解析

从Spark SQL 底层架构可以看到,我们写的SQL语句,经过一个优化器(Catalyst)处理,转化为可执行的RDD,提交给集群执行。 SQL到RDD中间经过了一个Catalyst,它便是Spark SQL的核心,是针对…

基于医疗AI、自然语言处理技术的智能导诊系统源码,java语言开发,自主版权,可扩展至H5、小程序、app等多端

智能导诊系统源码,自主研发,演示应用案例 一、系统概述: 人体智能导诊系统:是基于医疗AI、自然语言处理技术,推出的在线导医分诊智能工具,在医疗中使用的引导患者自助就诊挂号。 在就诊的过程中有许多患者…

dockerfile——镜像构建工具详解及案例

Dockerfile Dockerfile是⼀个创建镜像所有命令的⽂本⽂件, 包含了⼀条条指令和说明, 每条指令构建⼀层, 通过docker build命令,根据Dockerfile的内容构建镜像,因此每⼀条指令的内容, 就是描述该层如何构建.有了Dockefile, 就可以制定⾃⼰docker镜像规则,只需要在Dockerfile上添…

QString的处理及中文乱码问题

QString 是 Qt 框架中用于表示字符串的一个类。它提供了丰富的功能来处理 Unicode 字符串,使得国际化和本地化的应用程序开发更加简单。QString 与标准 C 的 std::string 类似,但提供了更多与 Unicode 和国际化相关的功能。 常用功能 判空 代码演示 is…

计算机网络复习1

概论 文章目录 概论计算机网络的组成功能分类性能指标(搞清楚每个时延的具体定义)分层结构协议、接口和服务服务的分类ISO/OSITCP/IP两者的不同 计算机网络的组成 组成部分:硬件,软件和协议(协议:传输数据…

HPCC:高精度拥塞控制

HPCC:高精度拥塞控制 文章目录 HPCC:高精度拥塞控制摘要1 引言1.1 背景1.2 现有CC的局限性1.3 HPCC的提出 2 研究动机2.1 大型RDMA部署2.2 RDMA目标2.3 当前RDMA CC中的权衡DCQCNTIMELY 2.4 下一代高速CC 3 技术方案3.1 INT3.2 HPCC设计3.3 HPPC的参数 4…

【力扣题解】P404-左叶子之和-Java题解

👨‍💻博客主页:花无缺 欢迎 点赞👍 收藏⭐ 留言📝 加关注✅! 本文由 花无缺 原创 收录于专栏 【力扣题解】 文章目录 【力扣题解】P404-左叶子之和-Java题解🌏题目描述💡题解🌏总结…

计算机毕业设计-----ssm流浪猫狗救助管理系统

项目介绍 流浪猫狗救助管理系统。该项目分为前后台; 前台主要功能包括:会员的注册登陆,流浪猫狗知识,领养中心,团队活动,流浪宠物详情,申请领养等; 后台主要功能包括:管理员的用户…

IP多播多播多播

一、简述 1、IP地址 ABCDE类地址 类别网络号第一字节固定值范围A1字节0xxx0~127B2字节10xx128~191C3字节110x192~223D4字节1110224~239E1111 计算机网络——组播地址(多播地址、D类地址)详解 二、多播 1、参数设置 -----IP_ADD_MEMBERSHIP加入多播…

MySQL 核心模块揭秘 |《发刊词》

1. 为什么要写专栏? 我还在做业务系统研发的时候,有一段时间,系统不稳定,慢 SQL 很多。我们团队花了很长时间持续优化 SQL。 我们有一个表格,从慢查询日志里整理出了很多慢 SQL。其中一些 SQL,按照我们的…

React面试题

1. 什么是 React? React 是一个用于构建用户界面的 JavaScript 库。它由 Facebook 开发并开源,广泛应用于现代 Web 应用程序的开发中。 2. React 中的组件是什么? 组件是 React 中构建用户界面的基本单位。它们是可重用且自包含的代码块&a…

详细讲解Java使用EasyExcel函数来操作Excel表(附实战)

目录 前言1. EasyExcel类2. 原理分析3. demo4. 实战 前言 前阵时间好奇下载Excel,特意学习实战了该功能:详细讲解Java使用HSSFWorkbook函数导出Excel表(附实战) 现在发觉还有个EasyExcel也可专门用来读写Excel表 1. EasyExcel类…

flutter 使用高德地图

网址 引入高德地图组件 #地图插件amap_flutter_map: ^3.0.0# 定位插件amap_flutter_location: ^3.0.0 并执行命令 flutter pub get由于高德地图Flutter插件内不包含基础SDK包,所以需要单独引入地图基础SDK,在android文件加下的build.gradle文件中添加…

Spring Boot整合RocketMQ

pom.xml导入RocketMQ依赖 <dependency><groupId>org.apache.rocketmq</groupId><artifactId>rocketmq-spring-boot-starter</artifactId><version>2.2.2</version> </dependency>application.yml中添加配置 rocketmq:name-ser…

MySQL8 一键部署

#!/bin/bash ### 定义变量 mysql_download_urlhttps://cdn.mysql.com//Downloads/MySQL-8.0/mysql-8.0.33-linux-glibc2.12-x86_64.tar.xz mysql_package_namemysql-8.0.33-linux-glibc2.12-x86_64.tar.xz mysql_dec_namemysql-8.0.33-linux-glibc2.12-x86_64 mysql_download_…