Web 安全:PKI 扫盲

news2025/1/24 11:40:34

个人博客

在互联网世界,我们广泛采用 TLS 来保护通信安全,这里的安全主要包含两部分内容:身份鉴别、通信加密。身份鉴别是一切的基础,特别当发送消息比较敏感需要加密时,对接收方必然有一个身份“假设”,“假设”如何证实就是靠鉴别,而鉴别的前提是有一套身份标记规范——如中国的公民身份证、美国的社会保障号。

一切活动都是不同实体间的互动,虚拟世界要运作起来首先也必须建立各种实体,标记其身份,特别是需要和物理世界的实体进行对应时 —— 至于如何对应又是另一个复杂问题,这种映射到物理世界的困难似乎是所有概念的宿命。

整体结构

在互联网世界里,是通过 PKI(Public-Key Infrastructure,公钥基础设施)来建立身份体系,使用的标准为 X.509。在 X.509 中规定采用证书来标记身份(根本上还是非对称加密技术,此处不赘述),并通过相关的参与方来管理证书的整个生命周期。

在 PKI 体系中,主要有 4 个参与方:

  • CA(Certification Authority),证书颁发机构,核心设施,负责颁发、吊销证书;
  • RA(Registration Authority),证书登记机构,在现实中核实申请证书的用户身份,此功能可以合并到 CA 中;
  • 证书申请用户,使用证书来表明自己的合法身份,通常为网站;
  • 终端浏览器,用户通过浏览器访问网站的 https 地址,在建立 tls 会话的过程中获取证书、鉴别网站身份。
    在这里插入图片描述

通常情况下,只需要单向认证,整个过程如下:

  1. 网站需要先生成证书签名申请(CSR,Certificate Signing Request),主要包含公钥、网站域名(可以有多个),以及私钥对申请信息的签名;
  2. 将 CSR 提交 CA,CA 核实后生成网站证书,颁发给网站;
  3. 网站在 SSL 网关(如 Nginx)上配置证书(如果网站证书往上还有若干中间证书,则最好把中间证书和网站证书都放在一起),启用 https;
  4. 浏览器访问 https 网址,在 tls 握手过程中读取到网站证书;
  5. 查询 CRL(Certificate Revocation List,证书撤销列表)、OCSP(Online Certificate Status Protocol),验证证书的有效性,并从网站证书开始,循着证书链验证每一个节点的证书合法性。

证书

内容

证书就是实体的身份证,里面主要包含了实体的公钥以及 CA 机构的认证签名。

格式

证书有多种存放格式,主要有以下三种:

  • DER(Distinguished Encoding Rules),一种二进制编码格式;
  • BER(Basic Encoding Rules),是 DER 的子集
  • PEM(Privacy-enhanced Electronic Mail),是 DER 经过 BASE64 编码后的格式。

还有一种证书格式为 PFX,给客户端浏览器用的,PFX 文件中除了证书,还包含私钥(在双向认证里证明客户端身份),文件后缀为 .pfx 或 .p12。

申请

有 3 种证书申请类型:

  • DV(Domain Validation),全自动签发,只需要验证域名是申请者所有的就行,一般是发一封邮件给域名管理者,点击确认后即自动签发证书;
  • OV(Organization Validation),人工核验,审核相对严格一点;
  • EV(Extended Validation),弥补 OV 审核的不足,证书审核遵照 Baseline Requirements 里的要求,严格。

当然价格和售后服务也是不一样的,EV 最贵。网站一般用 DV 证书,比如博主用的就是 Let’s Encrypt 上薅的免费 DV 证书。

从对应域名的能力来看,证书又可以分为 4 种类型:

  • 单域名证书,只对应一个具体域名,如 www.chenqing.work;
  • 泛域名证书,对应一类域名,如 *.chenqing.work;
  • SAN 域名证书,对应多个具体域名,一般这多个域名无法合并到一个泛域名下,如 www.chenqing.work、www.chenqing.life;
  • SAN 泛域名证书,对应多个泛域名,如 .chenqing.work、.chenqing.life。

价格上肯定单域名的最便宜,能匹配越多域名的越贵。

在这里插入图片描述

关于证书,国内和国际还有一点差异,国际标准一般称为单证,用户使用唯一的一张证书及对应私钥进行签名和加密操作;而国内称为双证,签名的一对公私钥是自己生成,但加密过程中用的公私钥是由 CA 生成。

信任

身份通过证书来唯一标记,那如何验证证书的合法性?如何确认它不是伪造的?

首先来看一下网站证书,证书必须包含的内容之二是:颁发者(issuer)、颁发对象(subject)。结合当前证书的其他相关字段可以确证是该颁发者认证并颁发了证书给颁发对象。这样问题就递进为确认颁发者是不是合法的。
在这里插入图片描述

