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私钥和证书统一指向证书地址
  • 三、重启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

在这里插入图片描述

如图2

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

三、重启nginx验证生效

  1. 进入nginx目录
cd /home/ems/3rdparty/nginx/
  1. 验证nginx.conf 修改是否正确
sbin/nginx -t
  1. 如果出现 以下内容,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
  1. 重启nginx ,等候30s 访问新加的域名即可。
sbin/nginx -s reload

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

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

【DM8】序列

创建序列 图形化界面创建 DDL CREATE SEQUENCE "TEST"."S1" INCREMENT BY 1 START WITH 1 MAXVALUE 100 MINVALUE 1;参数&#xff1a; INCREMENT BY < 增量值 >| START WITH < 初值 >| MAXVALUE < 最大值 >| MINVALUE < 最小值…

Proxmox VE qm 方式一键创建Windows虚拟机

前言 实现qm 方式一键创建Windows虚拟机&#xff0c;提高效率。 qm 一键创建Windows虚拟机 以下实现在线下载镜像&#xff0c;创建虚拟机&#xff0c;安装系统需要自己手动安装哦&#xff0c;如果想实现全自动安装系统&#xff0c;建议部署自己的内网pxe server 系统参考各参…

Utilize webcam to capture photo with camera

1. Official Guide& my github Official course my github 2. Overcome Webcam js Error in Chrome: Could not access webcam link 直接把代码拷贝到本机的下述目录下 To ignore Chrome’s secure origin policy, follow these steps. Navigate to chrome://flags/#un…

【前端捉鬼记】使用nvm切换node版本后再用node -v查看仍然是原来的版本

今天遇到一个诡异的问题&#xff0c;使用nvm切换node版本&#xff0c;明明提示已经切换成功&#xff0c;可是再次查看node版本还是之前的&#xff01; 尝试了很多办法&#xff0c;比如重新打开一个cmd窗口、切换前执行nvm install version都没成功&#xff0c;直到找到这篇文章…

【计算机毕业设计】企业仓储管理系统——后附源码

&#x1f389;**欢迎来到我的技术世界&#xff01;**&#x1f389; &#x1f4d8; 博主小档案&#xff1a; 一名来自世界500强的资深程序媛&#xff0c;毕业于国内知名985高校。 &#x1f527; 技术专长&#xff1a; 在深度学习任务中展现出卓越的能力&#xff0c;包括但不限于…

【算法】双指针算法

个人主页 &#xff1a; zxctscl 如有转载请先通知 题目 1. 283. 移动零1.1 分析1.2 代码 2. 1089. 复写零2.1 分析2.2 代码 3. 202. 快乐数3.1 分析3.2 代码 4. 11. 盛最多水的容器4.1 分析4.2 代码 5. LCR 179. 查找总价格为目标值的两个商品5.1 分析5.2 代码 6. 15. 三数之和…

【攻防世界】web2(逆向解密)

进入题目环境&#xff0c;查看页面信息&#xff1a; <?php $miwen"a1zLbgQsCESEIqRLwuQAyMwLyq2L5VwBxqGA3RQAyumZ0tmMvSGM2ZwB4tws";function encode($str){$_ostrrev($str);// echo $_o;for($_00;$_0<strlen($_o);$_0){$_csubstr($_o,$_0,1);$__ord($_c)1;…

2014最新AI智能系统ChatGPT网站源码GPTs应用支持+Ai绘画网站源码+搭建部署教程文档

一、文章前言 SparkAi创作系统是基于ChatGPT进行开发的Ai智能问答系统和Midjourney绘画系统&#xff0c;支持OpenAI-GPT全模型国内AI全模型。本期针对源码系统整体测试下来非常完美&#xff0c;那么如何搭建部署AI创作ChatGPT&#xff1f;小编这里写一个详细图文教程吧。已支持…

深度解析SPARK的基本概念

关联阅读博客文章&#xff1a; 深入理解MapReduce&#xff1a;从Map到Reduce的工作原理解析 引言&#xff1a; 在当今大数据时代&#xff0c;数据处理和分析成为了企业发展的重要驱动力。Apache Spark作为一个快速、通用的大数据处理引擎&#xff0c;受到了广泛的关注和应用。…

