数字证书工作原理 图文并茂

SSL证书和HTTPS的关系

HTTPS在HTTP的基础上加入了SSL加密协议,HTTP是明文传输,HTTPS是加密传输。

A quick definition:
HTTPS stands for hypertext transfer protocol secure and is the encrypted version of HTTP. It is used for secure communication across the internet or a network. The communication protocol is encrypted using Transport Layer Security (TLS) or, formerly, Secure Sockets Layer (SSL).

How get a digital certificate?

数字证书的创建流程:
https://help.aliyun.com/document_detail/211100.html
可以通过阿里云SSL证书服务购买SSL证书,并向CA中心提交证书申请,直到证书成功签发;您将已签发的证书安装到Web服务器后,则Web服务将会通过HTTPS加密协议来传输数据。
HTTPS加密传输协议可激活客户端浏览器到网站服务器之间的SSL加密通道(SSL协议),从而实现高强度双向加密传输,防止传输数据被泄露或篡改。

安全作用
数字签名的作用是防中间人伪造、篡改;
SSL数字证书的作用是证明发件人是谁,保证收到的公钥是官方发给我的,不是被中间人篡改过的。

SSL数字证书为什么会安全?

用SSL与不用SSL证书的区别:

数字证书工作原理 图文并茂
  • 防中间人劫持,获取明文数据;
  • 浏览器能验证服务器身份,区分官网或钓鱼网站;
  • 防中间人篡改,必要时,服务器还可以验证访客身份(可选 );

SSL证书怎么做到上面3个功能的?
请看数字证书签发、验签流程

数字证书签发、验签流程

前提一定要理解数字签名的流程.

数字证书就是给公钥做的数字签名,为什么需要给公钥做数字签名?
格式:
X.509是RFC5280定义的一种公钥证书格式(public key certificate)。
X.509证书也被称为数字Digital Certificate。
一张X.509包含一个Public Key和一个身份信息。X.509证书要么是自签发,要么是被CA签发。

数字证书工作原理 图文并茂
把版本、发行方、过期时间、域名、公钥、证书签名等信息 合成在一个文件内,就叫数字证书。
里面的信息,根据标准格式存入,也可以根据标准格式取出。

数字证书工作原理 图文并茂
CA签发,就是你申请证书的时,把你的信息块提交给CA,CA用他的RSA密钥给你信息块加密,
得到一个:Certificate Signature , CA的证书也会在你电脑里保存着,
这样你通过他的公钥就能解密Certificate Signature 得到H2(哈希值),
可以做对比,来判断是否篡改过。

简化版的签发、验收流程

数字证书工作原理 图文并茂
CA 签发证书的过程,如上图左边部分:
  • 首先 CA 会把持有者的公钥、用途、颁发者、有效时间等信息打成一个包,然后对这些信息进行 Hash 计算,得到一个 Hash 值;
  • 然后 CA 会使用自己的私钥将该 Hash 值加密,生成 Certificate Signature,也就是 CA 对证书做了签名;
  • 最后将 Certificate Signature 添加在文件证书上,形成数字证书;

客户端校验服务端的数字证书的过程,如上图右边部分:

  • 首先客户端会使用同样的 Hash 算法获取该证书的 Hash 值 H1;
  • 通常浏览器和操作系统中集成了 CA 的公钥信息,浏览器收到证书后可以使用 CA 的公钥解密 Certificate Signature 内容,得到一个 Hash 值 H2 ;
  • 最后比较 H1 和 H2,如果值相同,则为可信赖的证书,否则则认为证书不可信。

证书链
但事实上,证书的验证过程中还存在一个证书信任链的问题,因为我们向 CA 申请的证书一般不是根证书签发的,而是由中间证书签发的,比如百度的证书,从下图你可以看到,证书的层级有三级:

数字证书工作原理 图文并茂

我自己画了一下简图:

数字证书工作原理 图文并茂

H2由上一级给你生成,在你提交信息给CA的时候,CA用他的私钥和你信息摘要生成H2.

reference

数字签名、数字证书与HTTPS是什么关系?
https://www.zhihu.com/question/52493697

一文彻底搞懂加密、数字签名和数字证书!
https://segmentfault.com/a/1190000024523772

浏览器如何验证HTTPS证书的合法性?
https://www.zhihu.com/question/37370216

手工验证一张数字证书的有效性
https://blog.yuantops.com/tech/validate_a_digital_certificate_step_by_step/
浏览器验证SSL数字证书的步骤
https://blog.yuantops.com/tech/how_do_web_broswer_validate_ssl_certificates/

Original: https://www.cnblogs.com/mysticbinary/p/15339793.html
Author: Mysticbinary
Title: 数字证书工作原理 图文并茂

原创文章受到原创版权保护。转载请注明出处:https://www.johngo689.com/578335/

