PKI - 借助Nginx 实现Https 服务端单向认证、服务端客户端双向认证
文章目录
- Openssl
- 操系统默认的CA证书的公钥位置
- Nginx Https 自签证书
- 1. 生成自签名证书和私钥
- 2. 配置 Nginx 使用 HTTPS
- 3. 重启 Nginx 服务
- 4. 直接访问
- 5. 不验证证书直接访问
- 6. 使用server.crt作为ca证书验证服务端
- 解决方法1:使用 --resolve 参数进行请求域名解析
- 解决方法2:修改客户端的 hosts 文件
- 7. curl 验证服务端时 不指定证书路径
- Nginx Https 使用CA签发证书
- 客户端使用自签证书供服务端验证
- 客户端使用 根证书 签发客户端证书 供服务端验证

Openssl
https://www.openssl.net.cn/
openssl是一个功能丰富且自包含的开源安全工具箱。
它提供的主要功能有:
- SSL协议实现(包括SSLv2、SSLv3和TLSv1)
- 大量软算法(对称/非对称/摘要)
- 大数运算
- 非对称算法密钥生成
- ASN.1编解码库
- 证书请求(PKCS10)编解码
- 数字证书编解码
- CRL编解码
- OCSP协议
- 数字证书验证
- PKCS7标准实现
- PKCS12个人数字证书格式实现等功能
openssl采用C语言作为开发语言,这使得它具有优秀的跨平台性能。openssl支持Linux、UNIX、windows、Mac等平台。openssl目前最新的版本是0.9.8e.
操系统默认的CA证书的公钥位置
centos 下 被信任的证书在此文件中
/etc/pki/t1s/certs/ca-bunde.crt

Nginx Https 自签证书
创建和配置 Nginx 使用 HTTPS 自签名证书的步骤如下:
1. 生成自签名证书和私钥

openssl genrsa -out server.key 2048
- 该命令生成一个 RSA 密钥对,并将私钥保存到
server.key文件中。参数2048指定了密钥长度为 2048 位。
openssl req -x509 -new -nodes -key server.key -subj "/CN=artisan.com" -days 10000 -out server.crt
- 这个命令生成一个自签名的 X.509 证书。解释如下:
-x509:表示生成自签名证书。-new:创建一个新的证书请求。-nodes:不加密生成的私钥。-key server.key:指定使用之前生成的私钥文件server.key。-subj "/CN=yandun.com":指定证书的主题(Subject)。在这里,/CN=yandun.com表示通用名称(Common Name)为yandun.com。-days 10000:指定证书的有效期为 10000 天。-out server.crt:将生成的证书保存到server.crt文件中。
openssl x509 -in server.crt -noout -text
- 该命令用于查看生成的证书的详细信息,包括主题、颁发者、有效期等。解释如下:
-in server.crt:指定要查看的证书文件。-noout:不打印证书内容到标准输出。-text:以文本形式显示证书内容。
这些命令可以用来生成自签名的证书并查看证书的详细信息。