上推一级,去拿颁发者的证书,颁发者的证书中同样具有“颁发者”、“颁发对象”这两项内容,以此类推,就构成了一条证书链,当然链条的每个咬合点都需要使用签名来保障真实性。(猜猜区块链技术有没有借鉴它?)

因为证书不可能无限长,上推到某一节点必须要停止,在该节点“颁发者”、“颁发对象”是同一个,称为根证书,根证书显然为自签名证书。到这里问题就归约为根证书是否合法
在这里插入图片描述

根证书怎么验证合法性?通过网络请求 CA 鉴别?

问题是,通过网络请求 CA 进行鉴别前,需要先鉴别自称是 CA 的服务发来的证书是否表明它就是 CA。这就陷入了鸡生蛋还是蛋生鸡的死循环,总之至少要预先共享一点啥。

解决方法还是物理配送,即在操作系统、浏览器中下锚——预置信任的根证书,如此整个信任链条就建立起来了。

所谓互联网上公开受信的证书,就是其根证书在操作系统、浏览器中有预置的证书。所以开发环境自签名证书时,需要将根证书手工导入操作系统或浏览器的受信任根证书区域。


参考

  • 《HTTPS 权威指南》
  • 《Web 性能权威指南》
  • 《深入浅出 HTTPS》

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

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

相关文章

MacBook Pro M1 Docker 环境安装 Nacos 2.x 版本

MacBook Pro M1 Docker 环境安装 Nacos 2.x 版本 前言 由于 rocksdb 暂不支持 M1 平台,所以使用 Zulu JDK 的小伙伴们运行 Nacos 2.x 版本会报错,网上通用的解决方案是使用 Oracle JDK 来运行 Nacos 2.x 版本,但对于强迫症的我来说&#xf…

图书管理系(统附源码PPT)

图书管理系统1 绪 论1.1 研究背景1.2 研究意义1.3 相关研究现状1.3.1 高校图书管理面临的问题1.3.2 信息化为图书管理带来新变化2 相关技术2.1 JSP 概述2.2 MySQL 数据库技术2.3 Spring2.4 SpringMVC2.5 Dbcp2.6 Maven3 系统分析3.1 需求分析3.1.1 系统的功能需求分析3.1.2 系统…

【Git】一文带你入门Git分布式版本控制系统(必要配置、工作原理、创建/克隆项目)

Git 系列文章目录 Git 专栏参考链接Git(一)【Git】一文带你入门Git分布式版本控制系统(简介,安装,Linux命令)文章目录Git 系列文章目录一、Git 的必要配置二、Git 的工作原理三、Git 项目创建1、创建本地项…

【kafka】十四、kafka生产者API

kafka Producer API 1.消息发送流程 kafka的producer发送消息采用的是异步发送的方式。在消息的发送过程中,涉及到了两个线程–main线程和sender线程,以及一个线程共享变量–RecordAccumulator。main线程将消息发送给RecordAccumulator,send…

单向环形链表介绍以及约瑟夫问题分析

❤️一名热爱Java的大一学生,希望与各位大佬共同学习进步❤️ 🧑个人主页:周小末天天开心 各位大佬的点赞👍 收藏⭐ 关注✅,是本人学习的最大动力 感谢! 📕该篇文章收录专栏—数据结构 目录 单…

不敲代码就能搭建个人博客?快解析内网穿透来助力

记得很多年前看到一句话,“博客是一个人的狂欢”。无论是享受搭建的过程,还是享受创作的乐趣,更多时候博客是在取悦自己。那么,在2022年的今天,搭建个人博客还有意义吗?答案是肯定的,当我们在搜…

Day4: 应用篇-1

应用篇-1 环境安装 应用开发交叉编译环境, 【正点原子】I.MX6U嵌入式Linux驱动开发指南V1.7.pdf 章节4.3.1 在 Ubuntu 中创建目录:/usr/local/arm,命令如下: sudo mkdir /usr/local/arm令将交叉编译器复制到/usr/local/arm 中…

Arduino开发实例-DIY分贝测量仪

DIY分贝测量仪 1、应用介绍 分贝计,它通常用于测量声音的强度和水平。 声音响度是用分贝来衡量的。 从飞机到人类耳语的不同发声介质都有一定的声音响度,以分贝表示。 声波是具有来回运动的纵波,给出高音或低音,如图所示: 声音的响度取决于频率或波长或传播所需的时间。…

APK构建过程-命令行编译

官方对APK构建过程的介绍 官方 - 构建流程介绍 典型 Android 应用模块的构建流程,按照以下常规步骤执行: 编译器将您的源代码转换成 DEX 文件(Dalvik 可执行文件,其中包括在 Android 设备上运行的字节码),…

