1. 前言

最近研究HTTPS(超文本传输安全协议),是在HTTP协议的基础上增加了一层SSL协议。SSL协议用来在客户端和服务器之间创建一个安全可靠的通信环境,那么我们要深入了解HTTP协议是如何做到安全可靠的通信,我们就要了解一下简单的密码学原理。下面我们就开始从密码学讲起,然后深入到HTTPS相比HTTP协议之上如何去建立一个可靠安全的通信。

2. 加密方式

密码学是一门涉及数学、电子信息、计算机等多学科的一门重要学科,是现代网络安全的基石。其中加密方式可以分为两类,一类是可逆的加密方式,一类是不可逆的加密方式

2.1 不可逆的加密方式

信息摘要(Message Digest)和安全散列(Secure Hash)算法属于此类,常见的算法包括 MD5、SHA1、PBKDF2、bcrypt 等。此类算法可将任意大小的原始数据变换成规定长度的输出,即获取内容的数字指纹,常用于校验原始内容是否被篡改。

2.2 可逆的加密方式

可逆的加密方式又可以分为以下三种:

  • 基于算法的加密算法,也被称为古典加密算法,如 HTTP 认证中的 base64,比特币生成地址用的 base58(公开的算法也可称作编码方式)。这类算法主要对原始内容进行置换和替换得到密文。
  • 对称加密算法,加密和解密使用同一个密钥。对称加密算法的出现标志密码学进入现代密码学阶段,密文的安全性从依赖于算法转向依赖于密钥。常见的对称加密算法有 DES、3DES、AES;
  • 非对称加密算法,加密和解密使用不同的密钥。非对称加密算法开创了密码学的里程碑,解决了对称加密过程中密钥分发的安全问题,被认为现代密码学最伟大的发明。常见的算法有 RSA、DH(Diffie-Hellman)、椭圆曲线算法(Elliptic curve cryptography,ECC)。

对称加密算法

这里我们重点来介绍对称加密和非对称加密。对称加密就是指加密和解密都是使用的同一个密钥。

也就是说在加密的同时,也会把密钥发送给对方。在发送密钥过程中可能会造成密钥被窃取,那么如何解决这一问题呢?

非对称加密算法

公开密钥使用一对非对称密钥。一把叫私有密钥,另一把叫公开密钥私有密钥不让任何人知道,公有密钥随意发送。也就是说,发送密文方使用对方的公开密钥进行加密,对方接受到信息后,使用私有密钥进行解密。非对称加密算法还可以用来做数字签名。

对于公钥和私钥的理解,我们可以查看如下博客 公钥、密钥、数字签名

公钥就是指的是密钥是公开的,每个人都可以持有一把公钥。私钥就是指的是密钥是私有的,只能被私钥拥有者使用。

  • 当网络中的其他人要发送消息给私钥拥有者的时候,其他人可以用公钥对消息进行加密,私钥拥有者获取到加密后的消息,然后使用私钥进行解密。
  • 当私钥拥有者要发送消息给网络中其他人的时候,私钥拥有者可以通过对消息进行Hash函数,生成相应的摘要。然后通过使用私钥对要发送的摘要进行加密,生成数字签名,然后将数字签名和加密后的消息发送给网络其他人。网络其他人收到加密后的消息,通过对数字签名使用公钥进行解密生成摘要,然后对消息通过Hash函数,生成相应的摘要。通过对比解密后的摘要和Hash函数生成的摘要,判断消息是否在网络中被篡改。但是这种通信还会存在一定的问题,万一网络其他人的公钥被攻击者篡改成自己的公钥,那么这种网络通信就不安全的。下面讲解如何通过CA认证中心对公钥进行认证,生成数字证书。
  • 私钥拥有者通过去找“证书中心”,为公钥进行认证。证书中心用自己的私钥,对私钥拥有者的公钥和一些相关信息做认证一起加密,生成“数字证书”。然后私钥拥有者将数字证书以及数字签名和消息发送给网络其他人,网络其他人通过使用认证中心提供的公钥对“数字证书”进行解密,得到安全可靠的公钥,然后使用公钥对“数字签名”进行解密,得到相应的摘要。通过对比解密后的摘要和Hash函数生成的摘要,判断消息是否在网络中被篡改。

3. HTTPS(超文本传输控制协议)

解决的问题:在HTTP协议中有可能存在信息窃听或身份伪装等问题,而使用HTTPS通信机制可以有效地防止这些问题。

HTTP协议存在的问题:

  1. 通信使用明文不对数据进行加密(内容容易被窃听)
  2. 不验证通信方身份(容易伪装)
  3. 无法确定报文完整性(内容易被篡改)

3.1 HTTPS简介

什么是HTTPS:与SSL(安全套接层)组合使用的HTTP被称为HTTPS(HTTP Secure,超文本传输安全协议)

加密处理防止窃听:通信加密。HTTP协议与SSL组合使用,加密HTTP的通信内容。用SSL建立安全通信线路之后,就可以在这条线路通信了。

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

在使用http协议时,HTTP直接与TCP通信,当使用SSL时,则需要先与SSL通信,然后再由SSL和TCP通信。

3.2 HTTPS采用混合加密机制

HTTPS采用共享密钥加密和公开密钥加密两者混合加密,两者都有各自的优点。共享密钥加密处理速度快,但密钥无法安全发送给对方;公开密钥加密处理速度慢,但密钥能够安全交换。

但如果我们将两种加密方式一起使用,则两种加密方式就能互补。也就是说,利用公开密钥加密方式安全地交换在共享密钥加密中要使用的密钥,在确保密钥安全前提下,使用共享密钥加密方式进行通信

