nginx配置证书和私钥进行SSL通信验证
文章目录
- 一、背景
- 1.1 秘钥和证书是两个东西吗?
- 1.2 介绍下nginx配置文件中参数ssl_certificate和ssl_certificate_key
- 1.3介绍下nginx支持的证书类型
- 1.4 目前nginx支持哪种证书格式?
- 1.5 nginx修改配置文件目前方式也会有所不同
- 1.6 介绍下不通格式的证书哪些可以包含私钥,哪些不能?
- 1.7 创建私钥、证书请求、证书的命令
- 1.8 如何区分证书中是否包含私钥信息
- 1.9 多文件内容合并文件命令操作在windows和linux下不同
- 1.10 不同格式文件打开查看内容方式
- 二、具体实施操作
- 2.1 针对方式一中nginx分别指定私钥和证书地址
- 2.2 针对方式二中nginx私钥和证书统一指向证书地址
- 2.3 命令中部分参数介绍
- 三、重启nginx验证生效
一、背景
正常项目的私钥和服务端证书会放在项目中或者外挂到linux服务器某个路径下,现在的需求是客户手动创建的新的证书,替换后项目证书仍然生效,且功能能正常使用。
目前我司采用nginx配置SSL通信验证,具体配置在nginx安装路径下的nginx.conf文件,最终修改的地方是红框这里。
1.1 秘钥和证书是两个东西吗?
是的,密钥(Key)和证书(Certificate)是两个不同的概念,但它们在安全通信中通常是相关联的。密钥(Key):
密钥是用于加密和解密数据的一种数学算法。
在SSL/TLS通信中,有两种主要类型的密钥:公钥和私钥。
私钥(Private Key)用于对数据进行加密和对由公钥加密的数据进行解密。私钥必须保密,只有持有私钥的一方才能解密数据。
公钥(Public Key)用于对数据进行解密和对由私钥加密的数据进行加密。公钥通常公开发布,用于与其他人安全地通信。证书(Certificate):
证书是由数字证书颁发机构(CA)签发的一种电子文件,用于验证服务器或客户端的身份。
证书包含了一些重要的信息,如公钥、颁发者、有效期等。
证书可以用来确保通信双方的身份,防止中间人攻击等安全威胁。
在SSL/TLS通信中,密钥和证书通常是配对使用的。服务器会持有私钥,并将其与公钥证书一起使用以向客户端证明其身份。客户端则使用服务器的公钥证书来验证服务器的身份,并用于加密通信。
1.2 介绍下nginx配置文件中参数ssl_certificate和ssl_certificate_key
答案:ssl_certificate指向的是“服务端证书”相对路径,而ssl_certificate_key指向的是“私钥”相对路径。
1.3介绍下nginx支持的证书类型
目前市面上数字证书可以以多种不同的后缀格式保存,常见的包括:
-
PEM(Privacy Enhanced Mail)
:PEM 格式是一种常见的 ASCII 编码格式,通常用于存储证书、密钥和其他相关数据。PEM 格式的文件通常以 .pem、.cer、.crt 或 .key 结尾。 -
DER(Distinguished Encoding Rules)
:DER 格式是一种二进制编码格式,通常用于表示 X.509 数字证书。DER 格式的文件通常以 .der 或 .cer 结尾。 -
PKCS#12
:PKCS#12 是一种可将证书和私钥打包成单个加密文件的格式。PKCS#12 格式的文件通常以 .p12 或 .pfx 结尾。 -
JKS(Java KeyStore)
:JKS 格式是 Java 中用于存储密钥和证书的专有格式。JKS 格式的文件通常以 .jks 结尾。 -
PFX(Personal Information Exchange)
:PFX 格式与 PKCS#12 格式类似,用于将证书和私钥打包成单个文件,通常以 .pfx 结尾。 -
PKCS#7 / P7B
:PKCS#7 或 P7B 格式通常用于存储证书链,它们以二进制格式存储,并可以包含多个证书。PKCS#7/P7B 格式的文件通常以 .p7b 或 .p7c 结尾。
这些是常见的数字证书后缀格式,每种格式都有其特定的用途和兼容性。在使用数字证书时,需要根据具体情况选择合适的格式。
1.4 目前nginx支持哪种证书格式?
目前nginx支持的证书格式是.crt或者.pem格式的证书(也就是ssl_certificate后面配置的证书格式),如果是其他类型证书需要手动转换成.crt或者.pem格式。
1.5 nginx修改配置文件目前方式也会有所不同
方式1(最常见的方式)
,ssl_certificate服务端配置证书,ssl_certificate_key配置私钥(这里差别在证书,无论证书中是否包含私钥信息都可以这么配置生效)
server_name 10.161.29.209;ssl_certificate CA/server.crt;ssl_certificate_key CA/server_pkcs8.key;
方式2,ssl_certificate和ssl_certificate_key统一指向服务端配置证书
,详情请看nginx官网文档和图片(这里就要求:证书必须包含私钥,否则重启nginx会失败,会报错找不到或加载不到私钥信息)
nginx官网文档 → https://nginx.org/en/docs/http/configuring_https_servers.html
1.6 介绍下不通格式的证书哪些可以包含私钥,哪些不能?
网上搜到的图片长这样
接下来说下我自己测试后的理解,可能会和上面不同,也可能相同,我没做过对比
.crt格式
:包含公钥、证书信息;可包含或者不包含私钥.pem格式
:包含公钥、证书信息;可包含或者不包含私钥.der格式
:包含公钥、证书信息;默认不包含私钥.p12或者pfx格式
:包含公钥、证书信息、可包含或者不包含私钥其他格式尚未验证
1.7 创建私钥、证书请求、证书的命令
首先需要安装openSSL,使用它可以快速创建私钥、证书请求、证书。
举例创建自签名证书流程:
1. 要创建自签名证书
,你可以使用 OpenSSL 工具。以下是使用 OpenSSL 创建自签名证书的基本步骤:
2. 安装 OpenSSL
:首先,确保你的系统上已经安装了 OpenSSL 工具。你可以从 OpenSSL 官方网站或使用包管理器进行安装。
openssl genpkey -algorithm RSA -out private.key
这将生成一个名为 private.key 的私钥文件。
3. 生成证书请求
:接下来,使用私钥生成一个证书请求 (CSR) 文件,其中包含了公钥和其他相关信息。执行以下命令生成 CSR 文件:
openssl req -new -key private.key -out csr.csr
在此过程中,你将被要求提供一些相关信息,如国家/地区、组织名称、通用名称 (域名) 等。请根据实际情况填写这些信息。
4. 生成自签名证书
:使用以下命令生成自签名证书:
openssl x509 -req -in csr.csr -signkey private.key -out certificate.crt
这将使用私钥和证书请求生成一个自签名证书文件,名为 certificate.crt。
5. 使用证书
:现在你已经生成了自签名证书 certificate.crt,可以将其用于服务器或应用程序的 SSL/TLS 配置中。具体步骤取决于你使用的服务器软件或编程语言。
请注意,自签名证书不会被公共信任的根证书颁发机构所信任,因此在使用自签名证书时,浏览器或客户端可能会显示警告。自签名证书更适合用于测试环境或内部使用,而不是用于公共生产环境。
另外,请确保妥善保管私钥文件和证书文件,以防止未经授权的访问和潜在的安全风险。
1.8 如何区分证书中是否包含私钥信息
举例说明:
我拿两个证书文件,用记事本打开看效果,如图1中“-----BEGIN CERTIFICATE-----”这个开头的就是公钥信息
,如图2中“-----BEGIN PRIVATE KEY-----”包含的就是私钥信息
。最简单的鉴别方式就是用记事本打开看区别,当然有的格式是二进制编码打开乱码,这时候就需要去服务器指定路径下使用命令去打开证书文件才能看到具体内容区别。
1.9 多文件内容合并文件命令操作在windows和linux下不同
- 在 Windows 上使用
type
命令:
type certificate.pem server_pkcs8.key > certificate_with_key.pem
这个命令会将 certificate.pem 文件和 server_pkcs8.key 文件的内容连接到一个新文件 certificate_with_key.pem 中。
- 在类 Unix 系统(如 Linux 或 macOS)上使用
cat
命令:
cat certificate.pem server_pkcs8.key > certificate_with_key.pem
这个命令也会将 certificate.pem 文件和 server_pkcs8.key 文件的内容连接到一个新文件 certificate_with_key.pem 中。
请确保在命令中替换 certificate.pem 和 server_pkcs8.key 为您实际的证书和私钥文件路径和名称。
这样生成的 certificate_with_key.pem 文件将包含证书和私钥信息。如果您还有其他问题或需要进一步的帮助,请告诉我。
1.10 不同格式文件打开查看内容方式
server_pkcs8.key私钥
,可直接记事本打开
server.csr证书请求文件
,可直接记事本打开
certificate.crt格式证书
,可直接记事本打开
certificate.pem格式证书
,可直接记事本打开
certificate.der格式证书
,无法直接记事本打开会乱码,需要在服务器使用命令打开
命令:
openssl x509 -inform DER -in certificate.der -text
certificate.p12格式证书
,无法直接记事本打开会乱码,需要在服务器使用命令打开
命令:
openssl pkcs12 -info -in certificate.p12
certificate.pfx格式证书跟.p12同理
,无法直接记事本打开会乱码,需要在服务器使用命令打开
命令:
openssl pkcs12 -info -in certificate.pfx
二、具体实施操作
2.1 针对方式一中nginx分别指定私钥和证书地址
创建不带私钥信息的.crt格式的证书名
,命令:
openssl x509 -req -in server.csr -signkey server_pkcs8.key -out certificate.crt -days 7200
创建不带私钥信息的.pem格式的证书名
,命令:
openssl x509 -req -in server.csr -signkey server_pkcs8.key -out certificate.pem -days 7200 -outform PEM
创建不带私钥信息的.der格式的证书名
,命令:
openssl x509 -req -in server.csr -signkey server_pkcs8.key -out certificate.der -days 7200 -outform DER
2.2 针对方式二中nginx私钥和证书统一指向证书地址
创建带私钥信息的.crt格式的证书名
,(思路:将原crt不带私钥的证书文件和私钥合并为一个新文件,其中“certificate.crt”代表你原crt文件,“server_pkcs8.key”代表私钥,“certificate_with_key.crt”代表合并后的文件),命令:
openssl x509 -req -in server.csr -signkey server_pkcs8.key -out certificate.crt -days 7200
cat certificate.crt server_pkcs8.key > certificate_with_key.crt
创建带私钥信息的.pem格式的证书名
(思路:crt格式、pem格式、der格式都采用合并文件方式生成新文件),命令:
openssl x509 -req -in server.csr -signkey server_pkcs8.key -out certificate.pem -days 7200 -outform PEM
cat certificate.pem server_pkcs8.key > certificate_with_key.pem
创建带私钥信息的.der格式的证书名
(思路:crt格式、pem格式、der格式都采用合并文件方式生成新文件),命令:
openssl x509 -req -in server.csr -signkey server_pkcs8.key -out certificate.der -days 7200 -outform DER
cat certificate.der server_pkcs8.key > certificate_with_key.pem
创建带私钥信息的.p12格式的证书名
(思路:它跟crt\pem\der格式不同,他采用生成.p12文件后,再转换成pem或者crt格式),命令:
openssl pkcs12 -export -out certificate.p12 -inkey server_pkcs8.key -in certificate.crt
openssl pkcs12 -in certificate.p12 -out p12TransformPemPri.pem -nodes
或者
openssl pkcs12 -in certificate.p12 -out p12TransformPemPri.crt -nodes
创建带私钥信息的.pfx格式的证书名
(思路:跟创建.p12相同),命令:
openssl pkcs12 -export -out certificate.pfx -inkey server_pkcs8.key -in certificate.crt
openssl pkcs12 -in certificate.pfx -out pfxTransformPem.pem -nodes
或者
openssl pkcs12 -in certificate.pfx -out pfxTransformPem.crt -nodes
2.3 命令中部分参数介绍
-req
:生成证书请求(CSR)。-in
:指定输入文件或数据。-signkey
:使用指定的私钥进行签名。-out
:指定输出文件。-outform
:指定输出格式。-inform
:指定输入格式。pkcs12 -export
:将证书和私钥打包成 PKCS #12 格式。-nokeys
:在输出中不包括私钥。-CAcreateserial
:在生成自签名证书时创建一个序列号文件。-text
:显示证书或 CSR 文件的文本信息。
三、重启nginx验证生效
进入nginx目录
cd /home/ems/3rdparty/nginx/
验证nginx.conf 修改是否正确
sbin/nginx -t
如果出现 以下内容,nginx.conf即是修改正确
nginx: the configuration file /home/ems/3rdparty/nginx/nginx.conf syntax is ok
nginx: configuration file /home/ems/3rdparty/nginx/nginx.conf test is successful
重启nginx ,等候30s 访问新加的域名即可。
sbin/nginx -s reload
相关文章:

