计算机网络延申(一) HTTPS

本文涉及的产品
密钥管理服务KMS,1000个密钥,100个凭据,1个月
简介: 计算机网络延申(一) HTTPS

前言


这篇文章,我们将从 HTTP 明文传输开始,一步步讲解 HTTPS 是怎么在 HTTP 的基础上实现加密通信的


正文


1、明文传输(HTTP)


一开始的时候,HTTP 设计的初衷只是解决了通信的问题,所以数据是明文传输的

7d9e3f818e1aa494dc72f9125f83cc69_watermark,type_ZmFuZ3poZW5naGVpdGk,shadow_10,text_aHR0cHM6Ly9ibG9nLmNzZG4ubmV0L3dzbXJ6eA==,size_16,color_FFFFFF,t_70#pic_center.jpg

在这种情况下,一些不怀好意的人很容易在双方不知情的情况下,窃取数据

fa1d96efbfa6de4f2dd9177b4bcfab99_watermark,type_ZmFuZ3poZW5naGVpdGk,shadow_10,text_aHR0cHM6Ly9ibG9nLmNzZG4ubmV0L3dzbXJ6eA==,size_16,color_FFFFFF,t_70#pic_center.jpg要保证数据不被窃取,唯一的办法就是给传输的数据加密

这样即使别人窃取到数据,也不知道传输的内容,因为他获得的只是一堆看起来无意义的乱码


2、对称加密


(1)对称加密

通信双方约定一个密钥,这个密钥只有通信双方知道,用这个密钥加密的数据,只有用这个密钥才能够解密

955f3e0798d2f1f6e4ebbec848e3ae64_watermark,type_ZmFuZ3poZW5naGVpdGk,shadow_10,text_aHR0cHM6Ly9ibG9nLmNzZG4ubmV0L3dzbXJ6eA==,size_16,color_FFFFFF,t_70#pic_center.jpg

(2)对称加密的问题

对称加密有一个问题,这个问题出现在通信过程的开始,那就是通信的双方要怎么约定密钥

假如密钥是通过网络传输的,那么很可能这个密钥在一开始就被别人窃取

9e91701225c6dde5146e5d6621741732_watermark,type_ZmFuZ3poZW5naGVpdGk,shadow_10,text_aHR0cHM6Ly9ibG9nLmNzZG4ubmV0L3dzbXJ6eA==,size_16,color_FFFFFF,t_70#pic_center.jpg


3、非对称加密


(1)非对称加密

要通信的主机首先产生一对密钥(一个公钥和一个私钥),其中公钥是大家都知道,私钥是只有才自己知道

用公钥加密的数据,只有用对应的私钥才能解密,用私钥加密的数据,只有用对应的公钥才能解密

9a5ef727fdabf8fb0484be17613f4b7c_watermark,type_ZmFuZ3poZW5naGVpdGk,shadow_10,text_aHR0cHM6Ly9ibG9nLmNzZG4ubmV0L3dzbXJ6eA==,size_16,color_FFFFFF,t_70#pic_center.jpg

(2)非对称加密的问题

非对称加密也有一个问题,这个问题和对称加密的问题有点相似,就是公钥怎么安全地交到对方手上

假如也是通过网络传输,那么公钥有可能被替换(中间人攻击)

324e4c92527bfaa7a94e3d81f3da934a_watermark,type_ZmFuZ3poZW5naGVpdGk,shadow_10,text_aHR0cHM6Ly9ibG9nLmNzZG4ubmV0L3dzbXJ6eA==,size_16,color_FFFFFF,t_70#pic_center.jpg

非对称加密解决了密码被窃取的问题,因为公钥是大家都知道的,不存在被谁窃取的问题

现在的问题在于怎么证明 “你就是你”(Alice 怎么知道和自己通信的是 Bob 而不是 Hacker)


4、数字签名


我们暂且抛开上面的问题不谈,先来讨论一下数字签名技术

数字签名的出现主要是为了解决两个问题,一是验证内容是否被篡改,二是确定内容是谁生成的

它具体是怎么做到的呢?不急,我们先来看一下使用数字签名的两个过程,生成签名和验证签名

  • 生成签名
    发送方使用哈希算法对数据生成一段摘要,然后用自己的私钥对摘要加密,形成一个数字签名
    将数字签名附加在数据的后面,一起发送给接收方

b4ff8f9008bc7ff9e9f8a95ea109161a_watermark,type_ZmFuZ3poZW5naGVpdGk,shadow_10,text_aHR0cHM6Ly9ibG9nLmNzZG4ubmV0L3dzbXJ6eA==,size_16,color_FFFFFF,t_70#pic_center.jpg

  • 验证签名
    接收方收到后,重新使用哈希算法对数据生成一段摘要 1,同时使用发送方的公钥解密数字签名得到摘要 2
    对比摘要 1 和摘要 2 是否相同,如果相同就说明内容没有被修改

9cdc81a3765435a60ec868c7cc25aa46_watermark,type_ZmFuZ3poZW5naGVpdGk,shadow_10,text_aHR0cHM6Ly9ibG9nLmNzZG4ubmV0L3dzbXJ6eA==,size_16,color_FFFFFF,t_70#pic_center.jpg

怎么验证内容没有被修改,看完上面的两个过程相信大家也已经知道,那么确定内容是谁生成的又是怎么做到的呢

我们注意到一个细节,对摘要进行加密使用的是发送方的私钥,而私钥是自己才有的,这就是唯一性的证明

由于私钥只有自己知道,也就是说只有自己才能签名,而公钥是大家都知道的,所以大家都能验证签名

实际上,数字签名是常规的非对称加密的逆应用,在数字签名中,使用私钥加密,使用公钥解密


5、数字证书


