nginx配置证书和私钥进行SSL通信验证

news/2024/5/3 16:25:28/文章来源:https://blog.csdn.net/a924382407/article/details/137585495

在这里插入图片描述

文章目录

  • 一、背景
    • 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

在这里插入图片描述

如图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

2.3 命令中部分参数介绍

  • -req:生成证书请求(CSR)。
  • -in:指定输入文件或数据。
  • -signkey:使用指定的私钥进行签名。
  • -out:指定输出文件。
  • -outform:指定输出格式。
  • -inform:指定输入格式。
  • pkcs12 -export:将证书和私钥打包成 PKCS #12 格式。
  • -nokeys:在输出中不包括私钥。
  • -CAcreateserial:在生成自签名证书时创建一个序列号文件。
  • -text:显示证书或 CSR 文件的文本信息。

三、重启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

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

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

相关文章

《由浅入深学习SAP财务》:第2章 总账模块 - 2.6 定期处理 - 2.6.3 月末操作:外币评估

2.6.3 月末操作:外币评估 企业的外币业务在记账时一般使用期初的汇率或者即时汇率,但在月末,需要按照月末汇率对外币的余额或者未清项进行重估(revaluation)。 企业在资产负债表日,应当按照下列规…

【springboot开发】Gradle VS Maven

前言: java构建工具的主要作用是依赖管理和构建的生命周期管理。gradle和maven是目前java中最流行的两个构建工具,springboot常用maven,Android studio使用gradle。 目录 1. 简介2. Maven2.1 安装2.2 依赖管理2.3 构建生命周期管理 3. Gradle…

VirusTaxo:病毒物种注释

https://github.com/omics-lab/VirusTaxo 安装 git clone https://github.com/omics-lab/VirusTaxo mamba create -n VirusTaxo python3.10 mamba activate VirusTaxo cd VirusTaxo python3 -m venv environment source ./environment/bin/activate pip install -r require…

SpringCloud系列(2)--SpringCloud和SpringBoot技术选型

前言:SpringCloud是微服务架构的一揽子解决方案,SpringBoot是一种技术,要使用SpringCloud,也需要使用到SpringBoot,所以要使用SpringCloud时,必须也要考虑到SpringBoot的适配问题 1、查看SpringCloud和与之…

最好的 iPhone 解锁器解决方案功能、优点和缺点

现最受好评的 iPhone 解锁器,例如 奇客解锁、iPassGo 等。深入了解它们的优缺点和兼容性,以做出明智的决定。了解如何解锁 iPhone 并解决有关解锁方法、PIN 绕过和潜在风险的常见问题。 1、奇客手机解锁 奇客手机解锁是一款适用于 iOS 的多功能解锁工具…

2024春算法训练4——函数与递归题解

一、前言 感觉这次的题目都很好,但是E题....(我太菜了想不到),别人的题解都上百行了,晕; 二、题解 A-[NOIP2010]数字统计_2024春算法训练4——函数与递归 (nowcoder.com) 这种题目有两种做法:…

网站SEO关键词规划时如何筛选出合适的关键词?

在网站SEO优化过程中,关键词布局是一个至关重要的环节。首先,我们需要确定核心关键词,然后通过各种策略和方法对关键词进行扩展。完成关键词扩展后,接下来的任务就是对这些扩展后的关键词进行筛选。那么,如何进行有效的…

pytorch3d、Detectron2编译安装

基础环境: python:3.6 ubuntu:18.04 pytorch:1.8 cuda:10.2 一、pytorch3d编译 官方指南 GitCode - 开发者的代码家园 注意:cuda11以下的版本,需要安装CUB libaray,cuda11以上的版…

开源项目one-api的k8s容器化部署(上)-- 制作镜像及部署准备

一、背景 最近需要对开源项目one-api进行k8s容器化部署,主要分以下几个步骤: 制作docker镜像申请mysql和redis数据库docker-compose部署方式k8s部署方式 整个的篇幅比较长,将会分成上下两篇来阐述。 二、制作docker镜像 开源项目one-api…

Idea集成Docker的快捷部署