nginx配置证书和私钥进行SSL通信验证
文章目录 一、背景1.1 秘钥和证书是两个东西吗?1.2 介绍下nginx配置文件中参数ssl_certificate和ssl_certificate_key1.3介绍下nginx支持的证书类型1.4 目前nginx支持哪种证书格式?1.5 nginx修改配置文件目前方式也会有所不同1.6 介绍下不通格式的证书哪…...

【面试题】微博、百度等大厂的排行榜如何实现?
背景 现如今每个互联网平台都会提供一个排行版的功能,供人们预览最新最有热度的一些消息,比如百度: 再比如微博: 我们要知道,这些互联网平台每天产生的数据是非常大,如果我们使用MySQL的话,db实…...

com.intellij.diagnostic.PluginException 问题
关于作者:CSDN内容合伙人、技术专家, 从零开始做日活千万级APP。 专注于分享各领域原创系列文章 ,擅长java后端、移动开发、商业变现、人工智能等,希望大家多多支持。 未经允许不得转载 目录 一、导读二、 推荐阅读 一、导读 遇到…...

Altair® (澳汰尔)Inspire™ Render —— 强大的 3D 渲染和动画工具
Inspire Render 是一种全新 3D 渲染和动画工具,可供创新设计师、建筑师和数字艺术家以前所未有的速度快速制作精美的产品演示。 借助基于物理特性的内置高品质全局照明渲染引擎 Thea Render,可以快速创建、修改和拖放各种材质并添加照明环境,…...

