PKI - 借助Nginx 实现Https_使用CA签发证书

文章目录

  • Pre
  • 概述
  • 操作步骤
    • 1. 生成 CA 密钥对
    • 2. 生成自签名的 CA 证书
    • 3. 生成服务器密钥对和证书签名请求 (CSR)
    • 4. 使用 CA 签署服务器证书
  • Nginx Https 自签证书
    • 1. 生成自签名证书和私钥
    • 2. 配置 Nginx 使用 CA签发的 HTTPS 证书
    • 3. 重启 Nginx 服务
    • 4. 直接访问
    • 5. 不验证证书直接访问
    • 6. 使用ca.crt作为ca证书验证服务端
      • 使用ca根证书,而非签发的server.crt 证书进行访问
    • 7. 使用IP访问

在这里插入图片描述


Pre

PKI - 借助Nginx 实现Https 服务端单向认证、服务端客户端双向认证

PKI - 数字签名与数字证书


概述

使用 CA 签发证书的主要原因和作用如下:

  1. 建立信任关系: 使用 CA 签发的证书可以建立信任关系,客户端可以信任由公认的 CA 颁发的证书,从而确保与服务器之间的通信是安全可靠的。

  2. 保证身份验证: CA 对证书申请者进行身份验证,并在验证通过后签发证书。这样,服务器可以通过 CA 签发的证书来证明自己的身份,确保客户端与合法的服务器进行通信,防止中间人攻击。

  3. 保护通信数据: 证书中包含了公钥,可以用于加密通信数据。使用 CA 签发的证书可以保护通信数据的机密性,防止数据被窃取或篡改。

  4. 提供数据完整性: 证书中包含了数字签名,可以用于验证通信数据的完整性。使用 CA 签发的证书可以确保通信数据在传输过程中没有被篡改。

总之,使用 CA 签发证书可以确保通信的安全性、可靠性和完整性,为网络通信提供了重要的保护和信任基础。


操作步骤

如下OpenSSL 命令,用于生成自签名的 CA(Certificate Authority,证书颁发机构)证书以及服务器证书。

在这里插入图片描述

1. 生成 CA 密钥对

openssl genrsa -out ca.key 2048

这个命令生成了一个 2048 位的 RSA 密钥对,私钥保存在 ca.key 文件中。


2. 生成自签名的 CA 证书

openssl req -x509 -new -nodes -key ca.key -subj "/CN=artisan-ca.com" -days 5000 -out ca.crt

这个命令使用生成的 CA 密钥对生成了一个自签名的 CA 证书。
-x509 选项表示生成一个自签名的 X.509 证书,
-subj 选项用于指定证书的主题信息,
-days 选项用于指定证书的有效期,
-out 选项用于指定输出的证书文件名。

查看生成的证书信息,证明这是一个自签的CA证书 。
在这里插入图片描述


3. 生成服务器密钥对和证书签名请求 (CSR)

# 服务器的 RSA 密钥对
openssl genrsa -out server.key 2048

 # 证书签名请求 (CSR)
openssl req -new -key server.key -subj "/CN=artisan.com" -out server.csr

这两个命令分别生成了服务器的 RSA 密钥对和证书签名请求 (CSR)。

首先使用 genrsa 命令生成了服务器的私钥 server.key,然后使用 req 命令生成了 CSR 文件 server.csr,其中 -subj 选项用于指定证书的主题信息。


4. 使用 CA 签署服务器证书

openssl x509 -req -in server.csr -CA ca.crt -CAkey ca.key -CAcreateserial -out server.crt -days 5000

这个命令使用之前生成的 CA 密钥对和证书 (ca.crtca.key) 对服务器的 CSR (server.csr) 进行签名,生成了服务器的证书 server.crt
-CA 选项用于指定签署证书的 CA 证书,
-CAkey 选项用于指定 CA 的私钥
-CAcreateserial 选项用于生成一个序列号文件以跟踪已签署的证书,
-out 选项用于指定输出的证书文件名。

通过这些 OpenSSL 命令,就可以成功地生成了自签名的 CA 证书和服务器证书,并使用 CA 对服务器证书进行了签名,从而建立了一个简单的证书信任链。