Idea集成Docker的快捷部署 配置Docker远程访问1.1 修改 `/lib/systemd/system/docker.service`1.2 替换`ExecStart`1.3 重启docker服务1.4 监听端口是否被占用1.5 服务器防火墙开启2375端口1.6 测试配置IDEA2.1 下载docker插件2.2 添加docker连接2.3 配置容器镜像加速器2.4 配置…

Gradle 在 Spring 中的使用ApiHug准备-工具篇-006

🤗 ApiHug {Postman|Swagger|Api...} 快↑ 准√ 省↓ GitHub - apihug/apihug.com: All abou the Apihug apihug.com: 有爱,有温度,有质量,有信任ApiHug - API design Copilot - IntelliJ IDEs Plugin | Marketplace ApiHug …

Redis Cluster集群模式

目录 一、理论 1.1 概念 1.2 集群的作用 1.3 redis集群的数据分片 1.4 Redis集群的主从复制模型 二、实践 2.1 Redis集群模式的搭建 2.1.1 cluster集群前期工作 2.1.2 开启群集功能 2.1.3 启动redis节点 2.1.4 启动集群 2.2 测试集群 总结 一、理论 1.1 概念 集群&a…

vulhub之Webmin篇

Webmin是功能最强大的基于Web的Unix系统管理工具。管理员通过浏览器访问Webmin的各种管理功能并完成相应的管理动作。Webmin支持绝大多数的Unix系统,这些系统除了各种版本的linux以外还包括:AIX、HPUX、Solaris、Unixware、Irix和FreeBSD等。 影响版本&…

JVM、maven、Nexus

一、jvm简介 1.应用程序申请内存时出现的三种情况: ①OOM:内存溢出,是指应用系统中存在无法回收的内存或使用的内存过多,最终使得程序运行要用到的内存大于能提供的最大内存。此时程序就运行不了,系统会提示内存溢出&#xff0c…

自己动手封装axios通用方法并上传至私有npm仓库:详细步骤与实现指南

文章目录 一、构建方法1、api/request.js2、api/requestHandler.js3、api/index.js 二、测试方法1、api/axios.js2、main.js3、app.vue4、vue.config.js5、index.html 三、打包1、配置package.json2、生成库包3、配置发布信息4、发布 四、使用1、安装2、使用 五、维护1、维护和…

基于FPGA的DDR相关知识导航界面

个人觉得想要真正理解DDR,那就要从SDRAM入手,SDRAM读写控制器也可以作为入门FPGA的一个判断标准,说实话I2C、UART、SPI这些接口难度太低了,会写这些接口说明不了什么。 很常见的问题,现在DDR3、SDRAM、DDR4官方都有IP&…

数据结构——二叉树链式结构的实现

大家好我是小锋,今天我们来学习的是二叉树链式结构的实现 首先我们来学习一下二叉树的基本操作 在看二叉树基本操作前我们来回顾下二叉树的概念, 二叉树是: 1. 空树 2. 非空:根节点,根节点的左子树、根节点的右…

【THM】Exploit Vulnerabilities(利用漏洞)-

介绍 在这个房间里,我们将讨论一些识别漏洞的方法,并结合我们的研究技能来了解这些漏洞是如何被滥用的。 此外,您还会发现一些公开可用的资源,这些资源是您在执行漏洞研究和利用时的技能和工具的重要补充。然后,您将在房间的最后将所有这些应用到实际挑战中。 自动化与…

如何监控容器或K8s中的OpenSearch

概述 当前 OpenSearch 使用的越来越多, 但是 OpenSearch 生态还不尽完善. 针对如下情况: 监控容器化或运行在 K8s 中的 OpenSearch 我查了下, 官方还没有提供完备的方案. 这里如何监控 K8s 中的 OpenSearch, 包括安装 exporter 插件、采集、展示全环节。 OpenSearch 简介…

红豆Cat 1开源|项目三: 从0-1设计一款HTTP版本RTU(支持GNSS)产品的软硬件全过程

HTTP版RTU(支持GNSS)项目概述 RTU(Remote Terminal Unit),中文即远程终端控制系统,负责对现场信号、工业设备的监测和控制。RTU是构成企业综合自动化系统的核心装置,通常由信号输入/出模块、微…