虚幻引擎启动报错记录
0x00007FFEF0C8917C (UnrealEditor-CoreUObject.dll)处(位于 UnrealEditor.exe 中)引发的异常: 0xC0000005: 写入位置 0x0000000000000030 时发生访问冲突。 解决办法:首先查看堆栈信息,我的项目启动是因为默认场景编译不过,进到编辑器配置文…...

最祥解决python 将Dataframe格式数据上传数据库所碰到的问题
碰到的问题 上传Datafrane格式的数据到数据库 会碰见很多错误 举几个很普遍遇到的问题(主要以SqlServer举例) 这里解释下 将截断字符串或二进制数据 这个是字符长度超过数据库设置的长度 然后还有字符转int失败 或者字符串转换日期/或时间失败 这个是碰到的需要解决的最多的问…...

【汇编语言实战】统计个数
已知10个分布在0至100内的正整数,统计大于等于60的数的个数和小于60的数的个数 C语言描述该程序流程: #include <stdio.h> int main() {int arr1[]{11,33,73,52,93,84,67,56,64,75};int num10;for(int i1;i<10;i){if(arr1[i]>60){num1;}}p…...
SQLite数据库概述及在Java中的应用
## 什么是SQLite数据库? SQLite是一种轻量级的数据库管理系统,它不需要一个独立的服务器进程或操作系统的运行,而是将整个数据库,包括定义、表、索引以及数据本身,全部存储在一个独立的磁盘文件中。SQLite的设计理念是…...

