基于OpenSSL和nginx搭建本地https服务器(详细实操版)

  • (꒪ꇴ꒪ ),Hello我是祐言QAQ
  • 我的博客主页:C/C++语言,数据结构,Linux基础,ARM开发板,网络编程等领域UP🌍
  • 快上🚘,一起学习,让我们成为一个强大的攻城狮!
  • 送给自己和读者的一句鸡汤🤔:集中起来的意志可以击穿顽石!
  • 作者水平很有限,如果发现错误,请在评论区指正,感谢🙏

目录

一、介绍

1. SSL简介

2. Nginx简介

二、OpenSSL 下载与安装

三、OpenSSL自建服务端证书请求

​编辑1. 生成服务端私钥

​编辑2. 由私钥生成待签名证书

四、OpenSSL自建CA根证书

1. 创建私钥

2. 生成CA待签名证书

3. 创建自签名的根证书

4. OpenSSL生成服务端证书

五、在Nginx中配置证书

1. 安装 Nginx

2. 启动 Nginx 服务

3. Nginx中配置证书文件

4. 重启Nginx

5. 验证搭建https服务器是否可行

📢写在最后


一、介绍

        本文将对SSL、Nginx和OpenSSL自建CA根证书的介绍非常全面,适用于想要学习搭建安全Web服务器的读者哈。

1. SSL简介

        SSL(安全套接层)是一种用于在计算机网络上保护信息安全的协议。SSL 最初由网景公司开发,后来演变为 TLS(传输层安全),但人们仍然普遍使用术语 SSL 来指代这种安全协议。

        SSL/TLS 的主要目标是通过加密通信内容,确保数据在客户端和服务器之间的传输过程中不被窃听或篡改。它使用公钥和私钥体系,对数据进行加密和解密,以确保通信的机密性和完整性。        

        SSL/TLS 的工作流程通常包括以下步骤:

  1. 握手阶段(Handshake): 客户端向服务器发送一个“客户端hello”消息,服务器回应一个“服务器hello”消息。在握手过程中,双方协商加密算法和密钥。

  2. 认证阶段: 服务器通常需要提供数字证书,以便客户端验证其身份。这有助于确保客户端正在与预期的服务器通信,而不是遭到中间人攻击。

  3. 密钥交换阶段: 在握手期间,客户端和服务器协商共享密钥,用于加密和解密数据。这确保了通信的保密性。

  4. 加密通信: 握手成功完成后,客户端和服务器使用共享密钥对通信进行加密。这使得即使有人能够截获通信,也无法轻松解密其中的内容。

        SSL/TLS 在 Web 安全中起着关键作用,尤其是在保护网站上的敏感信息,如登录凭据和信用卡数据方面。最新的 TLS 版本不断改进安全性,并强调抵御不同类型的攻击。

2. Nginx简介

        Nginx是一个轻量级、高性能的开源Web服务器,由Igor Sysoev创建,并于2004年首次发布。它以其卓越的性能、低资源消耗以及高度可扩展性而闻名。

        以下是Nginx的一些关键特点和用途:

  1. 高性能: Nginx设计的目标之一是处理高并发连接,它采用异步事件驱动的架构,可以有效地处理大量并发请求而不会导致性能下降。

  2. 低内存消耗: 相对于一些传统的Web服务器,Nginx使用较少的内存来处理相同数量的请求,这使得它在资源受限的环境中表现出色。

  3. 反向代理: Nginx可以作为反向代理服务器,将客户端的请求转发给后端服务器。这对于负载均衡、提高安全性以及实现更灵活的架构都非常有用。

  4. 负载均衡: 作为反向代理的一部分,Nginx可以分配流量到多个服务器,以确保请求在各个服务器之间均衡分布,提高系统的稳定性和性能。

  5. 静态文件服务: Nginx非常擅长提供静态文件服务。它能够快速地传送静态内容,减轻动态应用服务器的负担。

  6. 模块化设计: Nginx的模块化设计使得用户可以根据需要灵活配置和扩展功能,例如SSL支持、gzip压缩等。

        总体而言,Nginx是一个强大而灵活的工具,适用于构建高性能、可扩展和稳定的Web服务器环境。

