Lets-Encrypt配置泛域名证书

参考教程:Create Let’s Encrypt Wildcard Certificates in NGINX

Let’s Encrypt 是一个免费、开放且自动化的证书颁发机构,由 Linux 基金会进行日常管理维护。它为大量网站提供 TLS 证书,帮助网站轻松实现 HTTPS 加密。下面我将介绍如何利用 Let’s Encrypt 为网站生成免费的泛域名 SSL 证书。

一、环境

❯ lsb_release -a
No LSB modules are available.
Distributor ID: Ubuntu
Description:    Ubuntu 20.04.6 LTS
Release:        20.04
Codename:       focal

❯ uname -i
x86_64

❯ nginx -v
nginx version: nginx/1.18.0 (Ubuntu)

二、安装Certbot

Certbot 是一个自动化的工具,用于获取和续签 Let’s Encrypt 的 SSL 证书。

# 安装 snap
sudo apt install snap  -y
sudo snap install core
sudo snap refresh core

# 通过 snap 安装 certbot
sudo snap install --classic certbot
# 创建软连接,避免 sudo 下找不到命令
sudo ln -s /snap/bin/certbot /usr/bin/certbot

三、获取泛域名证书

通过 Certbot 获取泛域名证书。泛域名证书允许我们为一个域名及其所有子域名使用同一个 SSL 证书。

sudo certbot certonly --manual --preferred-challenges=dns --server https://acme-v02.api.letsencrypt.org/directory --agree-tos -d "*.codejerry.cn"

参数释义:

  • certonly: 仅获取证书,不尝试安装。
  • --manual: 手动模式,需手动执行一些步骤,例如添加 DNS 记录。
  • --preferred-challenges=dns: 使用 DNS 验证域名所有权。
  • --server: 指定 ACME 服务器的 URL。
  • --agree-tos: 同意服务条款。
  • -d: 指定获取证书的域名。

在这个过程中,你要去域名托管平台(如阿里云),添加对应的TXT解析记录, Certbot 会指导你通过添加 DNS TXT 记录来验证你对域名的控制权。完成验证后,证书(两个文件)将被颁发,并保存在 /etc/letsencrypt/live/codejerry.cn/ 目录下:

Successfully received certificate.
Certificate is saved at: /etc/letsencrypt/live/codejerry.cn/fullchain.pem
Key is saved at:         /etc/letsencrypt/live/codejerry.cn/privkey.pem
This certificate expires on 2024-05-04.
These files will be updated when the certificate renews.

其中 fullchain.pem 是证书文件,privkey.pem 是私钥文件。

这里也可以不用 manual 手动添加解析,但需要借助第三方托管平台,比如 cloudflare,当前暂不考虑。

下一步,3个月后更新证书,按照下面的提示即可(重新运行之前的指令)

NEXT STEPS:
- This certificate will not be renewed automatically. Autorenewal of --manual certificates 
requires the use of an authentication hook script (--manual-auth-hook) but one was not provided. 
To renew this certificate, repeat this same certbot command before the certificate's expiry date.

四、普通域名证书

对于单个域名的证书,可以省略 DNS 验证步骤。假设域名 mydomain.codejerry.cn 已经解析到服务器 IP,可以直接运行以下命令:

sudo certbot certonly --server https://acme-v02.api.letsencrypt.org/directory --agree-tos -d "mydomain.codejerry.cn"

按照提示操作,选择 Nginx 插件进行验证。

五、配置 Nginx

生成证书后,需要在 Nginx 配置中添加 SSL 相关设置,比如:

server {
    listen 443 ssl;
    server_name codejerry.cn test.codejerry.cn;

    ssl_certificate /etc/letsencrypt/live/codejerry.cn/fullchain.pem;
    ssl_certificate_key /etc/letsencrypt/live/codejerry.cn/privkey.pem;
    ...
}

执行 sudo nginx -s reload 重启 Nginx 生效。

六、证书自动更新

Let’s Encrypt 的证书有效期为 90 天,因此需要定期更新。可以通过设置 crontab 定时任务来自动更新证书(仅对单域名有效)

sudo crontab -e
# 添加以下内容
0 0 1 * * /usr/bin/certbot renew --quiet

注:自动更新未测试过,不确定有效

七、证书迁移

如果想在服务器B上的相同域名下使用这个证书,不用重新获取,迁移过去即可,方法如下:

  1. cd到证书路径下,查看证书,发现证书是软链接的

  2. 根据软链接的提示找到证书源文件,发现会有四个文件。原证书文件路径在/etc/letsencrypt/archive/codejerry.cn

  3. 进入上边的路径,然后将使用的两个文件内容重定向出来

    cd /etc/letsencrypt/archive/codejerry.cn
    cat fullchain1.pem > full
    cat privkey1.pem > privkey
    
  4. 将full和privkey两个文件复制到服务器B即可

八、小结

通过上述步骤,可以为你的网站配置泛域名或普通域名的 SSL 证书,提高网站的安全性和可信度。

  • 17
    点赞
  • 28
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
Certbot 是一个开源的工具,用于自动化安装和更新 SSL/TLS 证书。目前,Certbot 官方并不支持 Windows 操作系统。但是,有一些第三方开发者已经为 Windows 平台提供了一些替代方案。 以下是一个使用 Certbot 在 Windows 上运行制作域名证书的指南: 1. 安装 Certbot-ACME-Installer:这是一个基于 PowerShell 的脚本,可用于在 Windows 上自动安装和配置 Certbot。此脚本是由 Certbot 官方社区维护的,可以在 GitHub 上找到。在安装前请确保已经安装了 PowerShell 2.0 及以上版本。 2. 运行 Certbot-ACME-Installer:在 PowerShell 中执行以下命令,即可安装 Certbot: ``` Set-ExecutionPolicy Bypass -Scope Process -Force; ` iex ((New-Object System.Net.WebClient).DownloadString('https://dl.eff.org/certbot-auto.ps1')) ``` 安装完成后,会在 `C:\Program Files (x86)\Certbot` 目录下生成 Certbot 的可执行文件。 3. 生成域名证书:在 PowerShell 中执行以下命令,即可生成域名证书: ``` certbot-auto certonly --server https://acme-v02.api.letsencrypt.org/directory --manual --preferred-challenges dns-01 --email admin@example.com --agree-tos -d example.com -d *.example.com ``` 说明: - `certonly`:表示只生成证书,不进行安装。 - `--server https://acme-v02.api.letsencrypt.org/directory`:表示使用 Let's Encrypt 的 ACME v2 API。 - `--manual`:表示手动进行验证。 - `--preferred-challenges dns-01`:表示使用 DNS 验证方式。 - `--email admin@example.com`:表示管理员邮箱。 - `-d example.com -d *.example.com`:表示需要生成证书域名,其中 `example.com` 为主域名,`*.example.com` 为域名。 4. 验证域名:在运行以上命令后,Certbot 会提示您添加 DNS 记录。请按照提示,在您的 DNS 服务商中添加相应的 TXT 记录,以完成域名验证。 5. 下载证书:验证通过后,Certbot 会在 `C:\Program Files (x86)\Certbot\live\example.com` 目录下生成证书文件。您可以将 `cert.pem` 和 `privkey.pem` 文件下载到本地,以备后续使用。 需要注意的是,以上的指南并非 Certbot 官方支持的方案,使用时需要自行承担风险。在使用前请仔细阅读相关文档和指南,确保您的系统安全和稳定。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值