当前位置: 首页 > article >正文

快速上手:采用Let‘sEncrypt免费SSL证书配置网站Https (示例环境:Centos7.9+Nginx+Let‘sEncrypt)

1 关于Let’s Encrypt与Cerbot DNS验证

Let’s Encrypt 是一个提供 免费证书认证机构

Cerbot 是 Let’s Encrypt 提供的一个工具,用于自动化生成、验证和续订证书。

DNS验证是 Cerbot 支持的验证方式之一。相比 HTTP 验证或 TLS-ALPN 验证,DNS 验证更灵活,可以用于获取任意域名(如子域名或裸域名)的证书,无需直接访问服务器。 DNS 验证通过在目标域名的 DNS 记录中添加特定的文本记录(TXT 记录)来证明 对该域名的控制权。认证机构会查询域名的 DNS TXT 记录以验证域名所有权。

以下是 DNS 验证的具体步骤和背后逻辑:

(1) 生成挑战内容

  • Cerbot 向 Let’s Encrypt 发送证书申请,提供需要认证的域名。
  • Let’s Encrypt 返回一个挑战(Challenge),内容包括一个随机字符串(Challenge Token)。

(2) 计算验证字符串

  • Cerbot 结合 Challenge Token 和账户密钥生成一个验证字符串。
    • 验证字符串 = SHA256(account_key + token) 或类似算法的结果。
  • 这个字符串需要通过 DNS TXT 记录发布。

(3) 添加 DNS TXT 记录

  • Cerbot 会提示用户手动或通过 API 在域名的 DNS 配置中添加一条 TXT 记录:
    • 记录名: _acme-challenge.<your-domain>
    • 记录值: 验证字符串

例如,对于域名 example.com

_acme-challenge.example.com. IN TXT "验证字符串"

(4) 验证记录

  • Let’s Encrypt 会查询域名的 DNS 服务器,寻找 _acme-challenge.<your-domain> 的 TXT 记录。
  • 如果记录值与预期验证字符串匹配,则证明申请者对该域名具有控制权。

(5) 签发证书

  • 验证成功后,Let’s Encrypt 会签发证书,Cerbot 会下载并保存证书。

Let’s Encrypt官网

参考教程

2 网站HTTPS配置最佳实践

  • 使用Cerbot生成Let’s Encrypt证书、DNS厂家添加TXT记录、继续完成Cerbot的控制权认证

  • Nginx对网站进行Https配置(HTTP的重定向到HTTPS)

  • 业务服务的HTTPS配置,这里有两种方式(按需):

    • 🤷‍♂️服务本身支持HTTPS(一般开发后业务服务为http协议接口),如SpringBoot Web项目,可使用java keytool生成密钥配置ssl。若业务服务本身不支持https,不建议调整业务模块,保证业务开发的纯净。
    • 👍通过Nginx对接口进行转发,http重定向为https,这种方式是推荐的。

3 具体操作

3.1 服务器安装cerbot工具

cerbot用来管理Let’s Encrypt的证书(申请、续约)。我的服务器操作系统为centos7.9,执行的有效操作如下:

# 安装cerbot工具,cerbot用来管理Let's Encrypt的证书(申请、续约)
sudo yum install certbot

查看certbot版本验证工具安装是否成功:

[root@vm ~]# certbot --version
# 正确输出cerbot工具版本
certbot 1.11.0

3.2 cerbot使用 DNS 验证获取单域名证书

3.2.1 cerbot验证与证书生成(交互式)

  1. 键入下列命令,为指定域名生成证书(交互式方式进行,用户多次键入信息来完成验证信息的采集与证书的颁发)
sudo certbot certonly --manual --preferred-challenges dns -d demo.cn -d www.demo.cn
  1. 用户填入信息(邮箱)等用来订阅域名信息服务(如Let’s Encrypt的证书升级、到期通知等)

  1. 验证服务器与域名归属相关操作
    (1)cerbot工具输出dns解析txt值
    (2)dns解析后台添加txt的解析记录(两条)

  1. cerbot工具进行验证,验证通过,输出证书到服务器

3.2.2 Nginx配置

  1. 修改nginx配置(主要是配置站点重定向、启用ssl、配置证书路径)

nginx配置非常灵活且具有扩展性,其配置目录大致如下:

- /etc/nginx/
  | - nginx.conf 主配置文件(定义了全局配置、事件模块、HTTP 模块等核心设置)
  | - ./conf.d/ 配置目录(此目录一般被主配置文件中被include)
        | - www.demo.cn.conf (自己的站点配置,针对www.demo.cn的https配置就在这里)  
        | - ...

# 使用的Nginx版本
[root@vm ~]# nginx -v
nginx version: nginx/1.20.1

www.demo.cn.conf配置文件内容:

server {
    listen 80;
    server_name demo.cn www.demo.cn;

    # Redirect all HTTP requests to HTTPS
    return 301 https://$host$request_uri;
}

