美文网首页
HTTPS基础讲解

HTTPS基础讲解

作者: 上善若泪 | 来源:发表于2022-04-14 16:02 被阅读0次

1 HTTPS

点击了解HTTP基础知识

1.1 为什么需要https

HTTP是明文传输的,也就意味着,介于发送端、接收端中间的任意节点都可以知道传输的内容是什么。这些节点可能是路由器、代理等。
举个最常见的例子,用户登陆。用户输入账号,密码,采用HTTP的话,只要在代理服务器上做点手脚就可以拿到你的密码了。
用户登陆 --> 代理服务器(做手脚)--> 实际授权服务器
在发送端对密码进行加密?没用的,虽然别人不知道你原始密码是多少,但能够拿到加密后的账号密码,照样能登陆

1.2 HTTPS如何保障安全

HTTPS其实就是 secure http 的意思啦,也就是HTTP的安全升级版。稍微了解网络基础的都知道,HTTP是应用层协议,位于HTTP协议之下是传输协议TCPTCP负责传输,HTTP则定义了数据如何进行包装。
HTTP --> TCP (明文传输)
HTTPS相对于HTTP有哪些不同呢?其实就是在HTTPTCP中间加多了一层加密层TLS/SSL

1.2.1 TLS/SSL

通俗的讲,TLS、SSL其实是类似的东西,SSL是个加密套件,负责对HTTP的数据进行加密。TLSSSL的升级版。现在提到HTTPS,加密套件基本指的是TLS

1.2.2 传输加密的流程

原先是应用层将数据直接给到TCP进行传输,现在改成应用层将数据给到TLS/SSL,将数据加密后,再给到TCP进行传输。
大致如图所示

image.png

就是这么回事。将数据加密后再传输,而不是任由数据在复杂而又充满危险的网络上明文裸奔,在很大程度上确保了数据的安全。这样的话,即使数据被中间节点截获,坏人也看不懂。

1.3 HTTPS如何加密数据

对安全或密码学基础有了解的同学,应该知道常见的加密手段。一般来说,加密分为对称加密、非对称加密(也叫公开密钥加密)。

1.3.1 对称加密

对称加密的意思就是,加密数据用的密钥,跟解密数据用的密钥是一样的。
对称加密的优点在于加密、解密效率通常比较高。缺点在于,数据发送方、数据接收方需要协商、共享同一把密钥,并确保密钥不泄露给其他人。此外,对于多个有数据交换需求的个体,两两之间需要分配并维护一把密钥,这个带来的成本基本是不可接受的
点击了解加密之对称Base64,DES,PBE

1.3.2 非对称加密

非对称加密的意思就是,加密数据用的密钥(公钥),跟解密数据用的密钥(私钥)是不一样的。
什么叫做公钥呢?其实就是字面上的意思——公开的密钥,谁都可以查到。因此非对称加密也叫做公开密钥加密。
相对应的,私钥就是非公开的密钥,一般是由网站的管理员持有。
公钥、私钥两个有什么联系呢?
简单的说就是,通过公钥加密的数据,只能通过私钥解开。通过私钥加密的数据,只能通过公钥解开。
很多同学都知道用私钥能解开公钥加密的数据,但忽略了一点,私钥加密的数据,同样可以用公钥解密出来。而这点对于理解HTTPS的整套加密、授权体系非常关键。
点击了解加密之非对称RSA,DH,DSA,ECC

1.3.3 HTTPS通讯流程

概括来说,现在网络HTTPS简化的加密通信的流程就是:

  • 客户访问某网站X,网站将自己的证书给到客户(其实是给到浏览器,客户不会有感知)
  • 浏览器从证书中拿到某网站X公钥A
  • 浏览器生成一个只有自己知道的对称密钥B,用公钥A加密,并传给某网站X(其实是有协商的过程,这里为了便于理解先简化)
  • 某网站X通过私钥解密,拿到对称密钥B
  • 浏览器、 某网站X之后的数据通信,都用密钥B进行加密