在这里插入图片描述


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 使用 CA签发的 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; 

 .....
   .....
   }

每个指令的含义如下:

  1. ss1 on;

    • 启用 SSL/TLS 加密。这表示流模块将使用 SSL/TLS 加密来保护与客户端的通信。
  2. ss1_certificate /cert/server.crt;

    • 指定用于 SSL/TLS 加密的服务器证书文件路径。在这里,/cert/server.crt 是服务器证书的路径。
  3. ss1_certificate_key /cert/server.key;

    • 指定用于 SSL/TLS 加密的服务器私钥文件路径。在这里,/cert/server.key 是服务器私钥的路径。
  4. #ss1_client_certificate /cert/client.crt;

    • 用于指定客户端证书的文件路径。这是可选的,如果您希望服务器验证客户端的证书,则取消注释并指定客户端证书的路径。
  5. #ss1_verify_client on;

    • 用于指定是否验证客户端证书。取消注释并设置为 on 可以启用客户端证书验证。
  6. ss1_session_cache shared:ssL:1m;

    • 指定用于缓存 SSL/TLS 会话的共享内存区域名称和大小。在这里,会话缓存名称为 ssL,大小为 1MB。
  7. ss1_session_timeout 10m;

    • 指定 SSL/TLS 会话的超时时间。在这里,会话超时时间为 10 分钟。
  8. ss1_ciphers HIGH:!aNULL:!MD5;

    • 指定 SSL/TLS 加密算法的优先级和允许使用的加密套件。在这里,使用了 HIGH 表示使用高强度加密算法,同时禁用了一些不安全的加密套件,如 NULLMD5
  9. 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. 使用ca.crt作为ca证书验证服务端

不能使用签发的server.crt 进行访问,错误信息如下

curl https:/artisan.com  --resolve  --cacert /cert/server.crt
artisan.com:443:192.168.3.103
cur1: (60) Peer's Certificate issuer is not recognized.

在这里插入图片描述

cur1: (60) Peer's Certificate issuer is not recognized.

错误信息表明 curl 无法验证服务器证书的签发者。这通常是由于未将 CA 证书正确指定给 curl 所致。我们使用 --cacert 选项指定了服务器证书,但似乎没有正确指定 CA 证书。

需要将 CA 证书正确指定给 curl,以便 curl 可以使用它来验证服务器证书的签发者。以下是正确的命令:

curl https://artisan.com --resolve artisan.com:443:192.168.3.103 --cacert /cert/ca.crt

在这个命令中,--cacert 选项被用来指定 CA 证书的路径,这样 curl 就可以使用它来验证服务器证书的签发者。


使用ca根证书,而非签发的server.crt 证书进行访问

curl  https://artisan.com --resolve artisan.com:443:192.168.3.103  --cacert /cert/ca.crt

如上命令,OK


7. 使用IP访问

在这里插入图片描述

会报错如上信息, 因为我们签发的证书的csr中,使用的是域名 artisan.com

openssl req -new -key server.key -subj "/CN=artisan.com" -out server.csr

这个错误通常意味着服务器证书中指定的域名与请求的域名不匹配。这可能是因为正在使用的证书是针对另一个域名签发的,或者服务器配置不正确。

要解决这个问题,您可以采取以下步骤:

  1. 检查证书的域名: 确保服务器证书是针对正在访问的域名签发的。可以使用以下命令检查证书中的主题信息:

    openssl x509 -in /cert/server.crt -noout -subject
    

    如果主题信息中的域名与正在访问的域名不匹配,那么需要获取一个正确匹配的证书。

  2. 检查服务器配置: 确保服务器配置正确,将证书配置为与正在访问的域名匹配。检查服务器配置文件,确保域名和证书的匹配性。

  3. 重新签发证书: 如果服务器证书确实是针对错误的域名签发的,需要重新签发一个正确匹配的证书。使用正确的域名生成证书签名请求 (CSR),并使用 CA 对其进行签名。

  4. 更新 DNS 记录: 如果更改了服务器证书针对的域名,确保更新 DNS 记录,以便域名解析到正确的服务器 IP 地址。

  5. 检查证书链: 确保服务器证书的颁发机构是信任的,并且证书链是完整的。您可以使用以下命令检查证书链的完整性:

    openssl s_client -connect artisan.com:443 -showcerts
    

    如果证书链不完整或不信任,需要安装完整的证书链或信任颁发机构的根证书。