下面我们来详细讨论一下HTTPS如何通过SSL协议获得安全可靠的共享密钥:

  1. 第一次握手:客户端请求建立SSL连接,发送支持的加密方式以及一个随机数client random给服务器
  2. 第二次握手:服务器选择其中一种加密方式,并且再加上一个生成的随机数Server random,和数字证书(其中包括公钥)给客户端。
  3. 第三次握手:客户端通过介绍到服务器端发送过来的数字证书,并且确定这个数字证书是有效的,并且再发送一个随机数3,将这个随机数通过使用数字证书中得到的公钥进行加密发送给服务器。
  4. 第四次握手:服务器收到客户端的回复,利用自己的私钥进行解密,获得这个随机数,然后通过前面三个随机数以及协商他们的加密方式,客户端和服务器都计算生成一个对称密钥。这样服务器和客户端就通过非对称加密方式获得了各自安全可看到的共享密钥。

计算机网络:浅谈HTTPS和加密相关推荐

  1. 浅谈HTTPS以及Fiddler抓取HTTPS协议

    原文 浅谈HTTPS以及Fiddler抓取HTTPS协议 最近想尝试基于Fiddler的录制功能做一些接口的获取和处理工作,碰到的一个问题就是简单连接Fiddler只能抓取HTTP协议,关键的登录请求 ...

  2. 浅谈HTTPS通信机制和Charles抓包原理-by:nixs

    转载请注明出处:https://blog.csdn.net/zwjemperor/article/details/80719427 主页:https://blog.csdn.net/zwjempero ...

  3. JackHttp -- 浅谈编码、加密(对称加密,非对称加密,Hash算法)

    如果你还不清楚 JackHttp 是什么,请戳这里!!! JackHttp 是一个网络框架系列,为什么还要分享编码和加密呢?主要有如下几个原因: HTTP 在网络传输过程中是明文的. HTTP 在网络 ...

  4. 计算机网络浅谈,浅谈计算机网络的重要性

    浅谈计算机网络的重要性 摘要:当现代社会逐渐变为具有高度的相互依赖的巨大网络时,我们所生活的世界无法不变成一个被计算机网络紧密联结起来的世界.计算机网络从技术角度来说,是作为一种布局,将经有关联但相距 ...

  5. 浅谈计算机网络,浅谈计算机网络的发展

    浅谈计算机网络的发展 摘要:计算机网络一直在不断地更新,也在快速的发展.计算机网络技术的不断提升,也使得其他的各行各业在计算机方面的应用也越来越受到重视,计算机网络的应用也充斥到了日常生活和工作中.除 ...

  6. 【计算机网络】聊一聊https的加密方式

    一.写在前面 老是听见我的朋友讨论https的加密方式,讨论不一,最后查询资料后,给出我自己的理解 当然了,这需要一定的网络安全方面的知识,如果你还不了解这些基础知识,建议看一下这两篇文章手

  7. 浅谈HTTPS协议的加密过程

    https包括对称加密和非对称加密两个阶段,在客户端和服务端建立连接的时候使用非对称加密,连接建立以后使用的是对称加密. 注:SSL是传输层协议 加密过程: 1,客户端使用https的URL访问Web ...

  8. 浅谈https\ssl\数字证书

    在互联网安全通信方式上,目前用的最多的就是https配合ssl和数字证书来保证传输和认证安全了.本文追本溯源围绕这个模式谈一谈. 名词解释 首先解释一下上面的几个名词: https:在http(超文本 ...

  9. 浅谈 HTTPS 和 SSL/TLS 协议的背景与基础

    来自:编程随想   >> 相关背景知识 要说清楚 HTTPS 协议的实现原理,至少需要如下几个背景知识. 大致了解几个基本术语(HTTPS.SSL.TLS)的含义 大致了解 HTTP 和 ...

最新文章

  1. Gartner:解开关于人工智能的六个迷思
  2. python在会计工作中的应用-浅谈各行各业到底该如何应用python?
  3. Linux之文件通信
  4. 来聊一聊window.fetch
  5. 红橙Darren视频笔记 利用阿里巴巴AndFix进行热修复
  6. easyui关闭dialog后刷新父页面_两种方法WordPress批量打开、关闭文章评论功能
  7. Oracle function注释
  8. java用不起_Java,泛型不起作用
  9. 小米浏览器导出html,小米浏览器离线视频如何导出 小米浏览器离线视频导出教程...
  10. 【58同城和赶集网简历下载获取】
  11. 前端英文和数字不换行怎么解决
  12. 前端Svelte框架初体验
  13. 电力行业工程设计资质怎么办?专业类别有哪些?
  14. 计算机保研面试之专业课如何复习?
  15. 【干货】如何将易企秀场景的图片复制另存为本地并且不失真?
  16. c语言cast的用法,static_cast 用法
  17. Mysql-mmm高可用集群(有mysql环境)
  18. Python爬虫百度云加速验证码问题
  19. fork,wait等基本系统调用
  20. javascript解析印象笔记导出enex文件(javascript解析xml,javascript监听手机端手指滑动事件)

热门文章

  1. mysql 四 表操作
  2. LeetCode Keyboard Row
  3. .NET Core 最小化发布
  4. sublime部署开发环境
  5. 周五:IPC连接及远程执行
  6. 028_Alert警告
  7. 004_推箱子-游戏逻辑
  8. 039_Unicode对照表五
  9. oss 视频 转码_播放oss问题的搜索结果-阿里云开发者社区
  10. 自定义控件:等比例显示控件RatioLayout