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.mzph.cn/news/851630.shtml

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

相关文章

硬盘危机:磁盘损坏无法打开的应对策略

在数字化时代,磁盘作为数据存储和传输的核心设备,其稳定性和安全性至关重要。然而,在日常使用过程中,我们时常会面临磁盘损坏无法打开的困境。这不仅会影响我们的工作效率,还可能造成重要数据的丢失。本文将深入探讨磁…

2024年,计算机相关专业还值得选择吗?

问:随着2024年高考落幕,数百万高三学生又将面临人生中的重要抉择:选择大学专业。在这个关键节点,计算机相关专业是否仍是“万金油”的选择?在过去很长一段时间里,计算机科学与技术、人工智能、网络安全、软…

抖音 根据sec uid获取个人详细信息(性别、年龄、属地、关注数、粉丝数、简介等)

本文带来用户的secuid获取用户信息以及其他基本信息: 话不多说看效果: 第一步输入用户sec_uid 根据secuid获取到用户基本信息: 可以支持接口批量转换,欢迎咨询

从信息泄露到登录后台

信息收集 上谷歌用谷歌语法,经过漫长的翻找发现一处PDF: 是某大学的某系统帮助文档,其中泄露了人员的工号和sfz 尝试登陆 此时,虽然获取了工号和sfz,众所周知,现在很多统一身份认证都是学号/工号sfz后六位…

玩转ChatGPT:最全学术论文提示词分享【下】

学境思源,一键生成论文初稿: AcademicIdeas - 学境思源AI论文写作 本篇文章,是系列文章「最全学术论文提示词」的完结篇。前两篇的内容请到文末链接处跳转👇🏻 11.提交和发布 prompt 1:根据[期刊/会议]指…

如何系统学习vue框架

前言 在软件开发的浩渺星海中,编程规范如同航海的罗盘,为我们指引方向,确保我们的代码之旅能够顺利、高效地到达目的地。无论是个人开发者还是大型团队,编程规范都是提升代码质量、保障项目成功不可或缺的一环。 因此&#xff0c…

人工智能模型对有争议的话题持相反的观点

人工智能模型对有争议的话题持相反的观点 并非所有生成式人工智能模型都是平等的,特别是当涉及到它们如何处理两极分化的主题时。 在2024年ACM公平、问责和透明度(FAccT)会议上发表的一项最新研究中,卡内基梅隆大学、阿姆斯特丹大学和人工智能初创公司h…

【设计模式】结构型-代理模式

在静谧的林间舞台上,代理轻舞着对象的梦想,掌控访问,引领旋律,真实与虚幻间,交织出灵动的诗篇。 文章目录 一、数据库操作的问题二、代理模式三、代理模式的核心组成四、运用代理模式五、代理模式的应用场景六、小结推…

网工请自查,这十个技术问题还不会就out了

号主:老杨丨11年资深网络工程师,更多网工提升干货,请关注公众号:网络工程师俱乐部 下午好,我的网工朋友。 今天我想和大家聊聊几个与我们日常工作紧密相关的技术问题,它们都多多少少地影响了咱们的工作效率…

服务器如何有效解决源IP暴露问题

在现代互联网环境中,服务器的安全性至关重要。源IP暴露不仅增加了服务器遭受DDoS攻击、恶意扫描和数据泄露的风险,还可能影响业务的正常运行。本文将探讨如何利用技术手段,尤其是CDN和防火墙策略,来有效地解决服务器源IP暴露的问题…

数字人贴牌哪家好?需要关注的核心优势有哪些?

随着人工智能时代的发展,数字人蕴含着的广泛的应用场景和庞大的市场需求也逐渐展现在了人们的眼前。在此背景下,数字人成为了一众创业赛道中的大热门,数字人贴牌模式也因此走红。 所谓的数字人贴牌,又称为数字人源码部署和数字人O…

04. fastLED像素参考(颜色设置详解)

fastLED像素参考 原文 Overview 概述 There’s two main pixel types in the library - the CRGB class and the CHSV class. CHSV objects have to be converted to CRGB objects before they can be written out. You can also write CHSV objects into the CRGB array an…

我们离成功有多远呢?只要能完成自己阶段性的目标就算是一次成功

做起一个账号,带好一个团队,经营好一家公司,似乎这些都能叫成功,成功的定义可大可小,而我认为只要能完成自己阶段性的目标就算是一次成功,毕竟每个人学历、背景、阅历、资源、认知都不同,很难同…

重磅!最新JCR分区、中科院分区、影响因子大汇总!

【欧亚科睿学术】 期 刊 影响因子及JCR分区 2023年JCR 2023年6月,科睿唯安(Clarivate Analytics)发布了最新年度期刊引证报告(JCR)。 JCR 变化盘点 ① ESCI和AHCI期刊首次获得影响因子。 据最新数据显示(截止至2023年6月28日),目前共有SCIE期刊95…

在AWS上运行的EKS Elastic Kubernetes Service 创建集群Cluster,Node group, Nodes

1. 前提条件 AWS Account: https://aws.amazon.com/free/Installing KubeCtl CLI https://docs.aws.amazon.com/eks/latest/userguide/getting-started-eksctl.htmlEKS Cluster RoleIAM Role for Node GroupVPCEC2 Key Pair which can be used to SSH to the worker nodesAWS …

【ppyoloe+】19届智能车完全模型组非官方基线

基于十九届智能车百度完全模型组线上赛baseline修改 调整参数最高能到0.989吧 一、环境准备 1.安装PaddleDetection In [1] # 解压PaddleDetection压缩包 %cd /home/aistudio/data/data267567 !unzip -q PaddleDetection-release-2.6.zip -d /home/aistudio /home/aistud…

【教程】从0开始搭建大语言模型:实现Attention机制

从0开始搭建大语言模型 从0开始搭建大语言模型:实现Attention机制建模长序列存在的问题使用attention机制获得数据间的依赖Self-attention介绍带有可训练权重的self-attention1.生成Q,K,V变量2.计算attention score3.attention weight的获得4…

支付交易——在线支付系统基本概念

摘要 本文聚集于实战,只讲解最实用的知识点,至于支付起源、在线支付发展历程等科普知识,感兴趣的读者可参考其它优秀的支付类书籍或网络上其它优秀的文章。本章内容对大部分专业概念进行了极致简化,以便更好地帮助读者入门。实际…

鸿蒙轻内核M核源码分析系列二十 Newlib C

LiteOS-M内核LibC实现有2种,可以根据需求进行二选一,分别是musl libC和newlibc。本文先学习下Newlib C的实现代码。文中所涉及的源码,均可以在开源站点https://gitee.com/openharmony/kernel_liteos_m 获取。 使用Musl C库的时候&#xff0c…

具有可编程电流限制的1.5A电源开关LPW5210用于5V或USB供电输出过流保护只要3毛

前言 适合要求反应时间较快的保护电路,保险丝或自恢复保险丝也能起到保护作用,但断开电流是额定电流的一倍,过流较小时,甚至需要数秒或更长的时间才能保护,因此半导体的过流保护开关更合适,相对成本要高一…