转载文章受原作者版权保护。转载请注明原作者出处!

(0)

大家都在看

  • 对象缓存服务的思考和实现

    写在前面 目前在很多业务中,存储都大量的依赖了云存储,比如阿里云的 oss、华为云的 obs 等。但是如果有大量的上传/下载任务,云存储上的网络 I/0 就变成了一个很大的瓶颈。 …

    Linux 2023年6月14日
    0101
  • PXE(cobbler)搭建,自动系统安装

    404. 抱歉,您访问的资源不存在。 可能是网址有误,或者对应的内容被删除,或者处于私有状态。 代码改变世界,联系邮箱 contact@cnblogs.com 园子的商业化努力-困…

    Linux 2023年6月7日
    0123
  • 高速USB转4串口产品设计-RS232串口

    基于480Mbps 高速USB转8路串口芯片CH344Q,可以为各类主机扩展出4个独立的串口。CH344芯片支持使用操作系统内置的CDC串口驱动,也支持使用厂商提供的VCP串口驱动…

    Linux 2023年6月7日
    0112
  • sqlcmd执行含中文等字符的sql脚本时报错解决方案

    阅文时长 | 0.41分钟字数统计 | 668.8字符主要内容 | 1、问题说明 2、解决方案 3、常用的Code Page 4、声明与参考资料『sqlcmd执行含中文等字符的sq…

    Linux 2023年6月14日
    0114
  • Linux专项之Apache

    1.虚拟机上网 1.安装软件(httpd) yum search ht…

    Linux 2023年5月27日
    0104
  • MySQL里的那些日志们

    该系列博文会告诉你如何从入门到进阶,从sql基本的使用方法,从MySQL执行引擎再到索引、事务等知识,一步步地学习MySQL相关技术的实现原理,更好地了解如何基于这些知识来优化sq…

    Linux 2023年6月14日
    0114
  • Linux中CentOS 7版本安装JDK、Tomcat、MySQL、lezsz、maven软件详解

    软件安装 在Linux系统中,安装软件的方式主要有四种,这四种安装方式的特点如下: 安装方式 特点 二进制发布包安装 软件已经针对具体平台编译打包发布,只要解压,修改配置即可 rp…

    Linux 2023年6月6日
    0106
  • sqlserver查询(子查询,全连接,等值连接,自然连接,左右连,交集,并集,差集)

    –部门表 create table dept( deptno int primary key,–部门编号 dname nvarchar(30),–部门名 loc nvarch…

    Linux 2023年6月7日
    0121
  • 【Leetcode】64. 最小路径和

    给定一个包含非负整数的 m x n网格 grid,请找出一条从左上角到右下角的路径,使得路径上的数字总和为最小。 说明:每次只能向下或者向右移动…

    Linux 2023年6月6日
    0108
  • Java实现两种队列(数组和链表)

    @date 2022-09-13 17:50*/public class QueueLinked{ private static class Node{E item;Node ne…

    Linux 2023年6月14日
    0142
  • 2022年5月16号开始整理habse

    关于本次整理的hbase内容是基于原理的学习的笔记 Original: https://www.cnblogs.com/yxb123/p/16277454.htmlAuthor: …

    Linux 2023年6月7日
    0123
  • Docker 容器中安装 Docker

    本文讲的是在Docker中安装Ubuntu容器,然后在这个Ubuntu容器中再安装Docker。或许这样可以省下买服务器的钱,当然这只是为了学习测试使用,真正项目上还是需要买服务器…

    Linux 2023年6月14日
    0109
  • IEEE浮点数标准

    IEEE浮点数标准 阅读笔记:Computer System : A Programmmer’s Perspective 基本概念 IEEE浮点数标准采用 [V=(-1…

    Linux 2023年6月8日
    0126
  • 手撕spring核心源码,彻底搞懂spring流程

    引子 十几年前,刚工作不久的程序员还能过着很轻松的日子。记得那时候公司里有些开发和测试的女孩子,经常有问题解决不了的,不管什么领域的问题找到我,我都能帮她们解决。但是那时候我没有主…

    Linux 2023年6月14日
    0129
  • Nginx/Tengine安装配置详解

    1 概念 Nginx (“engine x”) 是一个高性能的 HTTP 和 反向代理 服务器,也是一个 IMAP/POP3/SMTP 代理服务器。官方测试…

    Linux 2023年5月27日
    0169
  • jdk 安装(图形界面版)

    在这里为大家提供jdk8的Linux版安装包,下载链接: 提前将jdk安装包放入U盘中,插入U盘,VMware会自动识别,选择将U盘接入虚拟机 打开终端 为避免权限不足,开始之前确…

    Linux 2023年6月8日
    0117
亲爱的 Coder【最近整理,可免费获取】👉 最新必读书单  | 👏 面试题下载  | 🌎 免费的AI知识星球