【强化学习论文合集】专栏介绍(订阅前必读)

导读:什么是强化学习? 强化学习(Reinforcement Learning, RL),又称再励学习、评价学习或增强学习,是机器学习的范式和方法论之一,用于描述和解决智能体(agent)在与环境的…

AtCoder Beginner Contest 263 G.Erasing Prime Pairs(二分图最大匹配-网络流)

题目 黑板上有n(n<100)个不同的数&#xff0c;第i个数ai(1<ai<1e7)出现了bi(1<1e9)次&#xff0c; 你每次可以选择当前黑板上存在的两个数x、y&#xff0c;满足xy是质数&#xff0c;擦掉这两个数&#xff0c; 求可以擦掉的最大次数 思路来源 AtCoder Beginner…

[LeetCode周赛复盘] 第 321 场周赛20221127

[LeetCode周赛复盘] 第 321 场周赛20221127 一、本周周赛总结二、 [Easy] 6245. 找出中枢整数1. 题目描述2. 思路分析3. 代码实现三、[Medium]6246. 追加字符以获得子序列1. 题目描述2. 思路分析3. 代码实现四、[Medium] 6247. 从链表中移除节点1. 题目描述2. 思路分析3. 代码实…

Docker-compose详解和LNMP搭建实战

目录 一、Docker-compose简介 1.前言 2.概述 二、Docker-compose安装 三、YAML文件格式及编写注意事项 1.简介 2.使用方法 四、Docker Compose 常用命令 五、Docker Compose 配置常用字段 六、Docker-compose搭建LNMP实战 一、Docker-compose简介 1.前言 我们知道使…

深度学习与总结JVM专辑(三):垃圾回收器—G1(图文+代码)

垃圾收集器G1前言概述停顿时间模型内存布局传统内存布局过时了G1实现的几个关键细节问题铺垫知识&#xff1a;跨代引用铺垫知识&#xff1a;记忆集&#xff0c;卡表&#xff0c;卡页铺垫知识&#xff1a;写屏障插眼往下看G1内存模型分区Region卡片Card堆Heap分代模型分代垃圾收…

网站分享:7个非常好用的电子书网站

❤️作者主页&#xff1a;IT技术分享社区 ❤️作者简介&#xff1a;大家好,我是IT技术分享社区的博主&#xff0c;从事C#、Java开发九年&#xff0c;对数据库、 C#、 Java、前端、运维、电脑技巧等经验丰富。 ❤️个人荣誉&#xff1a; 数据库领域优质创作者&#x1f3c6;&…

Steam下载MOD至本地文件夹

Steam下载MOD至本地文件夹1 所需app和web2 具体步骤2.1 安装SteamCMD2.2 登录SteamCMD2.3 打开网页端的Steam并搜索你想要的MOD2.4 点击你需要的MOD&#xff0c;并复制链接2.5 将链接放入 https://steamworkshopdownloader.io/2.6 把下载代码放入SteamCMD由于各种原因&#xff…

OpenVINO--初步学习笔记

英特尔发布的针对AI工作负载的一款部署神器当模型训练结束后&#xff0c;上线部署时&#xff0c;就会遇到各种问题&#xff0c;比如&#xff0c;模型性能是否满足线上要求&#xff0c;模型如何嵌入到原有工程系统&#xff0c;推理线程的并发路数是否满足&#xff0c;这些问题决…

java项目_第164期ssm定西扶贫惠农推介系统-_java毕业设计_计算机毕业设计

java项目_第164期ssm定西扶贫惠农推介系统-_java毕业设计_计算机毕业设计 【源码请到资源专栏下载】 今天分享的项目是《ssm定西扶贫惠农推介系统》 该项目分为2个角色&#xff0c;管理员和用户。 用户可以浏览前台,包含功能有&#xff1a; 首页、扶贫计划、惠农福利、优秀农民…

【C++】vector的介绍和使用

​&#x1f320; 作者&#xff1a;阿亮joy. &#x1f386;专栏&#xff1a;《吃透西嘎嘎》 &#x1f387; 座右铭&#xff1a;每个优秀的人都有一段沉默的时光&#xff0c;那段时光是付出了很多努力却得不到结果的日子&#xff0c;我们把它叫做扎根 目录&#x1f449;vector 的…

【课设/毕业设计】电力系统潮流计算(Matlab代码实现)

&#x1f468;‍&#x1f393;个人主页&#xff1a;研学社的博客 &#x1f4a5;&#x1f4a5;&#x1f49e;&#x1f49e;欢迎来到本博客❤️❤️&#x1f4a5;&#x1f4a5; &#x1f3c6;博主优势&#xff1a;&#x1f31e;&#x1f31e;&#x1f31e;博客内容尽量做到思维缜…