深入浅出:HTTPS单向与双向认证及证书解析20231208
介绍:
网络安全的核心之一是了解和实施HTTPS认证。本文将探讨HTTPS单向认证和双向认证的区别,以及SSL证书和CA证书在这些过程中的作用,并通过Nginx配置实例具体说明。
第一部分:HTTPS单向认证
- 定义及工作原理:HTTPS单向认证是一种安全协议,其中只有服务器向客户端证明其身份。这是通过服务器提供SSL证书来实现的,客户端将验证此证书以确保服务器的真实性和信任度。这种认证方法常用于大多数客户端-服务器通信,如访问网站。
ssl_certificate 指向服务器的SSL证书文件(.crt),这个证书可以是由可信证书颁发机构(CA)签发的,也可以是自签名的。ssl_certificate_key 指向与SSL证书相对应的私钥文件(.key)。这个私钥是在生成证书时创建的,必须保密。

图片说明:
这张图展示了在单向认证中,服务器如何向客户端提供SSL证书,以及客户端如何进行验证的过程。
- 服务器提供证书:在这个过程中,服务器首先向客户端提供其SSL证书。这一步骤类似于某人出示其身份证明。
- 客户端验证证书:接着,客户端收到证书并进行验证。验证步骤包括检查证书是否由可信的证书颁发机构签发、证书是否有效(未过期)、以及证书中的域名是否与服务器的域名匹配。
- 建立加密通信:一旦客户端验证了服务器的证书,并确认其可信,就会与服务器建立加密的通信连接
趣味举例
想象一下,你在一家豪华餐厅的门口,门卫需要验证你的身份才能让你进入。这就像HTTPS单向认证,只不过在这里,餐厅(服务器)需要向你(客户端)展示它的身份证(SSL证书)。这样做的目的是让你确信自己没有走错门,不会误入“钓鱼网站”的陷阱。
Nginx配置实例:
server {listen 443 ssl;server_name example.com;ssl_certificate /path/to/your/certificate.crt;ssl_certificate_key /path/to/your/private.key;ssl_protocols TLSv1.2 TLSv1.3;# 其他必要的配置...
}
第二部分:HTTPS双向认证
- 定义及工作原理:在HTTPS双向认证中,客户端和服务器都需要证明彼此的身份。这不仅要求服务器提供SSL证书,还要求客户端提供自己的证书。服务器将验证客户端证书的有效性,这种方法用于高安全要求的场景,如企业内部网络或金融交易。
服务器端的配置同单向认证,但额外增加了ssl_client_certificate 和ssl_verify_client 指令。ssl_client_certificate 指向用于验证客户端证书的CA证书文件。这通常是一个CA的公共证书文件。ssl_verify_client on; 表示服务器将验证连接到此服务器的客户端证书。

图片说明:
这张图描绘了双向认证过程,其中服务器和客户端互相提供SSL证书,并进行相互验证。
- 双方互相提供证书:在双向认证中,服务器和客户端都需要提供各自的SSL证书。这意味着双方都要出示身份证明。
- 互相验证证书:服务器将验证客户端的证书,而客户端则验证服务器的证书。这个过程确保了双方的身份都得到确认。
- 建立双向加密通信:双方证书一旦都被验证为有效,就会建立一个双向加密的通信通道。
趣味举例
现在,情况变得更有趣了。你不仅需要确认餐厅是真的,餐厅也想确认你是邀请的贵宾,而不是闲杂人等。这就是HTTPS双向认证的情景。这里,除了餐厅(服务器)向你展示身份证外,
你也得拿出你的VIP卡(客户端证书)来证明自己的身份。
Nginx配置实例:
server {listen 443 ssl;server_name example.com;ssl_certificate /path/to/your/certificate.crt;ssl_certificate_key /path/to/your/private.key;ssl_client_certificate /path/to/ca_certificate.crt;ssl_verify_client on;ssl_protocols TLSv1.2 TLSv1.3;# 其他必要的配置...
}
第三部分:SSL证书
- 定义:SSL证书(现在通常称为TLS证书)是由CA签发给特定实体(如网站、服务器、客户端)的数字证书。
- 角色:SSL证书在建立加密的HTTPS连接和身份验证方面起着核心作用。它包含公钥,用于加密客户端和服务器之间的通信,同时证书本身作为身份验证的一部分。
- 获取方式:SSL证书可以从公认的证书颁发机构(CA)获取,这些证书广泛被信任。也可以生成自签名证书,但这通常只适用于测试环境或内部使用,因为它们不被外部实体普遍信任。