打造个性化聊天机器人:用Ollama和Open WebUI搭建你的私有ChatGPT!

一 简介 Ollama 官网&#xff1a;https://github.com/ollama/ollama Ollama是一个开源的人工智能&#xff08;AI&#xff09;和机器学习&#xff08;ML&#xff09;工具平台&#xff0c;特别设计用于简化大型语言模型&#xff08;LLM&#xff09;的部署和使用流程。用户可以通…

nginx工作原理解析

目录 1、master-workers 的工作机制介绍 2、master-workers 的机制的好处 3、设置多少个 worker 4、最大连接数和支持的最大并发数的计算 1、master-workers 的工作机制介绍 nginx在启动后&#xff0c;会有一个master进程和一个或者多个相互独立的worker进程 过来的请求由…

4个关键提示:打造符合规范的网页设计

网页设计也属于UI设计的范畴&#xff0c;是近年来的热门话题。随着互联网时代的到来&#xff0c;越来越多的企业开始关注网页UI设计。正因为如此&#xff0c;UI设计可以说是目前设计行业薪酬最高的存在。 那么&#xff0c;对于目前学习网页设计的小伙伴来说&#xff0c;如何才…

电脑远程控制esp32上的LED

1、思路整理 首先esp32需要连接上wifi 然后创建udp socket 接受udp数据 最后解析数据&#xff0c;控制LED 2、micropython代码实现 import network from socket import * from machine import Pin p2Pin(2,Pin.OUT)def do_connect(): #连接wifi wlan network.WLAN(network.…

SpringBoot项目如何国际化操作,让你可以随意切换语言

1.前言 最近接触的项目需要中文/英文或者其他国家语言的切换&#xff0c;在后台的时候有一个选择&#xff0c;你可以选择中文还是英文&#xff0c;或者其他语言&#xff0c;选择完毕界面语言就都变了&#xff0c;咱不知道前端怎么操作的&#xff0c;但是后台在处理提示语的时候…

Qt/C++推流组件使用说明

2.1 网络推流 公众号&#xff1a;Qt实战&#xff0c;各种开源作品、经验整理、项目实战技巧&#xff0c;专注Qt/C软件开发&#xff0c;视频监控、物联网、工业控制、嵌入式软件、国产化系统应用软件开发。 公众号&#xff1a;Qt入门和进阶&#xff0c;专门介绍Qt/C相关知识点学…

ppt从零基础到高手【办公】

第一章&#xff1a;文字排版篇01演示文稿内容基密02文字操作规范03文字排版处理04复习&作业解析第二章&#xff1a;图形图片图表篇05图形化表达06图片艺术化07轻松玩转图表08高效工具&母版统一管理09复习&作业解析10轻松一刻-文字图形小技巧速学第三章&#xff1a;…

[dvwa] xss dom

xss dom 0x01 low <script>alert(document.cookie)</script>弹个窗 script被写入html 0x02 medium 过滤<script 考虑使用img标签&#xff0c;其onerror属性在该元素加载src错误时触发 注入元素被写入value&#xff0c;就在value闭合option 和 select标签…

DP:子数组模型

一、最大子数组和 . - 力扣&#xff08;LeetCode&#xff09; 二、环形子数组的最大和 . - 力扣&#xff08;LeetCode&#xff09; class Solution { public:int maxSubarraySumCircular(vector<int>& nums) {//动态规划思想解决 //环形数组问题&#xff0c;尝试转…

SpringBoot之SpringBoot整合MyBatis

本章详情 使用SpringBoot和MyBatis通过注解的方式操作数据库使用SpringBoot和MyBatis通过XML配置文件的方式操作数据库 项目搭建 1. 打开idea,选择Create New Project 2.选择Spring Initializer,然后点击Next 3.填写组织&#xff0c;坐标等信息&#xff0c;然后点击Next 4.选…

Qt | QObject 类中的成员函数存取属性值与动态属性、用反射机制获取属性的信息

1、注册自定义类型与 QMetaType 类 ①、QMetaType 类用于管理元对象系统中命名的类型,该类用于帮助 QVariant 中的类型以及队列中信号和槽的连接。它将类型名称与类型关联,以便在运行时动态创建和销毁该名称。 ②、QMetaType::Type 枚举类型定义了 QMetaType 支持的类型。其…