好,我们重新回到之前的问题,怎么证明 “你就是你”,问题的本质其实是公钥怎么安全分发

这时候数字证书就可以派上用场,数字证书是由权威机构颁发给服务器的身份凭证,其实就相当于身份证

服务器拿着身份证就能证明 “我就是我,是独一无二的烟火”,并且通过数字证书我们还能安全的分发公钥

下面我们先来看看一个服务器是怎么申请证书的,以及客户端是怎么根据证书得到可信的公钥的


服务器申请证书

服务器向权威机构(Certificate Authority,简称 CA)申请一个证书

权威机构把服务器使用的公钥、服务器的信息、权威机构的信息等作为原始数据

权威机构用哈希算法对原始数据计算一个哈希值,然后用自己的私钥加密原始数据,得到数字签名

权威机构把数字签名附加在原始数据后,得到数字证书

权威机构返回数字证书给服务器


客户端验证证书

客户端收到服务器的数字证书

客户端得到该数字证书的颁发机构的公钥,并用公钥解密数字签名,得到原始数据的哈希值

客户端用哈希算法对数字证书的原始数据计算一个哈希值

如果两个哈希值相同,说明数字证书没有被修改,这样就可以得到服务器的公钥


针对上面的两个过程,我们来回答几个问题


1、为什么数字证书不能伪造?


因为数字证书包含权威机构的数字签名,数字签名的特点就是只有自己才能签名,但大家都能验证签名


2、为什么权威机构是可信的?


这个问题真要从密码学的角度的确难讲,但这个道理就相当于在现实生活中我们为什么要相信银行一样


3、在验证证书时,需要使用到权威机构的公钥,这个公钥是怎么传输的?


又回到这个问题,公钥怎么安全分发,按照以前思路,就是让另一个权威机构给这个权威机构颁发证书

那这就是一个无限递归,怎么搞呀?要想结束递归,那就要给递归设置初始条件

权威机构是一个树状分层的结构,高层的权威机构会给低层的权威机构颁发证书

某些顶层权威机构的证书会内置在操作系统或浏览器中,默认使用的人自动相信他们


6、对称加密 + 非对称加密 + 数字签名 + 数字证书(HTTPS)


兜兜转转,一路过来,终于到最后一步了

把我们之前讲的对称加密、非对称加密、数字签名、数字证书综合应用起来,就是 HTTPS 使用的加密技术


最后,我们把这些东西串联起来,讲一下 HTTPS 通信的全过程


客户端请求建立加密连接


服务器给客户端发送证书


客户端查看证书的有效日期,如果证书已经过期,那么提示失效,如果证书没有过期,继续下面步骤


客户端查看证书的颁发机构

如果客户端知道这个颁发结构,那么就会用对应的公钥验证证书,得到服务端的公钥

若客户端不知道这个颁发机构,那么就会提示这个证书存在风险,让用户选择是否要相信这个证书


如果验证通过,也就意味着客户端已经得到服务端的公钥

那么客户端随机生成一个对称密钥,并用服务端的公钥加密,发送给服务端


服务端收到后,用自己的私钥解密,得到对称密钥


此时,双方都已知道对称密钥 ,之后用它进行加密通信


目录
相关文章
|
5月前
|
缓存 网络协议 算法
(二)Java网络编程之爆肝HTTP、HTTPS、TLS协议及对称与非对称加密原理!
作为一名程序员,尤其是Java程序员,那必须得了解并掌握HTTP/HTTPS相关知识。因为在如今计算机网络通信中,HTTP协议的作用功不可没,无论是日常上网追剧、冲���、亦或是接口开发、调用等,必然存在HTTP的“影子”在内。尤其对于WEB开发者而言,HTTP几乎是每天会打交道的东西。
107 10
|
6月前
|
安全 网络协议 算法
Android网络基础面试题之HTTPS的工作流程和原理
HTTPS简述 HTTPS基于TCP 443端口,通过CA证书确保服务器身份,使用DH算法协商对称密钥进行加密通信。流程包括TCP握手、证书验证(公钥解密,哈希对比)和数据加密传输(随机数加密,预主密钥,对称加密)。特点是安全但慢,易受特定攻击,且依赖可信的CA。每次请求可能复用Session ID以减少握手。
68 2
|
6月前
|
网络协议 前端开发 Java
网络原理 - HTTP / HTTPS(4)——构造http请求
网络原理 - HTTP / HTTPS(4)——构造http请求
65 1
|
6月前
|
存储 JSON 安全
网络原理 - HTTP / HTTPS(2)——http请求
网络原理 - HTTP / HTTPS(2)——http请求
66 1
|
5月前
|
安全 网络协议 网络安全
计算机网络之HTTP和HTTPS的区别(文末送书福利)
计算机网络之HTTP和HTTPS的区别(文末送书福利)
|
6月前
|
机器学习/深度学习 安全 数据安全/隐私保护
【计算机网络】深度学习HTTPS协议
【计算机网络】深度学习HTTPS协议
53 0
|
7月前
|
存储 算法 安全
[计算机网络]---Https协议
[计算机网络]---Https协议
|
6月前
|
JSON 缓存 前端开发
网络原理 - HTTP / HTTPS(3)——http响应
网络原理 - HTTP / HTTPS(3)——http响应
44 0
|
6月前
|
前端开发 网络协议 JavaScript
网络原理 - HTTP / HTTPS(1)——http请求
网络原理 - HTTP / HTTPS(1)——http请求
95 0
|
7月前
|
JSON 安全 网络协议
【Linux 网络】网络基础(二)(应用层协议:HTTP、HTTPS)-- 详解
【Linux 网络】网络基础(二)(应用层协议:HTTP、HTTPS)-- 详解