图片说明:
这张信息图展示了SSL证书在建立加密连接和身份验证中的关键作用。
- 身份验证:SSL证书首先用于身份验证。证书证明了服务器(或在双向认证中的客户端)的身份。
- 加密通信:证书包含公钥,用于加密数据。这保证了数据在客户端与服务器之间传输时的安全性和隐私。
- 信任建立:由于证书通常由受信任的CA签发,因此它也起到了建立用户对网站信任的作用。
用途:
- 身份验证:用于证明服务器或客户端的身份,确保您正在与预期的实体通信。
- 加密通信:包含公钥,用于建立加密的HTTPS连接,确保数据在传输过程中的安全。
与CA证书的关系:
- SSL证书通常由CA签发,证书中包含了由CA的私钥加密的签名,表明该证书是由特定的CA验证和签发的。
- 客户端(如浏览器)通过验证SSL证书上的签名,来确认证书的真实性。这一过程需要使用对应CA的公钥,通常包含在CA证书中。
趣味举例
SSL证书就像是网络世界的身份证。它们证明网站的身份,并且确保你输入的数据被神秘的加密算法保护,使之在网络传输中不被窃听或篡改。
你可以从一家像是身份证办公室的机构——证书颁发机构(CA)——获取这种证书,或者你可以自己动手制作一个(自签名证书),虽然后者在安全性上可能不那么令人信服。
第四部分:CA证书
- 定义和作用:CA证书由证书颁发机构颁发,用作建立数字证书信任链的根基。它们验证和签发其他证书,如SSL证书。
- 公共CA与私有CA:公共CA像是全球认可的证书发行机构,提供广泛认可的证书,而私有CA主要用于特定组织或私有网络,提供特定环境下的证书。
趣味举例
CA证书是由证书颁发机构发行的,它们在数字世界中的作用就像是政府的认证印章。这些证书确立了一个信任链,告诉你:“嘿,你可以信任这个网站。” 公共CA就像是国际认可的护照发行机构,而私有CA更像是某个秘密社团的内部身份验证系统,只在特定的小圈子内受信任。
第五部分:实际应用中的考虑因素选择认证方式:
选择单向认证或双向认证取决于所需的安全级别和应用场景。单向认证适用于大多数公共网站,而双向认证更适合于需要高度安全验证的环境,如企业网络或敏感数据交换。
选择使用单向认证还是双向认证,就像是在安全和便利之间做出选择。如果你运营的是一家大众面向的在线商店,那么单向认证就足够了——就像只需要门卫检查顾客的身份一样。但如果你管理着一个包含敏感数据的企业网络,双向认证就显得至关重要了——这就像一个高安全级别的设施,需要双重验证才能进入。
CA的种类
公共CA
- 全球范围内的CA:确实存在一些大型的、公认的CA,如Let’s
Encrypt、VeriSign、DigiCert、Comodo等。这些CA被广泛信任,并且它们签发的证书被全球大多数浏览器和操作系统接受。 - 受信任的CA:这些CA在其业务运营中受到严格的规范和监管。它们的根证书通常被包含在主流浏览器和操作系统中,这使得它们签发的证书被广泛信任。
私有CA
- 组织内部的CA:某些组织可能会运营自己的私有CA,用于内部网络和服务的证书管理。这些私有CA通常不被外部实体信任,除非它们的根证书被手动导入到信任存储中。
- 服务端作为CA:理论上,任何服务端都可以设置为CA,签发证书给其他实体(如其他服务器、客户端设备)。但这些自签名的证书默认不被外部实体信任,除非它们的根证书被明确地添加到信任列表中。