注意:对于每个访问某网站X的用户,生成的对称密钥B理论上来说都是不一样的。比如客户1、客户2、客户3,可能生成的就是B1、B2、B3.
参考下图:(附上 原图出处 )

image.png

1.4 证书

1.4.1 证书简介

在正式介绍证书的格式前,科普下数字签名和摘要,然后再对证书进行介绍。
为什么呢?因为数字签名、摘要是证书防伪非常关键的武器。

1.4.2 数字签名与摘要

简单的来说,摘要就是对传输的内容,通过hash算法计算出一段固定长度的串(是不是联想到了文章摘要)。然后,在通过CA的私钥对这段摘要进行加密,加密后得到的结果就是数字签名

明文 --> hash运算 --> 摘要 --> 私钥加密 --> 数字签名

结合上面内容,我们知道,这段数字签名只有CA的公钥才能够解密。
接下来,我们再来看看神秘的“证书”究竟包含了什么内容,然后就大致猜到是如何对非法证书进行预防的了。
加密之数字证书和PFX信息交换

1.4.3 证书格式

证书格式来自这篇不错的文章《 OpenSSL 与 SSL 数字证书概念贴 》(直接百度即可)
内容非常多,这里我们需要关注的有几个点:

  • 证书包含了颁发证书的机构的名字 -- CA(证书颁发机构)
  • 证书内容本身的数字签名(用CA(证书颁发机构)私钥加密)
  • 证书持有者的公钥
  • 证书签名用到的hash算法

此外,有一点需要补充下,就是:

  • CA(证书颁发机构)本身有自己的证书,江湖人称“根证书”。这个“根证书”是用来证明CA(证书颁发机构)的身份的,本质是一份普通的数字证书。
  • 浏览器通常会内置大多数主流权威CA(证书颁发机构)的根证书。