解决办法将证书信息追加到

/etc/pki/t1s/certs/ca-bunde.crt

在这里插入图片描述

在这里插入图片描述

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

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

相关文章

第一篇【传奇开心果微博文系列】Python微项目技术点案例示例:pillow库实现毛笔字春联

传奇开心果微博文系列 系列微博文目录Python微项目技术点案例示例系列 微博文目录一、微项目目标二、实现微项目编程思路三、初步实现目标示例代码四、添加背景色、边框、阴影效果示例代码五、添加花纹背景、装饰线条示例代码六、添加花朵、插图等示例代码 系列微博文目录 Pyt…

PKI - 借助Nginx实现_客户端使用CA根证书签发客户端证书

文章目录 Pre概述步骤1. 创建根证书2. 生成客户端证书3. 准备客户端证书扩展文件4. 签发客户端证书5. 配置Nginx5. 重启 Nginx6. 测试 SAN 证书扩展案例:使用IP访问 Pre PKI - 借助Nginx 实现Https 服务端单向认证、服务端客户端双向认证 PKI - 数字签名与数字证书…

python 基础知识点(蓝桥杯python科目个人复习计划36)

今日复习计划:DFS搜索基础 1.简介 搜索方法:穷举问题解空间部分(所有情况),从而求出问题的解。 深度优先搜索:本质上是暴力枚举 深度优先:尽可能一条路走到底,走不了再回退。 2…

《统计学简易速速上手小册》第6章:多变量数据分析(2024 最新版)

文章目录 6.1 主成分分析(PCA)6.1.1 基础知识6.1.2 主要案例:客户细分6.1.3 拓展案例 1:面部识别6.1.4 拓展案例 2:基因数据分析 6.2 聚类分析6.2.1 基础知识6.2.2 主要案例:市场细分6.2.3 拓展案例 1&…

Linux--目录结构

目录 一、Linux的目录结构二、常用的目录介绍 一、Linux的目录结构 Linux的目录结构是一个树型结构。 Windos 系统可以拥有多个盘符,如C盘,D盘,E盘。 Linux 木有盘符这个概念,只有一个根目录 /(相当于文件夹)&#xf…

快速幂的应用

1.非递归的解法 #include <iostream> using namespace std; int main(){int a,b,c,t1;cin>>a>>b>>c;if(a>2&&a<1e3&&b>0&&a<1e7&&c>2&&c<1e5)for(int i0;i<b;i)tt*a%c;cout<<t;r…

Keil : Error-Flash Download failed Cortex-M4错误

1.打开魔术棒 2.点击Debug设置 3.查看是否有你使用的板子型号的flash 4.如果没有的话就添加以下

备份还原实际操作

备份还原实际操作 前言 根据达梦文档整理。 一、工具介绍 工具联机/脱机工具应用场景disql联机1️⃣数据库备份2️⃣归档备份3️⃣表空间备份与还原4️⃣表备份与还原dmrman脱机1️⃣数据库备份、还原和恢复2️⃣脱机还原表空间3️⃣归档的备份、还原和修复manager联机对应…

leetcode(矩阵)74. 搜索二维矩阵(C++详细解释)DAY7

文章目录 1.题目示例提示 2.解答思路3.实现代码结果 4.总结 1.题目 给你一个满足下述两条属性的 m x n 整数矩阵&#xff1a; 每行中的整数从左到右按非严格递增顺序排列。每行的第一个整数大于前一行的最后一个整数。 给你一个整数 target &#xff0c;如果 target 在矩阵中…

Hadoop-Yarn-ResourceManagerHA