嵌入式单片机补光灯项目操作实现
1.【实验目的】 用于直播效果的补光 2.【实验原理】 原理框架图2.各部分原理及主要功能 1.充电和供电:采用5V2A tepy_c接口充电,3.7V锂电池供电, 2.功能:产品主要是用于直播或拍照时的补光。分为三个模式:白光/暧光&#x...

【3GPP】【核心网】核心网/蜂窝网络重点知识面试题二(超详细)
1. 欢迎大家订阅和关注,3GPP通信协议精讲(2G/3G/4G/5G/IMS)知识点,专栏会持续更新中.....敬请期待! 目录 1. 对于主要的LTE核心网接口,给出运行在该接口上数据的协议栈,并给出协议特征 2. 通常…...

R语言记录过程
如何使用这个函数as.peakData 函数构造过程 出现问题是缺少函数的问题 up不告诉我,这里是代表c,h,o的值,你从里面获取把值,设置成c,h,o就可以了 现在开始测试参数 第一次 startRow : 开始查找数据的第一行。不管startRow的值是多少ÿ…...

【leetcode面试经典150题】36. 旋转图像(C++)
【leetcode面试经典150题】专栏系列将为准备暑期实习生以及秋招的同学们提高在面试时的经典面试算法题的思路和想法。本专栏将以一题多解和精简算法思路为主,题解使用C语言。(若有使用其他语言的同学也可了解题解思路,本质上语法内容一致&…...
AOP 面向切面编程 入门练习
编写过程 添加依赖 <project xmlns"http://maven.apache.org/POM/4.0.0" xmlns:xsi"http://www.w3.org/2001/XMLSchema-instance"xsi:schemaLocation"http://maven.apache.org/POM/4.0.0 http://maven.apache.org/maven-v4_0_0.xsd"><…...

【Qt】:对话框(一)
对话框 一.基本的对话框二.自定义对话框三.通过图形化界面自定义对话框四.关于对话框mode 对话框是GUI程序中不可或缺的组成部分。一些不适合在主窗口实现的功能组件可以设置在对话框中。对话框通常是一个顶层窗口,出现在程序最上层,用于实现短期任务或者…...
数据结构与算法 — 贪心算法
数据结构与算法 数据结构与算法是计算机科学中的两个核心概念,它们在软件开发和问题解决中起着至关重要的作用。 数据结构 数据结构是计算机中存储、组织和管理数据的方式,它能够帮助我们高效地访问和修改数据。不同的数据结构适用于不同类型的应用场…...

python如何连接openGauss及django相关配置
前言 网络上很多类似教程,但是有可能不适用。这里给出官网的教程当作参考网络上的方案 安装psycopg2包。 pip install psycopg2 -i https://pypi.tuna.tsinghua.edu.cn/simple 安装完成后,导入包即可使用import psycopg2# Connect to your postgres DB…...
开箱子的游戏能做吗?
类似寻道大千、咸鱼之王、无名之辈、疯狂骑士团这种类型的游戏,大家应该都知道吧,目前非常受欢迎. 这类游戏注重玩家的成长感和探索体验,玩家在进入游戏后,就能够直接开启宝箱获得各种装备,装备的品质越好、级别越高,能为角色带来的属性加成…...

一、Spring基础 --- 基础内容(二) (咕P4)
一、IOC容器 1.1 基础 1.1.1 容器 1、Spring框架的主要功能是通过其核心容器来实现的。2、Spring容器是生成Bean的工厂,它负责创建Bean的实例,并管理其生命周期。所有的组件都被当成Bean处理,例如数据源、Hibernate的SessionFactory、事务管…...
uview2 表单Form校验validate不生效处理方法
先贴官网实例: <template><view class""><u-form :model"form" ref"uForm"><u-form-item label"姓名" prop"name"><u-input v-model"form.name" /></u-form-item&g…...
给已存在的docker容器修改端口映射
1、systemctl stop docker 2、find / -name hostconfig.json 3、cd * 4、vim hostconfig.json 5、找到“PortBindings”字段,如下所示: "PortBindings":{"80/tcp": [{ //容器内端口"HostIp": "","…...
Vim 调用外部命令学习笔记
Vim 外部命令集成完全指南 文章目录 Vim 外部命令集成完全指南核心概念理解命令语法解析语法对比 常用外部命令详解文本排序与去重文本筛选与搜索高级 grep 搜索技巧文本替换与编辑字符处理高级文本处理编程语言处理其他实用命令 范围操作示例指定行范围处理复合命令示例 实用技…...

【大模型RAG】拍照搜题技术架构速览:三层管道、两级检索、兜底大模型
摘要 拍照搜题系统采用“三层管道(多模态 OCR → 语义检索 → 答案渲染)、两级检索(倒排 BM25 向量 HNSW)并以大语言模型兜底”的整体框架: 多模态 OCR 层 将题目图片经过超分、去噪、倾斜校正后,分别用…...

铭豹扩展坞 USB转网口 突然无法识别解决方法
当 USB 转网口扩展坞在一台笔记本上无法识别,但在其他电脑上正常工作时,问题通常出在笔记本自身或其与扩展坞的兼容性上。以下是系统化的定位思路和排查步骤,帮助你快速找到故障原因: 背景: 一个M-pard(铭豹)扩展坞的网卡突然无法识别了,扩展出来的三个USB接口正常。…...

XCTF-web-easyupload
试了试php,php7,pht,phtml等,都没有用 尝试.user.ini 抓包修改将.user.ini修改为jpg图片 在上传一个123.jpg 用蚁剑连接,得到flag...

8k长序列建模,蛋白质语言模型Prot42仅利用目标蛋白序列即可生成高亲和力结合剂
蛋白质结合剂(如抗体、抑制肽)在疾病诊断、成像分析及靶向药物递送等关键场景中发挥着不可替代的作用。传统上,高特异性蛋白质结合剂的开发高度依赖噬菌体展示、定向进化等实验技术,但这类方法普遍面临资源消耗巨大、研发周期冗长…...
鸿蒙中用HarmonyOS SDK应用服务 HarmonyOS5开发一个医院挂号小程序
一、开发准备 环境搭建: 安装DevEco Studio 3.0或更高版本配置HarmonyOS SDK申请开发者账号 项目创建: File > New > Create Project > Application (选择"Empty Ability") 二、核心功能实现 1. 医院科室展示 /…...
基于数字孪生的水厂可视化平台建设:架构与实践
分享大纲: 1、数字孪生水厂可视化平台建设背景 2、数字孪生水厂可视化平台建设架构 3、数字孪生水厂可视化平台建设成效 近几年,数字孪生水厂的建设开展的如火如荼。作为提升水厂管理效率、优化资源的调度手段,基于数字孪生的水厂可视化平台的…...

Keil 中设置 STM32 Flash 和 RAM 地址详解
文章目录 Keil 中设置 STM32 Flash 和 RAM 地址详解一、Flash 和 RAM 配置界面(Target 选项卡)1. IROM1(用于配置 Flash)2. IRAM1(用于配置 RAM)二、链接器设置界面(Linker 选项卡)1. 勾选“Use Memory Layout from Target Dialog”2. 查看链接器参数(如果没有勾选上面…...

ElasticSearch搜索引擎之倒排索引及其底层算法
文章目录 一、搜索引擎1、什么是搜索引擎?2、搜索引擎的分类3、常用的搜索引擎4、搜索引擎的特点二、倒排索引1、简介2、为什么倒排索引不用B+树1.创建时间长,文件大。2.其次,树深,IO次数可怕。3.索引可能会失效。4.精准度差。三. 倒排索引四、算法1、Term Index的算法2、 …...

【OSG学习笔记】Day 16: 骨骼动画与蒙皮(osgAnimation)
骨骼动画基础 骨骼动画是 3D 计算机图形中常用的技术,它通过以下两个主要组件实现角色动画。 骨骼系统 (Skeleton):由层级结构的骨头组成,类似于人体骨骼蒙皮 (Mesh Skinning):将模型网格顶点绑定到骨骼上,使骨骼移动…...