基于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.mfbz.cn/a/207356.html

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

相关文章

智慧安防三大信息技术:云计算、大数据及人工智能在视频监控EasyCVR中的应用

说到三大信息技术大家都很清楚,指的是云计算、大数据和人工智能,在人工智能(AI)快速发展的当下,例如常见的大数据分析、人工智能芯片生产的智能机器人等等,在工作、生活、教育、金融、科技、工业、农业、娱…

预览功能实现

需求&#xff1a;将后端返回来的文字或者图片和视频展示在页面上。 <!-- 预览 --><el-dialog title"预览" :visible.sync"dialogPreviewVisible" width"50%" append-to-body :close-on-click-modal"false" close"Previe…

【分享】centos7vim异常

问题描述: 虚拟机安装centos7&#xff0c;安装vim后异常&#xff0c;上下左右键会变成abcd,退格键无法删除。 系统版本: CentOS Linux release 7.5.1804 (Core) 原因: 暂时未知&#xff0c;有可能是vim安装时&#xff0c;一个组件未安装导致。后续追溯 解决方案: echo &quo…

国际上有哪些比较出名的VOIP供应商

1. Skype&#xff08;微软&#xff09;&#xff1a;企业发展历程&#xff1a;Skype 于2003年成立&#xff0c;最初由瑞典和丹麦的几位开发者创建。2005年被eBay收购&#xff0c;之后于2011年被微软收购。微软将 Skype 合并到其产品生态系统&#xff0c;并继续开发和改进该平…

Whisper

文章目录 使后感Paper Review个人觉得有趣的Log Mel spectrogram & STFT Trainingcross-attention输入cross-attention输出positional encoding数据 Decoding为什么可以有时间戳的信息 Test code 使后感 因为运用里需要考虑到时效和准确性&#xff0c;类似于YOLO&#xff…

库位角点检测之Centernet/CornerNet算法

1.CornerNet CornerNet 那么我们从bounding box左上角(top-left corner)看物体。视线横着的话&#xff0c;物体就在视线的下面&#xff08;那么视线所在位置为the topmost boundary of an object&#xff09;。视线竖着的话&#xff0c;物体就在视线的右边&#xff0c;那么视线…

Electron+Ts+Vue+Vite桌面应用系列:TypeScript常用语法详解

文章目录 1️⃣ TypeScript常用讲解1.1 使用1.2 字符串1.3 数字1.3 布尔1.4 数组1.5 元组1.6 枚举1.7 any1.8 void1.9 object1.10 函数指定返回值的类型1.11 联合类型1.12 类型断言1.13 接口1.14 函数类型1.15 类类型1.16 泛型 2️⃣ 类2.1 类的基本写法2.2 类的继承2.3 类的修…

建设银行RPA应用实践

当下&#xff0c;银行业正在从“互联网金融”时代向“新科技金融”时代迈进&#xff0c;在目前经济形势严峻、人力成本持续增加的经营背景下&#xff0c;以科技解放人力将是智能化银行发展的必然趋势。RPA技术为解决上述问题提供了崭新的路径。 RPA&#xff08;机器人流程自动…

vue3(三)-基础入门之v-model双向绑定、v-model修饰符

一、v-model 双向绑定 监听用户的输入事件来实时更新数据&#xff0c;多用于表单 input、textarea以及select元素上 <div id"app"><input type"text" v-model"myInputText" /><!-- 等价于&#xff1a; --><input type&qu…

【动态规划】LeetCode-63.不同路径II

&#x1f388;算法那些事专栏说明&#xff1a;这是一个记录刷题日常的专栏&#xff0c;每个文章标题前都会写明这道题使用的算法。专栏每日计划至少更新1道题目&#xff0c;在这立下Flag&#x1f6a9; &#x1f3e0;个人主页&#xff1a;Jammingpro &#x1f4d5;专栏链接&…

深度学习(一):Pytorch之YOLOv8目标检测