在这里先给屏幕面前的你送上祝福&#xff0c;祝你在未来一年&#xff1a;技术步步高升、薪资节节攀升&#xff0c;身体健健康康&#xff0c;家庭和和美美。 一、介绍 在Hadoop2.4之前&#xff0c;ResourceManager是YARN集群中的单点故障 ResourceManager HA是通过 Active/St…

python+flask+django农产品供销展销电子商务系统lkw43

供销社农产品展销系统的设计与实现&#xff0c;最主要的是满足使用者的使用需求&#xff0c;并且可以向使用者提供一些与系统配套的服务。本篇论文主要从实际出发&#xff0c;采用以对象为设计重点的设计方法&#xff0c;因此在进行系统总体的需求分时借助用例图可以更好的阐述…

备战蓝桥杯---搜索(进阶4)

话不多说&#xff0c;直接看题&#xff1a; 下面是分析&#xff1a; (ab)%c(a%cb%c)%c; (a*b)%c(a%c*b%c)%c; 因此&#xff0c;如果两个长度不一样的值%m为相同值&#xff0c;那就舍弃长的&#xff08;因为再加1位只不过是原来值*10那位值&#xff0c;因此他们得出的%m还是同…

【Effective Objective - C 2.0】——读书笔记(二)

文章目录 前言六、理解“属性”这一概念七、在对象内部尽量直接访问实例变量八、理解“对象等同性”这一概念九、以“类族模式”隐藏实现细节十、在既有类中使用关联对象存放自定义数据十一、理解objc_msgSend的作用十二、理解消息转发机制动态方法解析备援接受者完整的消息转发…

PE 特征码定位修改程序清单 uiAccess

requestedExecutionLevel level"asInvoker" uiAccess"false" 可以修改这一行来启用禁用原程序的盾牌图标&#xff0c;似乎作用不大。以前没事写的一个小玩意&#xff0c;记录一下。 等同于这里的设置&#xff1a; 截图 代码如下&#xff1a; #include …

mac卸载被锁定的app

sudo chflags -hv noschg /Applications/YunShu.app 参考&#xff1a;卸载云枢&#xff08;MacOS 版&#xff09;

Java 学习和实践笔记(6)

各数据类型所占的空间&#xff1a; byte: 1个字节 short&#xff1a;2个字节 int&#xff1a;4个 long&#xff1a;8个 float&#xff1a;4个 double: 8个 char:1个 boolean:1bit 所有引用数据类型都是4个字节&#xff0c;实际其值是指向该数据类型的地址。 上图中稍特…

【iOS】——使用ZXingObjC库实现条形码识别并请求信息

文章目录 前言一、实现步骤二、扫描界面和扫描框的样式1.扫描界面2.扫描框 三、实现步骤 前言 ZXing库是一个专门用来解析多种二维码和条形码&#xff08;包括包括 QR Code、Aztec Code、UPC、EAN、Code 39、Code 128等&#xff09;的开源性质的处理库&#xff0c;而ZingObjC库…

单片机学习笔记---AT24C02(I2C总线)

目录 有关储存器的介绍 存储器的简介 存储器简化模型 AT24C02介绍 AT24C02引脚及应用电路 I2C总线介绍 I2C电路规范 开漏输出模式和弱上拉模式 其中一个设备的内部结构 I2C通信是怎么实现的 I2C时序结构 起始条件和终止条件 发送一个字节 接收一个字节 发送应答…

Failed to construct ‘RTCIceCandidate‘ sdpMid and sdpMLineIndex are both null

最近在搞webrtc&#xff0c;在编写函数处理远端传递来的candidate时报错了&#xff0c;具体信息如下。国内关于webrtc的资料很少&#xff0c;所以去国外社区转了一圈&#xff0c;回来记录一下报错的解决方案 其实这个bug也好解决&#xff0c;根据报错信息可以判断是RTCIceCand…

【数据库】Unlogged 表使用

【数据库】Unlogged 表使用 前言普通表和Unlogged 表的写性能比较普通表创建和数据插入Unlogged 表创建和数据插入比较结果 Unlogged 表崩溃和正常关闭测试Unlogged 表特点总结 前言 大神偶像在开会上提及了Unlogged 表&#xff0c;它的特点很不错&#xff0c;很适合实时数据保…