图片说明:
这张插图对比了公共CA和私有CA,突出了它们在不同场景下的应用和差异。
- 公共CA:公共CA(如Let’s Encrypt,
DigiCert)是广泛认可的机构,它们提供的证书被全球大多数浏览器和操作系统信任。适用于面向公众的网站和服务。 - 私有CA:私有CA通常用于特定组织内部,比如企业内网。它们签发的证书主要用于内部应用和服务,通常不被外部实体认可
自签名证书
- 自签名:实体(如个人或组织)也可以创建自签名证书,这相当于自己作为CA。这些证书在开发和测试环境中非常有用,但由于缺乏外部验证和信任,它们通常不适合公开使用。
客户端证书
每个客户端通常拥有自己的唯一证书。这个证书由CA签发,并包含特定于该客户端的信息(如公钥、身份信息等)。虽然每个客户端证书是唯一的,但多个证书可以由同一个CA签发。
信任和验证
- 信任问题:自签名证书或私有CA签发的证书在未被明确信任的情况下会引发安全警告。这是因为浏览器和操作系统无法验证这些证书的来源。
- 用途和环境:对于公共面向的网站和服务,建议使用公认的CA签发的证书,以确保终端用户的信任和安全。对于内部网络和特定用途,私有CA或自签名证书可能是合适的选择。
结论:
理解和正确实施HTTPS认证及其证书管理对于保障网络安全至关重要。希望本文能帮助您在这方面获得更深入的了解。
相关文章:
深入浅出:HTTPS单向与双向认证及证书解析20231208
介绍: 网络安全的核心之一是了解和实施HTTPS认证。本文将探讨HTTPS单向认证和双向认证的区别,以及SSL证书和CA证书在这些过程中的作用,并通过Nginx配置实例具体说明。 第一部分:HTTPS单向认证 定义及工作原理:HTTPS单向认证是一…...
水利安全监测方案——基于RTU200的解决方案
引言: 水资源是人类赖以生存的重要基础,对于保障水利系统安全运行以及应对自然灾害起着关键作用。为了实现水利安全监测的目标,我们提出了基于RTU200的解决方案。本方案将结合RTU200的可靠性、灵活性和高效性,为您打造一个全面的…...
安卓开发学习---kotlin版---笔记(一)
Hello word 前言:上次学习安卓,学了Java开发,简单的搭了几个安卓界面。这次要学习Kotlin语言,然后开发安卓,趁着还年轻,学点新东西,坚持~ 未来的你会感谢现在努力的你~ 主要学习资料:…...
挑选在线客服系统的七大注意事项
越来越多的企业开始注重客户服务,所以在线客服系统也逐渐成为了电商企业不可或缺的一部分。然而在挑选在线客服系统的过程中,蛮多企业会遇到各种各样的问题,这就导致了最终选择的系统并不适合自己企业的需求。接下来我将提醒大家挑选在线客服…...
剧本杀小程序搭建:打造线上剧本杀新体验
剧本杀是一款以角色扮演为主的游戏,一度成为了年轻人的最喜爱的社交游戏。在剧本杀市场需求下,剧本杀规模也迅速上升。今年第一季度,剧本杀市场规模环比增长47%,市场整体消费水平逐渐呈上升趋势。 随着剧本杀的不断发展ÿ…...
机器学习实战:预测波士顿房价
前言: Hello大家好,我是Dream。 今天来学习一下机器学习中一个非常经典的案例:预测波士顿房价,在此过程中也会补充很多重要的知识点,欢迎大家一起前来探讨学习~ 一、导入数据 在这个项目中,我们利用马萨诸…...
基于个微机器人的开发
简要描述: 下载消息中的动图 请求URL: http://域名/getMsgEmoji 请求方式: POST 请求头Headers: Content-Type:application/jsonAuthorization:login接口返回 参数: 参数名必选类型说明…...
程序员学习方法
https://www.zhihu.com/question/24187324 https://www.zhihu.com/question/505750740 windows系统: 如何业余开展 Windows 系统的学习? - 知乎 wifi工作原理: WiFi的工作原理是什么? - 知乎 发...
VUE+THREE.JS 点击模型相机缓入查看模型相关信息
点击模型相机缓入查看模型相关信息 1.引入2.初始化CSS3DRenderer3.animate 加入一直执行渲染4.点击事件4.1 初始化renderer时加入监听事件4.2 触发点击事件 5. 关键代码分析5.1 移除模型5.2 创建模型上方的弹框5.3 相机缓入动画5.4 动画执行 1.引入 引入模型所要呈现的3DSprite…...
cpu 300% 爆满 内存占用不高 排查
top查询 cpu最高的PID ps -ef | grep PID 查看具体哪一个jar服务 jstack -l PID > ./jstack.log 下载/打印进程的线程栈信息 可以加信息简单分析 或进一步 查看堆内存使用情况 jmap -heap Java进程id jstack.log 信息示例 Full thread dump Java HotSpot(TM) 64-Bit Se…...
Halcon 简单的ORC 字体识别
文章目录 仿射变化识别 仿射变化 将图片进行矫正处理 dev_close_window() read_image(Image,C:/Users/Augustine/Desktop/halcon/image.png) *获取图片的大小 get_image_size(Image, Width, Height) *仿射运算获取图片的角度对图片进行矫正 *选中图片的区域 gen_rectangle1 (Re…...
12月7日作业
使用QT模仿一个登陆界面(模仿育碧Ubisoft登录界面) #include "myqq.h"MyQQ::MyQQ(QWidget *parent): QMainWindow(parent) {this->resize(880,550); //设置窗口大小this->setFixedSize(880,550); //固定窗口大小this->setStyleShee…...
【腾讯云HAI域探密】- AIGC应用助力企业降本增效之路
一、前言: 近年来,随着深度学习、大数据、人工智能、AI等技术领域的不断发展,机器学习是目前最火热的人工智能分支之一,是使用大量数据训练计算机程序,以实现智能决策、语音识别、图像处理等任务。 作者也是经过了以上…...
云原生之深入解析如何限制Kubernetes集群中文件描述符与线程数量
一、背景 linux 中为了防止进程恶意使用资源,系统使用 ulimit 来限制进程的资源使用情况(包括文件描述符,线程数,内存大小等)。同样地在容器化场景中,需要限制其系统资源的使用量。ulimit: docker 默认支持…...
Django的Auth模块
Auth模块 我们在创建好一个Django项目后执行数据库迁移命令会自动生成很多表 其中有auth_user等表 Django在启动之后就可以直接访问admin路由,需要输入用户名和密码,数据参考的就是auth_user表,并且必须是管理员才能进入 依赖于a…...
敏捷开发方法
理解: 极限编程(XP):敏捷开发的典型方法之一,是一种轻量级(敏捷)、高效,低风险、柔性、可预测的、科学的软件开发方法,它由价值观、原则、实践和行为4个部分组成。其中4大…...
vue 前端实现login页登陆 验证码
实现效果 // template <el-form :model"loginForm" :rules"fieldRules" ref"loginForm" label-position"left" label-width"0px" class"login-container"><span class"tool-bar"></sp…...
python 涉及opencv mediapipe知识,眨眼计数 供初学者参考
基本思路 我们知道正面侦测到人脸时,任意一只眼睛水平方向上的两个特征点构成水平距离,上下两个特征点构成垂直距离 当头像靠近或者远离摄像头时,垂直距离与水平距离的比值基本恒定 根据这一思路 当闭眼时 垂直距离变小 比值固定小于某一个…...
HTTP 和 HTTPS的区别
一、HTTP 1.明文传输,不安全 2.默认端口号:80 3.TCP三次握手即可 二、HTTPS 1.加密传输,更安全(在HTTP层与TCP层之间加上了SSL/TTL安全协议) SSL和TTL是在不同时期的两种叫法,含义相同。 2.默认端口号:443 3.TCP三…...
从零开始训练一个ChatGPT大模型(低资源,1B3)
macrogpt-prertrain 大模型全量预训练(1b3), 多卡deepspeed/单卡adafactor 源码地址:https://github.com/yongzhuo/MacroGPT-Pretrain.git 踩坑 1. 数据类型fp16不太行, 很容易就Nan了, 最好是fp32, tf32, 2. 单卡如果显存不够, 可以用优化器adafactor, 3. 如果…...
<6>-MySQL表的增删查改
目录 一,create(创建表) 二,retrieve(查询表) 1,select列 2,where条件 三,update(更新表) 四,delete(删除表…...
YSYX学习记录(八)
C语言,练习0: 先创建一个文件夹,我用的是物理机: 安装build-essential 练习1: 我注释掉了 #include <stdio.h> 出现下面错误 在你的文本编辑器中打开ex1文件,随机修改或删除一部分,之后…...
【磁盘】每天掌握一个Linux命令 - iostat
目录 【磁盘】每天掌握一个Linux命令 - iostat工具概述安装方式核心功能基础用法进阶操作实战案例面试题场景生产场景 注意事项 【磁盘】每天掌握一个Linux命令 - iostat 工具概述 iostat(I/O Statistics)是Linux系统下用于监视系统输入输出设备和CPU使…...
dedecms 织梦自定义表单留言增加ajax验证码功能
增加ajax功能模块,用户不点击提交按钮,只要输入框失去焦点,就会提前提示验证码是否正确。 一,模板上增加验证码 <input name"vdcode"id"vdcode" placeholder"请输入验证码" type"text&quo…...
P3 QT项目----记事本(3.8)
3.8 记事本项目总结 项目源码 1.main.cpp #include "widget.h" #include <QApplication> int main(int argc, char *argv[]) {QApplication a(argc, argv);Widget w;w.show();return a.exec(); } 2.widget.cpp #include "widget.h" #include &q…...
CocosCreator 之 JavaScript/TypeScript和Java的相互交互
引擎版本: 3.8.1 语言: JavaScript/TypeScript、C、Java 环境:Window 参考:Java原生反射机制 您好,我是鹤九日! 回顾 在上篇文章中:CocosCreator Android项目接入UnityAds 广告SDK。 我们简单讲…...
如何在网页里填写 PDF 表格?
有时候,你可能希望用户能在你的网站上填写 PDF 表单。然而,这件事并不简单,因为 PDF 并不是一种原生的网页格式。虽然浏览器可以显示 PDF 文件,但原生并不支持编辑或填写它们。更糟的是,如果你想收集表单数据ÿ…...
Android第十三次面试总结(四大 组件基础)
Activity生命周期和四大启动模式详解 一、Activity 生命周期 Activity 的生命周期由一系列回调方法组成,用于管理其创建、可见性、焦点和销毁过程。以下是核心方法及其调用时机: onCreate() 调用时机:Activity 首次创建时调用。…...
使用Matplotlib创建炫酷的3D散点图:数据可视化的新维度
文章目录 基础实现代码代码解析进阶技巧1. 自定义点的大小和颜色2. 添加图例和样式美化3. 真实数据应用示例实用技巧与注意事项完整示例(带样式)应用场景在数据科学和可视化领域,三维图形能为我们提供更丰富的数据洞察。本文将手把手教你如何使用Python的Matplotlib库创建引…...
CSS设置元素的宽度根据其内容自动调整
width: fit-content 是 CSS 中的一个属性值,用于设置元素的宽度根据其内容自动调整,确保宽度刚好容纳内容而不会超出。 效果对比 默认情况(width: auto): 块级元素(如 <div>)会占满父容器…...