主要的证书格式:

  1. 证书版本号(Version)
    版本号指明X.509证书的格式版本,现在的值可以为:
    0: v1
    1: v2
    2: v3
    也为将来的版本进行了预定义

  2. 证书序列号(Serial Number)
    序列号指定由CA(证书颁发机构)分配给证书的唯一的"数字型标识符"。当证书被取消时,实际上是将此证书的序列号放入由CA(证书颁发机构)签发的CRL中,这也是序列号唯一的原因。

  3. 签名算法标识符(Signature Algorithm)
    签名算法标识用来指定由CA(证书颁发机构)签发证书时所使用的"签名算法"。算法标识符用来指定CA签发证书时所使用的:
    公开密钥算法,hash算法

  4. 签发机构名(Issuer)
    此域用来标识签发证书的CA的X.500 DN(DN-Distinguished Name)名字。包括:
    国家(C)、省市(ST)、地区(L)、组织机构(O)、单位部门(OU)、通用名(CN)、邮箱地址

  5. 有效期(Validity)
    指定证书的有效期,包括:
    证书开始生效的日期时间、证书失效的日期和时间
    每次使用证书时,需要检查证书是否在有效期内。

  6. 证书用户名(Subject)
    指定证书持有者的X.500唯一名字。包括:
    国家(C)、省市(ST)、地区(L)、组织机构(O)、单位部门(OU)、通用名(CN)、邮箱地址

  7. 证书持有者公开密钥信息(Subject Public Key Info)
    证书持有者公开密钥信息域包含两个重要信息:
    证书持有者的公开密钥的值、公开密钥使用的算法标识符。
    此标识符包含公开密钥算法和hash算法。

  8. 扩展项(extension)
    X.509 V3证书是在v2的基础上一标准形式或普通形式增加了扩展项,以使证书能够附带额外信息。
    标准扩展是指由X.509 V3版本定义的对V2版本增加的具有广泛应用前景的扩展项,任何人都可以向一些权威机构,如ISO,来注册一些其他扩展,如果这些扩展项应用广泛,也许以后会成为标准扩展项。

  9. 签发者唯一标识符(Issuer Unique Identifier)
    签发者唯一标识符在第2版加入证书定义中。此域用在当同一个X.500名字用于多个认证机构时,用一比特字符串来唯一标识签发者的X.500名字。可选

  10. 证书持有者唯一标识符(Subject Unique Identifier)
    持有证书者唯一标识符在第2版的标准中加入X.509证书定义。此域用在当同一个X.500名字用于多个证书持有者时,用一比特字符串来唯一标识证书持有者的X.500名字。可选。

  11. 签名算法(Signature Algorithm)
    证书签发机构对证书上述内容的签名算法
    example: sha256WithRSAEncryption

  12. 签名值(Issuer's Signature)
    证书签发机构对证书上述内容的签名值

1.4.4 如何辨别非法证书

上面提到,某网站X证书包含了如下内容:

  1. 证书包含了颁发证书的机构的名字 -- CA
  2. 证书内容本身的数字签名(用CA私钥加密)
  3. 证书持有者的公钥
  4. 证书签名用到的hash算法

浏览器内置的CA的根证书包含了如下关键内容:CA的公钥
好了,接下来针对之前提到的两种非法证书的场景,讲解下怎么识别

1.4.4.1 完全伪造的证书

这种情况比较简单,对证书进行检查:

  1. 证书颁发的机构是伪造的:浏览器不认识,直接认为是危险证书
  2. 证书颁发的机构是确实存在的,于是根据CA名,找到对应内置的CA根证书、CA的公钥。
  3. 用CA的公钥,对伪造的证书的摘要进行解密,发现解不了。认为是危险证书

1.4.4.2 篡改过的证书

假设代理通过某种途径,拿到某网站X的证书,然后将证书的公钥偷偷修改成自己的,然后认为用户要上钩了,其实浏览器会如下操作:

  1. 检查证书,根据CA名,找到对应的CA根证书,以及CA的公钥。
  2. 用CA的公钥,对证书的数字签名进行解密,得到对应的证书摘要AA
  3. 根据证书签名使用的hash算法,计算出当前证书的摘要BB
  4. 对比AA跟BB,发现不一致--> 判定是危险证书

相关文章

  • HTTPS基础讲解

    1 HTTPS 点击了解HTTP基础知识[https://jingzh.blog.csdn.net/article...

  • https的ssl证书基础知识

    建站人必懂得https,ssl证书知识讲解 1、HTTPS是什么? HTTPS基础知识:HTTPS (Secure...

  • flutter 学习网站导航

    语言 Language Tour, 讲解语言基础 - https://www.dartlang.org/guide...

  • HTTPS协议讲解

    HTTPS协议讲解 1、前言 http是非常常见的应用层协议,是超文本传输协议的简称,其传输的内容都是明文的。如果...

  • 笔记大合集 开始学习了

    ​ UI设计基础教程-干货讲解零基础可以学会UI设计 - UI设计的文章 - 知乎 https://zhuanla...

  • 【汇总】数值

    多实例讲解:数值基础之战斗数值 https://mp.weixin.qq.com/s/MbnYRxpKvWbikj...

  • Web3极客日报 #2

    基础知识:Metamask中用到的stream讲解 https://zhuanlan.zhihu.com/p/36...

  • Https安全原理讲解

    这个知识点我觉得特有意思,来记录一下。 首先讲一下Http为什么不安全?我们用下面这个例子来打个比方。 假设你坐在...

  • HTTPS基础

    本章是HTTPS那些事儿的第一篇文章,其他相关文章请参见:前言本篇主要讲解Https的基础知识,涉及到以下几点: ...

  • HTTPS基础

    HTTPS是在HTTP和TCP之间添加了安全传输层,目前使用TLS作为安全传输层 HTTPS需要解决的问题 服务器...

网友评论

      本文标题:HTTPS基础讲解

      本文链接:https://www.haomeiwen.com/subject/cdgtertx.html