server {
    listen 443 ssl http2;
    server_name demo.cn www.demo.cn;

    root /usr/share/nginx/html;
    index index.html index.htm;

    # SSL Configuration
    ssl_certificate /etc/letsencrypt/live/demo.cn/fullchain.pem;
    ssl_certificate_key /etc/letsencrypt/live/demo.cn/privkey.pem;

    ssl_session_cache shared:SSL:1m;
    ssl_session_timeout 10m;
    ssl_ciphers HIGH:!aNULL:!MD5;
    ssl_prefer_server_ciphers on;

    # Additional security headers (optional)
    add_header Strict-Transport-Security "max-age=31536000; includeSubDomains" always;

    # Error pages
    error_page 404 /404.html;
    location = /404.html {
    }

    error_page 500 502 503 504 /50x.html;
    location = /50x.html {
    }

    # Default location
    location / {
        try_files $uri $uri/ =404;
    }
}

  1. 重启nginx刷新配置
# 重启nginx
sudo systemctl restart nginx
# 查看nginx状态
sudo systemctl status nginx
  1. 清空缓存,查看网站

没错,到此为止网站已经完成了https的配置,有几点说明:

  • nginx.conf配置未作修改!但需要检查nginx.conf配置中是否include了conf.d配置目录。
  • 如果之前网站接入的服务为http,需要对服务进行调整使协议兼容,可以通过使用nginx反向代理服务为https(推荐),或者改造服务自身支持https。
  1. 通过nginx反向代理API服务为https的配置大致如下
server {
    listen 443 ssl http2;
    server_name demo.cn www.demo.cn;

    ...
  
    location /your-api/module1 {
        allow 127.0.0.1;       # 本地回环地址
        allow otherip; # 允许指定的 IP 地址
        allow ::1;             # IPv6 本地地址
        deny all;              # 禁止其他所有来源
  
        proxy_pass http://127.0.0.1:8080;
        proxy_set_header Host $host;
        proxy_set_header X-Real-IP $remote_addr;
        proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
    }

    location /your-api/module2 {
        allow 127.0.0.1;       # 本地回环地址
        allow otherip; # 允许指定的 IP 地址
        allow ::1;             # IPv6 本地地址
        deny all;              # 禁止其他所有来源
  
        proxy_pass http://127.0.0.1:8081;
        proxy_set_header Host $host;
        proxy_set_header X-Real-IP $remote_addr;
        proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
    }
  
    ...
    
}

3.2.3 cerbot证书续费

certbot certonly --renew-by-default -d demo.cn -d www.demo.cn
# 会输出1、2两种验证方式,我采用的是模式2

续费命令说明:

  1. certbot
    • Certbot 是一个用于申请和管理 Let’s Encrypt SSL 证书的工具。
  2. certonly**
    • 表示只申请证书,不自动安装或配置 Web 服务器(如 Nginx 或 Apache)。
    • 适合手动配置证书的场景。
  3. --renew-by-default
    • 如果证书已经存在,Certbot 会尝试续费(renew)而不是重新申请。
    • 如果证书不存在,Certbot 会申请新证书。
  4. -d demo.cn -d www.demo.cn
    • -d 参数用于指定域名。
    • 这里申请的是 demo.cnwww.demo.cn 两个域名的证书。
    • 多个 -d 参数表示申请一个包含多个域名的证书(SAN 证书)。

两种验证域名所有权:

  1. Spin up a temporary webserver (standalone)
    • Certbot 会启动一个临时的 Web 服务器来完成 HTTP-01 验证。
    • 适用场景:如果你没有运行 Web 服务器(如 Nginx 或 Apache),或者可以暂时停止 Web 服务器。
    • 注意事项:需要确保 80 端口未被占用,或者暂时停止 Web 服务器。
  2. Place files in webroot directory (webroot)
    • Certbot 会将验证文件放置在你的 Web 服务器的根目录(如 /var/www/html),通过 HTTP 访问验证文件。
    • 适用场景:如果你正在运行 Web 服务器(如 Nginx 或 Apache),并且不想停止服务。
    • 注意事项:需要指定 Web 根目录路径。

http://www.kler.cn/a/471375.html

相关文章:

  • 二维数组:求最大元素及其所在的行坐标及列坐标(PTA)C语言
  • uniapp 微信小程序 自定义日历组件
  • Vue项目中的问题汇总(持续更新中)
  • 最好用的图文识别OCR -- PaddleOCR(2) 提高推理效率(PPOCR模型转ONNX模型进行推理)
  • Apache Celeborn 在B站的生产实践
  • 【HarmonyOS 5.0】从0到1开发购物应用App(二):登录页对接口
  • 屏幕显示技术再突破!海信RGB- Mini LED,让色彩“活”起来
  • 【计算机操作系统:三、操作系统的用户接口】
  • nginx-灰度发布策略(基于cookie)
  • 02.02、返回倒数第 k 个节点
  • (长期更新)《零基础入门 ArcGIS(ArcMap) 》实验七----城市三维建模与分析(超超超详细!!!)
  • Docker镜像下载链接-开发工具集
  • 交换机划分Vlan配置
  • Objective-C语言的数据结构
  • 添加系统级res资源包
  • Apache Paimon-实时数据湖
  • pyhton 掩码 筛选显示
  • Python中的时间管理模块:whenever
  • nuxt3发请求
  • 秋叶大神中文版Stable Diffusion下载安装使用教程
  • PHP二维数组去除重复值
  • 9. C 语言 循环控制结构详解
  • Flutter 鸿蒙化 flutter和鸿蒙next混和渲染
  • 图漾相机基础操作
  • 更换WordPress主题的基础知识及注意事项
  • B-tree 数据结构详解