二、OpenSSL 下载与安装

        OpenSSL是一个开源的加密和安全套接字层工具包,它实现了SSL(Secure Sockets Layer)和TLS(Transport Layer Security)协议。它提供了一系列用于处理安全通信的函数和工具。我们用到它的功能主要是自签证书来自建https服务器
       你可以从官方网站(https://www.openssl.org/)下载并安装适合你操作系统的版本。我这里下载的是v1.1.1版本,步骤如下:

        下载好之后按照提示安装即可,这里就不再演示了。


三、OpenSSL自建服务端证书请求


        打开Windows命令行终端(Win+r然后cmd),进入OpenSSL目录中的bin目录,然后自建一下存储证书的地址,我这里建的是 C:/openssl


1. 生成服务端私钥

        后续几步也都是通过openssl.exe可执行文件来进行操作。

openssl.exe genrsa -des3 -out c:/openssl/server.key 2048

         该过程中要输入密码,记住它,执行完成后,我们看到目录中生成了server.key。


2. 由私钥生成待签名证书


        这里利用上一步生成的server.key生成待签名证书,即证书生成请求.CSR文件。中间需要输入在第一步中设置的密码,然后填写证书请求信息。

openssl.exe req -new -key c:/openssl/server.key -out c:/openssl/pub.csr

        注意:这里的信息根据你自己情况如实填写或者填过都可以

四、OpenSSL自建CA根证书

        创建 OpenSSL 自建 CA(Certificate Authority) 根证书是确保安全通信的关键步骤。


1. 创建私钥

        使用以下命令生成CA的私钥。这个私钥将用于签署其他证书。

openssl.exe genrsa -out c:/openssl/ca.key 2048


2. 生成CA待签名证书

openssl.exe req -new -key c:/openssl/ca.key -out c:/openssl/ca.csr

         执行完成后,输出目录会出现ca.csr文件。


3. 创建自签名的根证书

        使用私钥生成自签名的根证书。

openssl.exe x509 -req -in c:/openssl/ca.csr -extensions v3_ca -signkey c:/openssl/ca.key -out c:/openssl/ca.crt

        执行完成后,输出目录中生成ca.crt文件。


4. OpenSSL生成服务端证书

openssl.exe x509 -days 365 -req -in c:/openssl/pub.csr -extensions v3_req -CAkey c:/openssl/ca.key -CAcreateserial -out c:/openssl/server.crt -CA c:/openssl/ca.crt

        执行完成后,输出目录中生成了server.crt证书文件,到此证书就制作完毕了

        现在,已经成功创建了一个自建的CA根证书。记得妥善保管私钥,因为它对于签署其他证书是关键的。在实际应用中,你可以使用这个CA根证书来签署其他实体(服务器、客户端)的证书,建立安全的通信。

五、在Nginx中配置证书

        在 CentOS 7 中使用 Nginx 的过程可以分为以下步骤(其他地方大致操作一致,Ubuntu中使用apt下载即可),包括安装 Nginx、配置站点等。以下是一个基本的流程:

1. 安装 Nginx

        使用 yum 包管理器安装 Nginx。

sudo yum install nginx

2. 启动 Nginx 服务

        安装完成后,启动 Nginx 服务:

sudo systemctl start nginx

        你也可以将 Nginx 设置为开机自启动:

sudo systemctl enable nginx

        但是一般在 CentOS 7 中root权限下直接这样即可启动,前提是你在/usr/sbin目录中,其他地方的话加上该目录就行。

nginx -s reload 
nginx 

3. Nginx中配置证书文件

        (1)上传server.crt 和 server.key 到docker容器。

docker cp 目标文件 目标容器名:/root/

        (2)证书地址记一下,后续配置nginx.conf文件时要使用(pwd打印)。

       (3) 然后进入nginx工作目录。

cd /etc/nginx

        (4)vim 编辑器进入nginx.conf。

vim nginx.conf

在nginx.conf中找到server并编辑如下内容:

   server {listen    443 ssl;   #端口号(必须433 ssl)server_name  x86docker.com;   #可随意ssl_certificate      /root/opensslserver/server.crt;  #证书对应地址ssl_certificate_key  /root/opensslserver/server.key;  #key地址location / {alias html/;      #路径(需要https服务器提供下载服务的路径)autoindex on;     #下载权限(开)}


4. 重启Nginx

         一般在 CentOS 7 中root权限下直接这样即可启动,前提是你在/usr/sbin目录中,其他地方的话加上该目录就行。

nginx -s reload 
nginx 

      

        这里其实输入PEM密码的形式会在某些系统下不支持,因此我们还需将其修改为无密码模式最好,如遇到则可(使用 cat 命令)从日志/var/log/nginx/error.log中显示密码错误,将其修改为无密码格式:

openssl rsa -in /root/opensslserver/server.key -out /root/opensslserver/server_nopass.key

        然后把/root/opensslserver/server_nopass.key替换到nginx.conf 中即可(替换后记得重新加载nginx)。

5. 验证搭建https服务器是否可行

        在本地安装证书(Windows下)打开openssl然后右键点击ca.crt。

        等待完成后将 CentOS 7 docker容器内的hosts中的设置为本机地址和server_name(我这里是想从libreoffice中下载的文件,因此我的地址该地址,你可根据具体需求更换,如果是自建Web把自己的写上去即可)

        这时候应该就可以去对https服务器进行一个访问了,如果有报错的话可以根据提示信息检查一下对应的那一步是否操作正确,不报403或者5开头错误就是可以了。 

六、总结

        本文向读者介绍了SSL、Nginx和OpenSSL自建CA根证书的重要概念和实践步骤。

        在SSL的部分,详细阐述了SSL的起源、演进到TLS的过程,并强调SSL/TLS在Web安全中的关键作用。对Nginx的介绍包含了该服务器的关键特点和广泛应用领域,为读者提供了对Nginx的基本了解。

        在OpenSSL自建CA根证书的步骤中,以实际操作为例,逐步指导读者生成服务端私钥、待签名证书和自签名的根证书,以创建安全通信的基础。

        最后,通过在CentOS 7中配置Nginx,演示了如何将生成的证书应用于实际的Web服务器,使读者能够亲身体验搭建安全通信环境的过程。

        这篇博客是我学习过程的一个记录,也是我与读者分享知识和经验的平台。如果读者在实践中遇到问题,欢迎在评论区指正,共同学习进步。

        更多C/C++语言Linux系统数据结构ARM板实战相关文章,关注专栏:

   手撕C语言

            玩转linux

                    脚踢数据结构

                            系统、网络编程

                                     探索C++

                                             6818(ARM)开发板实战

📢写在最后

  • 今天的分享就到这啦~
  • 觉得博主写的还不错的烦劳 一键三连喔~
  • 🎉🎉🎉感谢关注🎉🎉🎉

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

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

相关文章

腾讯云最新优惠券领取入口,总面值2000元代金券,新用户、老用户、企业用户均可领取!

腾讯云推出年末感恩回馈活动,新老用户可免费领取总面值2000元的代金券礼包,适用于多种预付费产品,最高可抵扣36个月订单,领取后30天内有效。 领取入口: https://curl.qcloud.com/UpmL4ho3 领取说明: 腾…

git push 报错 error: src refspec master does not match any 解决

git报错 ➜ *** git:(main) git push -u origin "master" error: src refspec master does not match any error: failed to push some refs to https://gitee.com/***/***.git最新版的仓库初始化后 git 主分支变成了 main 方法 1.把 git 默认分支名改回 master …

VSCode搭建STM32开发环境

1、下载安装文件 链接:https://pan.baidu.com/s/1WnpDTgYBobiZaXh80pn5FQ 2、安装VSCodeUserSetup-x64-1.78.2.exe软件 3、 在VSCode中安装必要的插件 3、配置Keil Assistant插件 4、在环境变量中部署mingw64编译环境

Git的介绍和下载安装

Git的介绍和下载安装 概述 Git是一个分布式版本控制工具, 通常用来管理项目中的源代码文件(Java类、xml文件、html页面等)进行管理,在软件开发过程中被广泛使用 Git可以记录文件修改的历史记录并形成备份从而实现代码回溯, 版本切换, 多人协作, 远程备份的功能Git具有廉价的…

USB Type-C的基本原理

1 USB Type-C的基本原理 1.1 基本特性 Figure 1-1 USB Type-C接头外形 USB Type-C(简称USB-C)的基本特性: 1. 接口插座的尺寸与原来的Micro-USB规格一样小,约为8.3mm X 2.5mm 2. 可承受1万次反复插拔 3. 支持正反均可插入的“正反…

知虾平台丨优化Shopee店铺运营,提升销售利润——了解知虾平台

在如今竞争激烈的电商市场中,Shopee作为一家快速发展的平台,吸引了众多卖家加入。然而,要在Shopee上取得成功并实现可观的销售利润,并不是一件容易的事情。为了帮助卖家更好地了解市场趋势、优化商品关键词、监控竞争对手等&#…

上海毅速:深挖模具领域 成为行业变革者

近年来,3D打印在模具行业取得了大量的应用和拓展,越来越多的产品开始选择3D打印或者使用3D打印模具来进行制造。经过不断的发展,上海毅速副总王利军发现3D打印需要好的材料、好的工艺,同时也离不开好的装备平台。 在接受南极熊采访…

[1] AR Tag 在ros中的使用

1.定义 AR Tag 是一种用于增强现实(AR)应用中的视觉标记,用于跟踪和定位虚拟物体在现实世界中的位置。 AR Tag由黑白正方形图像表示,图像内部有黑色边框中的某些图案。它与我们经常用到的二维码长得类似,原理其实也一…

Git常用命令#更改用户名

1.查看当前用户信息 git config user.name2.更改用户名 特定仓库中更改用户名 如果你只想在特定仓库中更改用户名,可以在不使用 --global 参数的情况下执行相同的命令,并进入特定仓库的目录进行修改。 cd /path/to/your/repository git config user.na…

react实现加载动画

1.Spinning.tsx import "./Spinning.scss";interface Props {isLoading: boolean;children?: React.ReactNode; }const Spinning: React.FC<Props> ({isLoading true,children }) > {return <div className{spinning-wrapper${isLoading ? " l…

计算机新建盘符和重新分配盘符的大小

一、新建盘符 有些电脑刚买来时候&#xff0c;只有一个C盘分区&#xff0c;此时最好增加几个分区方便使用。 注意&#xff1a;分区操作要慎重&#xff0c;不要轻易去试。这里只针对购买的电脑厂家未做分区&#xff0c;只有一个C盘的情况。 如果自己电脑的分区本身已经满足你…

2023.11.12 阿里云产品全线故障

阿里云 11.12 故障原因曝光&#xff1a;访问密钥服务 (Access Key) 异常 (baidu.com) 故障原因竟然是因为生成白名单代码逻辑缺陷。

2024年天津天狮学院专升本专业课报名缴费流程

天津天狮学院高职升本缴费流程 一、登录缴费系统 二、填写个人信息&#xff0c;进行缴费 1.在姓名处填写“姓名”&#xff0c;学号处填写“身份证号”&#xff0c;如下图所示&#xff1a; 此处填写身份证号 2.单击查询按钮&#xff0c;显示报考专业及缴费列表&#xff0c;…

KaiwuDB 通过中国信通院“可信数据库”性能与稳定性评测

11月29日&#xff0c;中国信通院 2023 年下半年“可信数据库”评估评测结果正式发布&#xff0c;由 KaiwuDB研发的开务数据库系统 KaiwuDB V2.0 达到信通院时序数据库性能、稳定性测试标准。 至此&#xff0c;KaiwuDB已完成时序数据库基础能力、性能、稳定性全项评测&#xff…

HTAP 还可以这么玩?丨TiDB 在 IoT 智慧园区的应用

作者&#xff1a;某物联网公司设施云平台负责人 用户简介&#xff1a;我们是一家提供全链智慧园区整体解决方案的物联网公司&#xff0c;致力于打造可持续发展的智慧园区。 基础设施平台简介 基础设施平台是集团一线作业人员日常工作中高度依赖的重要系统&#xff0c;涵盖了各…

溜冰场电脑收银系统软件会员管理操作教程,佳易王溜冰场会员卡管理软件下载

溜冰场电脑收银系统软件会员管理操作教程&#xff0c;佳易王溜冰场会员卡管理软件下载 一、软件 部分功能简介&#xff1a; 1、会员信息登记 &#xff1a;可以直接使用手机号登记&#xff0c;也可以使用实体卡片&#xff0c;推荐用手机号即可。 2、会员卡类型 &#xff1a;可…

Python开发运维:PyMongo 连接操作 MongoDB

目录 一、理论 1.PyMongo模块 2.Mongo Shell 二、实验 1. Windows11安装MongoDB 7.0.4 2.Windows11安装MongoDB Shell 2.1.0 3.PyMongo 连接 MongoDB&#xff08;无密码方式&#xff09; 4.PyMongo 连接 MongoDB&#xff08;有密码方式&#xff09; 5.PyMongo 操作 Mo…

传教士与野人过河问题

代码模块参考文章&#xff1a;传教士与野人过河问题&#xff08;numpy、pandas&#xff09;_python过河问题_醉蕤的博客-CSDN博客 问题描述 一般的传教士和野人问题&#xff08;Missionaries and Cannibals&#xff09;&#xff1a;有N个传教士和C个野人来到河边准 备渡河。…

【分布式事务】Seata 开源的分布式事务解决方案

1. 什么是seata Seata 是一款开源的分布式事务解决方案&#xff0c;致力于提供高性能和简单易用的分布式事务服务。Seata 将为用户提供了 AT、TCC、SAGA 和 XA 事务模式&#xff0c;为用户打造一站式的分布式解决方案。 2. seata发展历程 阿里巴巴作为国内最早一批进行应用分…

视频中的文字水印怎么去除?这三招学会轻松去视频水印

短视频与我们生活&#xff0c;工作息息相关&#xff0c;日常在在刷短视频时&#xff0c;下载保存后发现带有文字logo水印&#xff0c;如果直接拿来进行二次创作&#xff0c;不仅影响观看效果&#xff0c;平台流量还会受限制。怎么去除视频中的文字水印就成为了当下热门话题之一…