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

在这里插入图片描述

在这里插入图片描述

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

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

相关文章

Junit5基础教程

文章目录 一,导入依赖二,基本功能一、常用断言二、执行顺序和常用注解1、通过BeforeAll类的注解来保证顺序2、通过order注解来保证执行顺序 三、依赖测试四、参数化测试五、测试套件SelectPackages、IncludePackages、SelectClasses、IncludeTags等注解的…

Spark MLlib

目录 一、Spark MLlib简介 (一)什么是机器学习 (二)基于大数据的机器学习 (三)Spark机器学习库MLlib 二、机器学习流水线 (一)机器学习流水线概念 (二&#xff09…

第5集《佛说四十二章经》

和尚尼慈悲、诸位法师、诸位居士,阿弥陀佛! 请大家打开讲义第五面,第三章、割爱去贪。 蕅益大师他把《四十二章经》的内涵分成两个部分:第一部分是第一章、第二章的正道法门;其次,第三章之后共有四十章都…

Java图形化界面编程—— ImageIO 笔记

2.8.4 ImageIO的使用 在实际生活中,很多软件都支持打开本地磁盘已经存在的图片,然后进行编辑,编辑完毕后,再重新保存到本地磁盘。如果使用AWT要完成这样的功能,那么需要使用到ImageIO这个类,可以操作本地磁…

【MATLAB】GA_BP神经网络回归预测算法

有意向获取代码,请转文末观看代码获取方式~也可转原文链接获取~ 1 基本定义 GA_BP神经网络回归预测算法结合了遗传算法(Genetic Algorithm, GA)和BP神经网络(Backpropagation Neural Network, BPNN),用于解…

分享88个文字特效,总有一款适合您

分享88个文字特效,总有一款适合您 88个文字特效下载链接:https://pan.baidu.com/s/1Y0JCf4vLyxIJR6lfT9VHvg?pwd8888 提取码:8888 Python采集代码下载链接:采集代码.zip - 蓝奏云 学习知识费力气,收集整理更不…

Gemini VS GPT-4,当前两大顶级AI模型实测

随着谷歌在AI军备竞赛中急起直追,“有史以来最强大模型”Gemini Advanced终于上线,AI爱好者们总算等来了一款号称能够匹敌GPT-4的大语言模型。 月费19.99美元(包含Google One订阅)的Gemini Advanced实际表现如何?究竟…

C++进阶(十五)C++的类型转换

📘北尘_:个人主页 🌎个人专栏:《Linux操作系统》《经典算法试题 》《C》 《数据结构与算法》 ☀️走在路上,不忘来时的初心 文章目录 一、C语言中的类型转换二、为什么C需要四种类型转换三、C强制类型转换1、static_cast2、reint…

[office] excel如何计算毛重和皮重的时间间隔 excel计算毛重和皮重时间间隔方法 #笔记#学习方法

excel如何计算毛重和皮重的时间间隔 excel计算毛重和皮重时间间隔方法 在日常工作中经常会到用excel,有时需要计算毛重和皮重的时间间隔,具体的计算方式是什么,一起来了解一下吧 在日常工作中经常会到用excel,在整理编辑过磅数据…

Linux--基础开发工具篇(2)(vim)(配置白名单sudo)

目录 前言 1. vim 1.1vim的基本概念 1.2vim的基本操作 1.3vim命令模式命令集 1.4vim底行命令 1.5 异常问题 1.6 批量注释和批量去注释 1.7解决普通用户无法sudo的问题 1.8简单vim配置 前言 在前面我们学习了yum,也就是Linux系统的应用商店 Linux--基础开…

2024牛客寒假算法基础集训营2-c Tokitsukaze and Min-Max XOR

来源 题目 Tokitsukaze 有一个长度为 n 的序列 a1,a2,…,an和一个整数 k。 她想知道有多少种序列 b1,b2,…,bm满足: 其中 ⊕\oplus⊕ 为按位异或,具体参见 百度百科:异或 答案可能很大,请输出  mod1e97 后的结果。 输入描述…

问题排查利器 - 分布式 trace

在分布式系统开发中,系统间的调用往往会横跨多个应用之间的接口。负责的调用链路也导致了,当线上环境出现问题时,例如请求失败、延迟增加或错误发生,我们无法第一时间确定是哪个环节出了问题,这给故障排查和修复带来了…

AI:125-基于深度学习的航拍图像中地物变化检测

🚀点击这里跳转到本专栏,可查阅专栏顶置最新的指南宝典~ 🎉🎊🎉 你的技术旅程将在这里启航! 从基础到实践,深入学习。无论你是初学者还是经验丰富的老手,对于本专栏案例和项目实践都有参考学习意义。 ✨✨✨ 每一个案例都附带有在本地跑过的关键代码,详细讲解供…

中国电子学会2020年12月份青少年软件编程Scratch图形化等级考试试卷三级真题(编程题)

编程题(共3题,共30分) 36.绘制图形 1. 准备工作: (1)保留默认小猫角色,隐藏角色; (2)背景为白色背景。 2. 功能实现: (1)绘制如下图所示的图案; &…

从汇编角度解释线程间互斥-mutex互斥锁与lock_guard的使用

多线程并发的竞态问题 我们创建三个线程同时进行购票&#xff0c;代码如下 #include<iostream> #include<thread> #include<list> using namespace std; //总票数 int ticketCount100; //售票线程 void sellTicket(int idx) {while(ticketCount>0){cou…

内网安全-内网穿透

目录 内网渗透 Nc使用详解 Nc监听和探测 Nc传文件 termite内网穿透工具 ssh代理内网穿透 ssh配置socket代理 MSF多级网络穿透 内网渗透 Nc使用详解 Nc监听和探测 Nc传文件 termite内网穿透工具 1、termite 之前叫ew &#xff08;可以进行正向连接&#xff0c;可以…

JVM学习记录

JVM基础概念 JVM是一个运行在计算机上的程序&#xff0c;负责编译java字节码文件&#xff0c;支持跨平台特性。 java语言为了通过实时解释实现多平台支持&#xff0c;性能相对于C等语言较低&#xff0c;而JVM提供了JIT即时编译进行性能优化。 JVM与JIT JVM负责解释和执行Ja…

LLaMA 入门指南

LLaMA 入门指南 LLaMA 入门指南LLaMA的简介LLaMA模型的主要结构Transformer架构多层自注意力层前馈神经网络Layer Normalization和残差连接 LLaMA模型的变体Base版本Large版本Extra-Large版本 LLaMA模型的特点大规模数据训练 LLaMA模型常用数据集介绍公共数据来源已知的数据集案…

Java的接口

目录 1.接口的概念 2.语法规则 3.接口的使用 4.接口的特性 总结&#xff1a; 5.实现多个接口 6.接口间的继承 1.接口的概念 接口就是公共的行为规范标准&#xff0c;大家在实现时&#xff0c;只要符合规范标准&#xff0c;就可以通用。 在Java中&#xff0c;接口可以看成…

MOMENTUM: 1

攻击机 192.168.223.128 目标机 192.168.223.146 主机发现 nmap -sP 192.168.223.0/24 端口扫描 nmap -sV -p- -A 192.168.223.146 开启了22 80端口 看一下web界面 随便打开看看 发现这里有个参数id&#xff0c;sql尝试无果&#xff0c;发现写入什么&#xff0c;网页显示…