Nginx学习笔记(十)如何配置HTTPS协议?(公网)

目录

    • 一、简介
    • 二、SSL 证书类型介绍
    • 三、公网 SSL 证书
      • 3.1 证书管理工具
      • 3.2 下载安装 acme.sh
      • 3.3 申请并下载证书
        • 报错1:没有指定账号
        • 报错2:DNS无法解析的域名
        • 报错3:无效的响应 404
      • 3.4 配置 Nginx
      • 3.5 证书过期刷新
    • 四、补充
      • 4.1 同一域名的不同端口,可以共用一个SSL证书吗?
      • 4.2 Nginx 转发 403 问题

一、简介

HTTPS 是通过 SSL 证书 加密传输 的 HTTP 协议。可以通过 Nginx、Apache 等中间件进行接收和转发,这里我们主要介绍 Nginx 中间件的配置方式。

通过 Nginx 配置 HTTPS 协议,分为两步:

  1. 服务器需要先下载好 SSL 证书;
  2. 在 Nginx 配置好 SSL 证书的相关信息即可。

在了解清楚这些内容之后,我们就可以开始实战操作了。


二、SSL 证书类型介绍

HTTPS 协议的 SSL 证书根据 验证级别 可以分为三种:

  1. DV(Domain Validation) 证书:这种证书仅需验证申请者的域名所有权,无需对网站的实际运行者或组织进行身份验证。它是 最基本 的整数类型,适用于个人、小型企业
  2. OV(Organization Validation) 证书:这种证书在 DV 证书的基础上 增加了对申请者组织身份的验证。它 需要验证申请者的公司存在并且有效地拥有该域名适用于中型企业
  3. EV(Extended Validation) 证书:这种证书提供 最高级别 的验证,包括 对申请者的身份、组织和域名的全面审核。EV证书通常用于需要高安全性和信任度的网站,如银行和金融机构,适用于高要求企业

除此之外,SSL 证书还可以分为 公网内网 两种:

  • 公网证书: 要求必须公网可访问,并且需要通过例如在服务器创建一个指定文件,在公网的对应路径下要能正常访问。
  • 内网证书: 不需要进行验证,可以直接使用。

本片文章我们主要介绍公网环境的 SSL 证书。

补充: HTTPS 的 SSL 证书 不仅仅只支持域名,还可以支持 IP 形式的 HTTPS 协议哟。


三、公网 SSL 证书

3.1 证书管理工具

上面介绍了证书的各种类型,本文我们主要展示如何下载并配置免费的 Let’s Encrypt 网站颁发的 DV证书,网站地址如下:(证书有效期仅有三个月)

  • Let’s Encrypt: https://letsencrypt.org/zh-cn/

这里我们只是展示一下官网的地址,实际的证书下载操作并不能直接去官网操作。我们可以选择多种 客户端工具 来与 Let’s Encrypt 进行交互,常见的有以下三种:

  • acme-tiny:是一个由 Python 编写的证书申请脚本。

    开源地址:https://gitcode.com/diafygi/acme-tiny/overview

  • acme.sh:是一个由 Shell 编写的证书申请脚本。

    开源地址:https://github.com/acmesh-official/acme.sh

  • Certbot:是一款比较齐全的证书管理工具。

    官方地址:https://certbot.eff.org/

这里我们主要使用 acme.sh 来进行证书管理,因为它比较轻量级,而且操作简单。

补充: 可能有小伙伴发现了,为什么前两个工具都命名为 acme,什么是 acme

  • ACME协议 是由 Let’s Encrypt 组织开发的一种 通信协议,主要 用于服务器和证书颁发机构(CA)之间的交互。它的主要目标是 简化SSL/TLS证书的申请、验证和管理流程。通过ACME协议,开发者可以构建自动化的证书管理工具,使得普通用户也能轻松获取并更新安全的数字证书。

3.2 下载安装 acme.sh

先来到家目录下:

cd ~

执行如下命令,下载并安装 acme.sh

curl https://get.acme.sh | sh -s email=my@example.com

如果出现网络问题:

  • 0curl: (6) Could not resolve host: raw.githubusercontent.com
  • 0curl: (7) Failed connect to raw.githubusercontent.com:443; 拒绝连接

可以执行如下命令:

git clone https://gitee.com/neilpang/acme.sh.git
cd acme.sh
./acme.sh --install -m my@test.com

注意: 这里不要再用官方的 my@example.com 了,这个邮箱已经被禁用了,后面会报错的:

在这里插入图片描述

执行结果如下,说明安装成功了:

如果是通过 git clone 的方式安装的,此时可以删除克隆下来的文件了。

cd ~
rm -rf acme.sh

安装之后,会在 ~ 家目录创建一个 .acme.sh 文件夹,如下所示:

.acme.sh 文件夹中的内容如下:

3.3 申请并下载证书

执行如下命令,通过提交 域名webroot 来申请并下载证书:

sh /root/.acme.sh/acme.sh --issue -d 23jw3585ev35.vicp.fun  --webroot  /data/webroot --server letsencrypt
  • 23jw3585ev35.vicp.fun:由于没有域名,这是我通过 花生壳 工具用 内网穿透 做的临时域名,仅用于测试,实际环境中可以使用自己的域名。
  • --server letsencrypt:告诉 acme.sh 客户端将所有的证书请求都发送到 Let’s Encrypt 的服务器进行处理。
  • 如果需要配置多个域名共用一个证书,可以添加多个 -d 域名 的配置。

这里可能会出现各种报错,在了解这些报错之前,我们需要先了解一下 DV 证书申请包含了哪些过程,因为 我们的报错点都是可以在这些过程中找到出处 的:

  • 过程1,验证当前账号信息: 判断当前账号是否存在,不存在则自动注册。
  • 过程2,验证域名是否可以被DNS正常解析: 如果无法正常解析,则报错。
  • 过程3,验证域名下新生成的文件是否可以正常访问: acme.sh 会在 webroot 路径下随机生成一个文件,然后尝试通过域名访问,并核验文件内容,从而确认域名是否为当前服务器所有。

以上三点 全部验证通过 之后,才可以正常颁发并下载证书。

成功申请并下载证书的结果如下:

在这里插入图片描述

下面列举一下小编在申请证书过程中遇到的几种报错场景:

报错1:没有指定账号

对应过程1:验证当前账号信息。如果之前注册的时候没有指定邮箱,这里执行之后会报错如下:

  • Please update your account with an email address first.

    请先用邮箱注册一个账号。

在这里插入图片描述

我们根据提示执行如下命令,注册一个邮箱地址上去即可

acme.sh --register-account -m my@test.com

执行结果如下:

在这里插入图片描述

再次执行上面的命令即可。

报错2:DNS无法解析的域名

对应过程2:验证域名是否可以被DNS正常解析。如果当前申请证书的域名不存在、没有注册,就会报错:

  • www.domain123.cn:Verify error:DNS problem: NXDOMAIN looking up A for www.domain123.cn - check that a DNS record exists for this domain; DNS problem: NXDOMAIN looking up AAAA for www.domain123.cn - check that a DNS record exists for this domain

    www.domain123.cn域名解析失败,域名的 A记录(用于将域名指向IPv4)和 AAAA记录(用于将域名指向IPv6)没有找到。

在这里插入图片描述

报错3:无效的响应 404

对应过程3:验证域名下新生成的文件是否可以正常访问。如果当前的域名存在,但是脚本新创建的测试文件无法被正常映射出去的话,就会报错:

  • www.myweb.cn:Verify error:170.33.13.246: Invalid response from http://www.myweb.cn/.well-known/acme-challenge/tgvilsyFFlCql3VnyC51rHmGoirf6l9mMPMHiTgmfVI: 404

    www.myweb.cn 验证失败,文件路径不存在:404。

  • 日志中的 Pending, The CA is processing your order, please just wait. (2/30) 就是为了防止网络延迟导致没有访问新生成的文件而 重试

在这里插入图片描述

3.4 配置 Nginx

HTTPS 协议默认使用 443 端口,nginx.conf 中相关的配置内容如下:

http {
	server {
        listen       443 ssl; # https默认为443端口,当然也可以用任何端口。后面ssl用于告诉Nginx在指定的端口上启用SSL/TLS加密
        server_name  example.com; # 你网站的域名(查看说明1)
        
        # 下面输入证书和私钥的地址
        ssl_certificate      certs/my_cert.crt; # 证书(查看说明2)
        ssl_certificate_key  certs/my_cert.key; # 证书对应的私钥文件(查看说明3)
        
        ssl_session_cache    shared:SSL:1m; # 可选配置,设置了 SSL 会话缓存的类型和大小。(具体查看说明5)
        ssl_session_timeout  5m; # 可选配置,设置了 SSL 会话缓存的超时时间为 5 分钟。

        ssl_ciphers ECDHE-RSA-AES128-GCM-SHA256:ECDHE:ECDH:AES:HIGH:!NULL:!aNULL:!MD5:!ADH:!RC4; # 可选配置, 指定了 SSL/TLS 握手过程中允许使用的加密算法的优先级顺序。(具体查看说明7)
        ssl_protocols TLSv1.1 TLSv1.2 TLSv1.3; # 可选配置,指定了允许使用的 SSL/TLS 协议版本。(具体查看说明8)
        ssl_prefer_server_ciphers  on; # 可选配置(具体查看说明9)

        # 指定 webroot 路径
        location / {
            root /data/webroot/;
            access_log   /data/httplogs/root/access.log main;
            error_log    /data/weblogs/root/error.log;
        }
	}
}

配置说明:

  1. server_name域名配置,需要和申请SSL证书的域名保持一致。
  2. ssl_certificate证书文件,包含:服务器的公钥、服务器信息、证书办法机构(CA)的数字签名。可以是 .pem 格式,也可以是 .cer.crt 格式的文件。(.cer和.crt格式除了名称没有区别)
  3. ssl_certificate_key私钥文件,包含证书文件中公钥相对应的私钥,用于对数据进行解密和签名操作,必须严格保密。可以是 .pem 格式,也可以是 .key 格式的文件。
  4. .pem 格式和 .crt/.cer 格式有什么区别?
    • SSL 证书的 PEM 和 CRT/CER 格式都是用于存放证书文件的公钥,有一些区别,但是 大多数情况下可以互换使用
  5. ssl_session_cache:设置了 SSL 会话缓存的类型和大小。启用 SSL 会话缓存可以提高性能,因为它允许客户端在后续连接中重用之前协商的会话参数,避免了重复进行完整的 SSL/TLS 握手过程。
    • shared:表示在所有工作进程之间共享缓存。
    • SSL:是缓存的名称。
    • 1m:表示缓存的最大限制为1M。
  6. ssl_session_timeout:设置 SSL 会话缓存的超时时间,5m 表示5分钟后过期。
  7. ssl_ciphers:设置 SSL/TLS 握手过程中允许使用的加密算法的优先级顺序,优先级从高到低排列。
    • 建议禁用一些不安全的算法(如 NULL、aNULL、MD5、ADH、RC4等)。
  8. ssl_protocols:设置允许使用的 SSL/TLS 协议版本。
    • 建议只启用安全的版本协议,如 TLSv1.1、TLSv1.2、TLSv1.3。
    • 禁用不安全的版本协议,如:SSL v2、SSL v3。
  9. ssl_prefer_server_ciphers:设置 SSL/TLS 握手过程中,优先使用服务器端指定的加密算法,而不是客户端提供的加密算法。这样可以确保使用更安全的加密算法。

3.5 证书过期刷新

我们只需要重新执行申请证书的命令,就可以查看证书的过期时间:

sh /root/.acme.sh/acme.sh --issue -d 23jw3585ev35.vicp.fun  --webroot  /data/webroot --server letsencrypt
  • 23jw3585ev35.vicp.fun:由于没有域名,这是我通过 花生壳 工具用 内网穿透 做的临时域名,仅用于测试,实际环境中可以使用自己的域名。
  • --server letsencrypt:告诉 acme.sh 客户端将所有的证书请求都发送到 Let’s Encrypt 的服务器进行处理。

再次执行即可看到证书过期时间:

在这里插入图片描述

可以通过增加 --force 强制刷新刷新证书:

sh /root/.acme.sh/acme.sh --issue -d 23jw3585ev35.vicp.fun  --webroot  /data/webroot --server letsencrypt

执行结果如下所示:

在这里插入图片描述


四、补充

4.1 同一域名的不同端口,可以共用一个SSL证书吗?

  • 可以的。 SSL 证书是基于域名颁发的,而不是基于端口号。具体配置方式如下所示:
server {
    listen 443 ssl;
    server_name example.com;
    ssl_certificate /path/to/certificate.crt;
    ssl_certificate_key /path/to/private.key;
    ...
}

server {
    listen 8443 ssl;
    server_name example.com;
    ssl_certificate /path/to/certificate.crt;
    ssl_certificate_key /path/to/private.key;
    ...
}

4.2 Nginx 转发 403 问题

403 Forbidden 如果没有自己特殊指定的话,指的是 访问的资源没有权限,nginx中指定的 location 转发后的地址要确保 当前执行 Nginx 命令的 用户有权限访问webroot文件夹才行

整理完毕,完结撒花~🌻





参考地址:

1.nginx配置ssl支持https的详细步骤,https://blog.csdn.net/weixin_45501219/article/details/136825372

2.免费的SSL证书(Let‘s Encrypt / acme),https://blog.csdn.net/weixin_45602663/article/details/126631496

3.DNS解析中的A记录、AAAA记录、CNAME记录、MX记录、NS记录、TXT记录、SRV记录、URL转发等,https://blog.csdn.net/weixin_44388689/article/details/132466543

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

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

相关文章

软件心学格物致知篇(7)软件开发文档写什么

软件心学格物致知篇(7)软件开发文档写什么 前言 当今约束大家生产力的有哪些因素?是编程语言?开发框架?开发IDE?还是自身迫切需要更高水平的技能? 好像上面的每一项技术都在不断发展,也在不断的为我们生…

从零开始搭建Electron项目之运行例程

最好的学习方式就是:给一段能够运行的代码示例。 本文给出了例程资源,以及运行的步骤。 在国内开发electron有一点特别不好,就是如果不爬梯子,下载依赖容易出错。 一、例程资源 到如下路径下载例程到本地。 GitCode - 全球开发者…

基于pytorch_lightning测试resnet18不同激活方式在CIFAR10数据集上的精度

基于pytorch_lightning测试resnet18不同激活方式在CIFAR10数据集上的精度 一.曲线1.train_acc2.val_acc3.train_loss4.lr 二.代码 本文介绍了如何基于pytorch_lightning测试resnet18不同激活方式在CIFAR10数据集上的精度 特别说明: 1.NoActive:没有任何激活函数 2.SparseActiva…

机器学习--线性模型和非线性模型的区别?哪些模型是线性模型,哪些模型是非线性模型?

文章目录 引言线性模型和非线性模型的区别线性模型非线性模型 总结线性模型非线性模型 引言 在机器学习和统计学领域,模型的选择直接影响到预测的准确性和计算的效率。根据输入特征与输出变量之间关系的复杂程度,模型可以分为线性模型和非线性模型。线性…

C语言 | Leetcode C语言题解之第142题环形链表II