Issuer 和 Subject 是同一个机构, 说明是自签证书。
CA: TRUE 说明它是一个CA签发结构。
2. 配置 Nginx 使用 HTTPS
编辑 Nginx 的配置文件(通常位于 /etc/nginx/nginx.conf 或 /etc/nginx/sites-available/default),并确保以下配置项已经添加或更新:
server {..........ss1 on;ss1_certificate /cert/server.crt;ss1_certificate_key /cert/server.key;# 暂不开启#ss1_client_certificate /cert/client.crt;#ssI_verify_client on;ss1_session_cache shared:ssL:1m;ss1_session_timeout 10m;ss1_ciphers HIGH:!aNULL:!MD5;ss1_prefer_server_ciphers on; ..........}
每个指令的含义如下:
-
ss1 on;:- 启用 SSL/TLS 加密。这表示流模块将使用 SSL/TLS 加密来保护与客户端的通信。
-
ss1_certificate /cert/server.crt;:- 指定用于 SSL/TLS 加密的服务器证书文件路径。在这里,
/cert/server.crt是服务器证书的路径。
- 指定用于 SSL/TLS 加密的服务器证书文件路径。在这里,
-
ss1_certificate_key /cert/server.key;:- 指定用于 SSL/TLS 加密的服务器私钥文件路径。在这里,
/cert/server.key是服务器私钥的路径。
- 指定用于 SSL/TLS 加密的服务器私钥文件路径。在这里,
-
#ss1_client_certificate /cert/client.crt;:- 用于指定客户端证书的文件路径。这是可选的,如果您希望服务器验证客户端的证书,则取消注释并指定客户端证书的路径。
-
#ss1_verify_client on;:- 用于指定是否验证客户端证书。取消注释并设置为
on可以启用客户端证书验证。
- 用于指定是否验证客户端证书。取消注释并设置为
-
ss1_session_cache shared:ssL:1m;:- 指定用于缓存 SSL/TLS 会话的共享内存区域名称和大小。在这里,会话缓存名称为
ssL,大小为 1MB。
- 指定用于缓存 SSL/TLS 会话的共享内存区域名称和大小。在这里,会话缓存名称为
-
ss1_session_timeout 10m;:- 指定 SSL/TLS 会话的超时时间。在这里,会话超时时间为 10 分钟。
-
ss1_ciphers HIGH:!aNULL:!MD5;:- 指定 SSL/TLS 加密算法的优先级和允许使用的加密套件。在这里,使用了
HIGH表示使用高强度加密算法,同时禁用了一些不安全的加密套件,如NULL和MD5。
- 指定 SSL/TLS 加密算法的优先级和允许使用的加密套件。在这里,使用了
-
ss1_prefer_server_ciphers on;:- 指定是否优先使用服务器端提供的加密套件。设置为
on表示优先使用服务器端提供的加密套件。
- 指定是否优先使用服务器端提供的加密套件。设置为
这些指令配置了 Nginx 流模块的 SSL/TLS 加密功能,包括了服务器证书、私钥、会话缓存等参数。
3. 重启 Nginx 服务
完成配置后,通过以下命令重启 Nginx 服务,以使更改生效:
sudo systemctl restart nginx
现在,Nginx 应该已经配置为使用自签名证书进行 HTTPS 加密通信。请确保防火墙已正确配置以允许流量通过 HTTPS 端口(默认为 443)。
4. 直接访问

我们可以看到 开启了Https以后,直接使用http的方式访问是行不通的
curl: (60) Peer's certificate issuer has been marked as not trusted by the user
More details here: http;//curl.haxx.se/docs/sslcerts.html
通过web访问 会弹出警告信息

5. 不验证证书直接访问
If you'd like to turn off curl's verification of the certificate, use
the -k (or --insecure) option.
curl https://192.168.3.103 -k
可以通过在 curl 命令中添加 -k 或 --insecure 选项来关闭 curl 对证书的验证,从而允许直接访问未经验证的 HTTPS 网站。这样做会绕过证书验证过程,可能会存在安全风险,因此建议仅在测试或特殊情况下使用。
可以使用的命令:
curl https://192.168.3.103 -k
这个命令将直接访问 https://192.168.3.103,而不会验证服务器证书的有效性。
请注意,使用 -k 选项会将连接置于不安全的状态,因为它不验证服务器证书的真实性,可能容易受到中间人攻击。因此,在生产环境中应避免使用此选项,以确保通信的安全性。
6. 使用server.crt作为ca证书验证服务端
cur https://192.168.3.103 --cacert /cert/server.crt

curl: (51) Unable to communicate securely with peer: requested domain name does not match the server's certificate.
证书绑定的域名和当前请求域名不匹配
解决方法1:使用 --resolve 参数进行请求域名解析
cur1 https://artisan.com --cacert /cert/server.crt artisan.com:443:192.168.3.103
可以使用 curl 命令的 --resolve 参数来指定域名解析,将请求的域名解析为服务器的 IP 地址。这样,即使请求的域名与服务器证书绑定的域名不匹配,也能够建立连接。
这种方法只适用于测试或特殊情况,因为它绕过了域名验证的重要步骤,存在一定的安全风险。
解决方法2:修改客户端的 hosts 文件
让客户端解析 artisan.com 为 ip 192.168.3.103
echo "192.168.3.103 artisan.com' >> /etc/hosts
将服务器的域名解析为服务器的 IP 地址,以确保请求的域名与服务器证书绑定的域名匹配。通过编辑客户端的 hosts 文件来实现,将域名解析为正确的 IP 地址。
这种方法更安全,因为它保留了域名验证的重要性,并且不会绕过任何安全检查。
7. curl 验证服务端时 不指定证书路径
cat /cert/server.crt >> /etc/pki/tls/certs/ca-bundle.crt
curl https://artisan.com
会报错,curl: (7) Failed connect to artisan.com:443; Connection refused
可以采用如下命令
curl https://artisan.com --resolve artisan.com:443:192.168.3.103
在这个命令序列中, 将服务器证书 server.crt 的内容附加到根证书存储库 /etc/pki/tls/certs/ca-bundle.crt 中,然后使用 curl 命令来访问 https://artisan.com 网站。
首先尝试将服务器证书 server.crt 的内容追加到系统的根证书存储库中,然后使用 curl 命令来访问 https://artisan.com。然而,遇到了连接被拒绝的错误。
使用 --resolve 参数来模拟 DNS 解析,将 artisan.com 解析为 IP 地址 192.168.3.103。这样做可以绕过 DNS 解析,并直接将域名与 IP 地址对应,从而解决了连接被拒绝的问题。
curl https://artisan.com --resolve artisan.com:443:192.168.3.103
这个命令中的 --resolve artisan.com:443:192.168.3.103 参数指示 curl 使用指定的 IP 地址来访问 artisan.com,而不是通过 DNS 解析。
这种方法适用于在本地测试环境中模拟特定域名与 IP 地址的关联,但在生产环境中应避免使用,因为它绕过了域名解析的安全检查。
Nginx Https 使用CA签发证书
PKI - 借助Nginx 实现Https_使用CA签发证书
客户端使用自签证书供服务端验证
PKI - 借助Nginx实现_客户端使用自签证书供服务端验证
客户端使用 根证书 签发客户端证书 供服务端验证
PKI - 借助Nginx实现_客户端使用CA根证书签发客户端证书

相关文章:
PKI - 借助Nginx 实现Https 服务端单向认证、服务端客户端双向认证
文章目录 Openssl操系统默认的CA证书的公钥位置Nginx Https 自签证书1. 生成自签名证书和私钥2. 配置 Nginx 使用 HTTPS3. 重启 Nginx 服务4. 直接访问5. 不验证证书直接访问6. 使用server.crt作为ca证书验证服务端解决方法1:使用 --resolve 参数进行请求域名解析解…...
WebSocket原理详解
目录 1.引言 1.1.使用HTTP不断轮询 1.2.长轮询 2.websocket 2.1.概述 2.2.websocket建立过程 2.3.抓包分析 2.4.websocket的消息格式 3.使用场景 4.总结 1.引言 平时我们打开网页,比如购物网站某宝。都是点一下列表商品,跳转一下网页就到了商品…...
在面试中如何回复擅长vue还是react
当面试官问及这个问题的时候,我们需要思考面试官是否是在乎你是掌握vue还是react吗??? 在大前端的一个环境下,当前又有AI人工智能的加持辅助,我们是不是要去思考企业在进行前端岗位人员需求的时候…...
使用Vue.js输出一个hello world
导入vue.js <script src"https://cdn.jsdelivr.net/npm/vue2/dist/vue.js"></script> 创建一个标签 <div id"app">{{message}}</div> 接管标签内容,创建vue实例 <script type"text/javascript">va…...
15 ABC基于状态机的按键消抖原理与状态转移图
1. 基于状态机的按键消抖 1.1 什么是按键? 从按键结构图10-1可知,按键按下时,接点(端子)与导线接通,松开时,由于弹簧的反作用力,接点(端子)与导线断开。 从…...
λ-矩阵的多项式展开
原文链接 定义. 对于 m n m \times n mn 的 λ \lambda λ-矩阵 A ( λ ) [ a 11 ( λ ) . . . a 1 n ( λ ) ⋮ ⋮ a m 1 ( λ ) . . . a m n ( λ ) ] \mathbf{A}(\lambda)\begin{bmatrix} a_{11}(\lambda) & ... & a_{1n}(\lambda)\\ \vdots & & \vdo…...
如何在PDF 文件中删除页面?
查看不同的工具以及解释如何在 Windows、Android、macOS 和 iOS 上从 PDF 删除页面的步骤: PDF 是最难处理的文件格式之一。曾经有一段时间,除了阅读之外,无法用 PDF 做任何事情。但是今天,有许多应用程序和工具可以让您用它们做…...
蓝桥杯官网填空题(质数拆分)
问题描述 将 2022 拆分成不同的质数的和,请问最多拆分成几个? 答案提交 本题为一道结果填空的题,只需要算出结果后,在代码中使用输出语句将结果输出即可。 运行限制 import java.util.Scanner;public class Main {static int …...
【数据结构】二叉树的顺序结构及链式结构
目录 1.树的概念及结构 1.1树的概念 1.2树的相关概念 编辑 1.3树的表示 1.4树在实际中的运用(表示文件系统的目录树结构) 2.二叉树概念及结构 2.1二叉树的概念 2.2现实中的二叉树 编辑 2.3特殊的二叉树 2.4二叉树的性质 2.5二叉树的存储结…...
海外IP代理:解锁网络边界的实战利器
文章目录 引言:正文:一、Roxlabs全球IP代理服务概览特点:覆盖范围:住宅IP真实性:性价比:在网络数据采集中的重要性: 二、实战应用案例一:跨境电商竞品分析步骤介绍:代码示…...
如何写好一个简历
如何编写求职简历 论Java程序员求职中简历的重要性 好简历的作用 在求职过程中,一份好的简历是非常重要的,它甚至可以直接决定能否被面试官认可。一份出色或者说是成功的个人简历,最根本的作用是能让看这份简历的人产生一定要见你的强烈愿…...
【AutoML】AutoKeras 进行 RNN 循环神经网络训练
由于最近这些天都在人工审查之前的哪些问答数据,所以迟迟都没有更新 AutoKeras 的训练结果。现在那部分数据都已经整理好了,20w 的数据最后能够使用的高质量数据只剩下 2k。这 2k 的数据已经经过数据校验并且对部分问题的提问方式和答案内容进行了不改变…...
H12-821_74
74.在某路由器上查看LSP,看到如下结果: A.发送目标地址为3.3.3.3的数据包时,打上标签1026,然后发送。 B.发送目标地址为4.4.4.4的数据包时,不打标签直接发送。 C.当路由器收到标签为1024的数据包,将把标签…...
有趣儿的组件(HTML/CSS)
分享几个炫酷的组件,起飞~~ 评论区留爪,继续分享哦~ 文章目录 1. 按钮2. 输入3. 工具提示4. 单选按钮5. 加载中 1. 按钮 HTML: <button id"btn">Button</button>CSS: button {padding: 10px 20px;text-tr…...
1、深度学习环境配置相关下载地址整理(cuda、cudnn、torch、miniconda、pycharm、torchvision等)
一、深度学习环境配置相关: 1、cuda:https://developer.nvidia.com/cuda-toolkit-archive 2、cudnn:https://developer.nvidia.com/rdp/cudnn-archive 4、miniconda:https://mirrors.tuna.tsinghua.edu.cn/anaconda/miniconda/?C…...
Spring Boot3自定义异常及全局异常捕获
⛰️个人主页: 蒾酒 🔥系列专栏:《spring boot实战》 🌊山高路远,行路漫漫,终有归途。 目录 前置条件 目的 主要步骤 定义自定义异常类 创建全局异常处理器 手动抛出自定义异常 前置条件 已经初始化好一个…...
【python】网络爬虫与信息提取--Beautiful Soup库
Beautiful Soup网站:https://www.crummy.com/software/BeautifulSoup/ 作用:它能够对HTML.xml格式进行解析,并且提取其中的相关信息。它可以对我们提供的任何格式进行相关的爬取,并且可以进行树形解析。 使用原理:它能…...
谷歌浏览器,如何将常用打开的网站创建快捷方式到电脑桌面?
打开谷歌浏览器,打开想要创建的快捷方式的网页 点击浏览器右上角的三个点: 点击选择【更多工具】 选择【创建快捷方式】 然后,在浏览器上方会弹出一个框,让命名此创建的快捷方式的名称 命名好之后,再点击【创…...
产品经理面试题解析:业务架构是通往成功的关键吗?
大家好,我是小米!今天我要和大家聊的是产品经理面试中的一个热门话题:“业务架构”!相信不少小伙伴在准备面试的时候都会遇到这个问题,究竟什么是业务架构?它又与产品经理的工作有着怎样的关系呢࿱…...
【蓝桥杯】灭鼠先锋
一.题目描述 二.解题思路 博弈论: 只能转移到必胜态的,均为必败态。 可以转移到必败态的,均为必胜肽。 最优的策略是,下一步一定是必败态。 #include<iostream> #include<map> using namespace std;map<string,bo…...
Vue3 + Vitest 浏览器测试 从零开发指南
一、我们要做什么? 写一个 Vue3 计数器组件(显示名字 点按钮数字1)写 Vitest 自动化测试(让电脑自动验证功能是否正确)全程不用弹浏览器,在终端就能看到测试结果 ✅二、准备工作(只需要 1 个软…...
STM32F103 平行替代方案全面分析(2026 年最新)
STM32F103 作为全球最经典的 Cortex-M3 MCU,凭借成熟的生态和广泛的应用基础统治了中低端嵌入式市场十余年。但近年来受国际供应链波动影响,其价格持续走高(2026 年 5 月 STM32F103C8T6 批量价约 8-12 元,部分型号甚至超过 20 元&…...
5G手机省电的秘密:一文搞懂NR C-DRX中的Inactivity Timer(附工作流程图解)
5G手机续航优化的核心技术:深入解析C-DRX中的Inactivity Timer机制 当你在咖啡厅刷社交媒体时,是否注意到手机屏幕熄灭后仍能即时收到消息?这种"随叫随到"的体验背后,是5G NR中一项精妙的省电技术——C-DRX(…...
告别‘偏科’模型:用CAST双流架构搞定视频动作识别,兼顾时空理解
时空双流协同:CAST架构如何重塑视频动作识别的平衡之道 视频动作识别正面临一个关键瓶颈——现有模型往往在时空理解上"偏科"。就像人类大脑需要左右半球协同工作才能完整理解世界一样,理想的视频理解模型也需要同时具备敏锐的空间感知和精准的…...
Linux 软件包管理(含上机实例)
文章目录软件包管理一、知识要点1.rpm作用2.安装问题1:文件已被安装问题2:文件冲突问题3:未解决依赖关系3.卸载rpm包4.升级rpm包5.查询已安装的软件包的数据库6.验证软件包完整性二、YUM的使用yum简述yum命令集三、上机任务6 软件包管理 一、…...
Augmentoolkit事实数据生成管道:打造精准问答AI的终极方法
Augmentoolkit事实数据生成管道:打造精准问答AI的终极方法 【免费下载链接】augmentoolkit Create Custom LLMs 项目地址: https://gitcode.com/gh_mirrors/au/augmentoolkit 想要创建专属的领域专家AI吗?Augmentoolkit事实数据生成管道为您提供了…...
别再死记硬背ELMo、GPT、BERT的区别了!一张图带你搞懂它们的核心差异与适用场景
一图胜千言:ELMo、GPT、BERT技术差异与实战选型指南 刚接触NLP时,我也曾被各种预训练模型绕得头晕眼花——它们看起来都能处理文本,但面试官一问"为什么用BERT不用GPT"就瞬间语塞。直到我把这些模型拆解成汽车零件,才真…...
聚焦新型有效成分,守护爱宠健康
养宠过程中,用药安全是守护宠物健康的核心关键。多数养宠人选药时,常只关注品牌、价格或口碑,却忽略了药物有效成分这一核心根本。随着宠物医药技术迭代升级,多款新型专用药用成分落地应用,凭借精准、安全、低耐药的优…...
(最新版)GitGitHub实操图文详解教程(10)—SSH
版权声明 本文原创作者:谷哥的小弟 作者博客地址:http://blog.csdn.net/lfdfhl 1. 应用场景 前面几课已经完成了本地Git基础操作:先通过git init初始化仓库,再用git status查看状态,用git add把修改加入暂存区,用git commit创建本地提交,最后用git log查看提交历史。到…...
告别Chrome依赖:在Edge上完美复刻XPath Helper,打造你的爬虫元素定位工作流
告别Chrome依赖:在Edge上完美复刻XPath Helper,打造你的爬虫元素定位工作流 浏览器工具链的迁移从来不是简单的插件替换,而是一场关于开发习惯与效率的深度重构。当微软Edge凭借Chromium内核的稳定性和内存优化逐渐成为技术工作者的新宠&…...