1.YOLOv8 2.模型详解 2.1模型结构设计 和YOLOv5对比&#xff1a; 主要的模块&#xff1a; ConvSPPFBottleneckConcatUpsampleC2f Backbone ----->Neck------>head Backdone 1.第一个卷积层的 kernel 从 6x6 变成了 3x3 2. 所有的 C3 模块换成 C2f&#xff0c;可以发现…

蓝桥杯算法心得——小郑躲太阳(思维推导)

大家好&#xff0c;我是晴天学长&#xff0c;一道与平时的题型截然不同的题型&#xff0c;需要的小伙伴可以关注支持一下哦&#xff01;后续会继续更新的。&#x1f4aa;&#x1f4aa;&#x1f4aa; 1) .小郑躲太阳 问题描述 小郑一觉醒来发现起晚啦!现在需要从家里飞速前往公司…

SD-WAN组网中的CPE及云服务CPE部署方法

什么是CPE&#xff1f; CPE全称为Customer Premises Equipment&#xff0c;即客户端设备&#xff0c;在SD-WAN中通常为路由器&#xff0c;部署在中心点和分支上&#xff0c;提供连接和路由、协议转换、流量监控等功能。一般可分为硬件CPE和虚拟化CPE&#xff08;virtual CPE&a…

解锁创新力:深度剖析知识付费系统源码及关键技术实现

在知识付费的浪潮中&#xff0c;构建一个稳健高效的系统源码是创新和成功的关键。本文将深入探讨知识付费系统的核心源码和一些关键技术实现&#xff0c;为开发者提供有力的指导和灵感。 1. 构建基础&#xff1a;系统框架 在知识付费系统中&#xff0c;系统框架的选择至关重…

编译原理:设计与实现一个简单词法分析器

设计与实现一个简单词法分析。具体内容是产生一个二元式文本文件&#xff0c;扩展名为dyd&#xff0c;可将Java或C程序(测试程序)分解成为一个一个的单词及类型。 &#xff08;选做&#xff1a;并查“单词符号与种别对照表”得出其种别&#xff0c;用一数字表示。&#xff09;…

Java 连接数据库

数据库&#xff1a;存储数据&#xff08;集中管理&#xff09; 目的&#xff1a; 文件中的数据能够放在数据库中集中管理 管理方法&#xff1a;一个项目一个库&#xff0c;每个库中包含最小化数据的表 开发&#xff1a; 节省存储空间&#xff0c;节省运行空间&#xff0c;采…

ELK分布式日志管理平台部署

目录 一、ELK概述 1、ELK概念&#xff1a; 2、其他数据收集工具&#xff1a; 3、ELK工作流程图&#xff1a; 4、ELK 的工作原理&#xff1a; 5、日志系统的特征&#xff1a; 二、实验部署&#xff1a; 1、ELK Elasticsearch 集群部署 2、安装 Elasticsearch-head 插件 …

【HTTP协议】简述HTTP协议的概念和特点

&#x1f38a;专栏【网络编程】 &#x1f354;喜欢的诗句&#xff1a;更喜岷山千里雪 三军过后尽开颜。 &#x1f386;音乐分享【如愿】 &#x1f970;欢迎并且感谢大家指出小吉的问题 文章目录 &#x1f33a;概念&#x1f33a;特点&#x1f384;请求协议&#x1f384;响应协议…

map()的用法

JavaScript Array map() 方法 先说说这个方法浏览器的支持&#xff1a; 支持五大主流的浏览器&#xff0c; 特别注意&#xff1a;IE 9 以下的浏览器不支持&#xff0c;只支持IE 9以上的版本的浏览器 特别注意&#xff1a;IE 9 以下的浏览器不支持&#xff0c;只支持IE 9以上的…

uniapp微信小程序地图实现绘制polygon(保姆级教程 全网最全!!!)

用户需求&#xff1a;需要在填写表单信息时&#xff0c;在地图上标绘自己房屋的位置信息。 这个问题处理了很久&#xff0c;在网上也没有找到全面的相关案例&#xff0c;所以我将我的思路分享给大家&#xff0c;希望可以解决大家遇到的问题。如果大家有更好的思路&#xff0c;…