题目: 题解: struct ListNode* detectCycle(struct ListNode* head) {struct ListNode *slow head, *fast head;while (fast ! NULL) {slow slow->next;if (fast->next NULL) {return NULL;}fast fast->next->next;if (fast slow) {s…

Linux网络命令——tcpdump

tcpdump是Linux下的一个网络数据采集分析工具,也就是常说的抓包工具 tcpdump 核心参数 tcpdump [option] [proto] [dir] [type] 例如:$ tcpdump -i eth0 -nn -s0 -v port 80 option 可选参数: -i : 选择要捕获的接口,通常是以太…

插卡式仪器模块:音频分析模块(插卡式)

• 24 位分辨率 • 192 KHz 采样率 • 支持多种模拟音频信号的输入/输出 应用场景 • 音频信号分析:幅值、频率、信噪比、THD、THDN 等指标 • 模拟音频测试:耳机、麦克风、扬声器测试,串扰测 音频分析仪 输入阻抗10 TΩ10 TΩ输入范围3…

【C语言】宏详解(下卷)

前言 紧接上卷,我们继续来了解宏。 宏替换的规则 1.在调用宏时,首先对参数进行检查,看看是否包含任何由#define定义的符号。如果是,它们首先被替换。 2.替换文本随后被插入到程序中原来文本的位置。对于宏,参数名被他…

C++类与对象(拷贝与类的内存管理)

感谢大佬的光临各位,希望和大家一起进步,望得到你的三连,互三支持,一起进步 个人主页:LaNzikinh-CSDN博客 文章目录 前言一.对象的动态建立和释放二.多个对象的构造和析构三.深拷贝与浅拷贝四.C类的内存管理总结 前言 …

⌈ 传知代码 ⌋ 以思维链为线索推理隐含情感

💛前情提要💛 本文是传知代码平台中的相关前沿知识与技术的分享~ 接下来我们即将进入一个全新的空间,对技术有一个全新的视角~ 本文所涉及所有资源均在传知代码平台可获取 以下的内容一定会让你对AI 赋能时代有一个颠覆性的认识哦&#x…

基于改进YOLOv5的小目标检测 | 添加CBAM注意机制 + 更换Neck网络之BiFPN + 增加高分辨率检测头

前言:Hello大家好,我是小哥谈。本文针对图像中小目标难以检测的问题,提出了一种基于YOLOv5的改进模型。在主干网络中,加入CBAM注意力模块增强网络特征提取能力;在颈部网络部分,使用BiFPN结构替换PANet结构&…

Linux驱动应用编程(三)UART串口

本文目录 前述一、手册查看二、命令行调试串口1. 查看设备节点2. 使用stty命令设置串口3. 查看串口配置信息4. 调试串口 三、代码编写1. 常用API2. 例程●线程优化●poll优化●select优化(功能和poll一样) 前述 在开始实验前,请一定要检查测试…

【RabbitMQ】RabbitMQ配置与交换机学习

【RabbitMQ】RabbitMQ配置与交换机学习 文章目录 【RabbitMQ】RabbitMQ配置与交换机学习简介安装和部署1. 安装RabbitMQ2.创建virtual-host3. 添加依赖4.修改配置文件 WorkQueues模型1.编写消息发送测试类2.编写消息接收(监听)类3. 实现能者多劳 交换机F…

【深度学习】—— 神经网络介绍

神经网络介绍 本系列主要是吴恩达深度学习系列视频的笔记,传送门:https://www.coursera.org/deeplearning-ai 目录 神经网络介绍神经网络的应用深度学习兴起的原因 神经网络,全称人工神经网络(Artificial Neural Network&#xf…

25.逢七必过

上海市计算机学会竞赛平台 | YACSYACS 是由上海市计算机学会于2019年发起的活动,旨在激发青少年对学习人工智能与算法设计的热情与兴趣,提升青少年科学素养,引导青少年投身创新发现和科研实践活动。https://www.iai.sh.cn/problem/363 题目描述 逢七必过的游戏规则如下:对一…

Linux安装Docker | 使用国内镜像

环境 CentOS7 先确认能够上网 curl www.baidu.com返回该输出说明网络OK 步骤一:安装gcc 和 gcc-c yum -y install gccyum -y install gcc-c步骤二:安装Docker仓库 yum install -y yum-utils接下来配置yum的国内镜像 yum-config-manager --add-re…

激活乡村振兴新动能:推动农村产业融合发展,打造具有地方特色的美丽乡村,实现乡村全面振兴

目录 一、推动农村产业融合发展 1、农业产业链条的延伸 2、农业与旅游业的结合 二、挖掘地方特色,打造美丽乡村 1、保护和传承乡村文化 2、发展特色农业 三、加强基础设施建设,提升乡村品质 1、改善农村交通条件 2、提升农村水利设施 四、促进…

大数据湖一体化运营管理建设方案(49页PPT)

方案介绍: 本大数据湖一体化运营管理建设方案通过构建统一存储、高效处理、智能分析和安全管控的大数据湖平台,实现了企业数据的集中管理、快速处理和智能分析。该方案具有可扩展性、高性能、智能化、安全性和易用性等特点,能够为企业数字化…

水滴型锤片粉碎机:多功能粉碎利器

在现代工业生产中,粉碎机作为一种重要的机械设备,广泛应用于饲料、化工、木材等多个领域。其中,水滴型锤片粉碎机凭借其设计和粉碎能力,成为市场上的热门产品。 水滴型锤片粉碎机其设计灵感来源于水滴的形态。这种设计使得机器在…

vmware-17虚拟机安装教程,安装linux centos系统

下载VMware 1.进入VMware官网:https://www.vmware.com/sg/products/workstation-pro.html 2.向下翻找到,如下界面并点击“现在安装” 因官网更新页面出现误差,现提供vmware17安装包网盘链接如下: 链接:https://pan.b…