使用 Let’s Encrypt 免费申请泛域名 SSL 证书,并实现自动续期
<h1 id="使用-lets-encrypt-免费申请泛域名-ssl-证书并实现自动续期">使用 Let’s Encrypt 免费申请泛域名 SSL 证书,并实现自动续期</h1><p></p><div class="toc"><div class="toc-container-header">目录</div><ul><li>使用 Let’s Encrypt 免费申请泛域名 SSL 证书,并实现自动续期<ul><li>🛠️ 环境准备</li><li>💡 什么是 Let’s Encrypt?</li><li>🧠 Let’s Encrypt 证书颁发原理<ul><li>1. <strong>域名验证</strong></li><li>2. <strong>证书生成</strong></li><li>3. <strong>证书安装</strong></li><li>4. <strong>自动续期</strong></li></ul></li><li>🛠️ Certbot 的工作原理</li><li>📦 安装 Certbot<ul><li>Linux 系统</li><li>其他系统平台</li></ul></li><li>🌐 单域名 SSL 证书<ul><li>🔒 申请单域名 SSL 证书</li><li>🔄 单域名自动续期</li></ul></li><li>🌐 泛域名 SSL 证书<ul><li>🛡️ 申请泛域名 SSL 证书<ul><li>使用 DNS 验证申请泛域名证书</li></ul></li><li>🔄 泛域名设置自动续期<ul><li>1. <strong>创建自动化 DNS 脚本</strong></li><li>2. <strong>配置自动续期命令</strong></li><li>3. <strong>配置 Crontab 定期续期任务</strong></li><li>4. <strong>重载 Nginx 配置</strong></li><li>5. <strong>验证自动续期配置</strong></li><li>🔍 深入解读</li><li>✅ 配置完成后的效果</li></ul></li></ul></li><li>📁 申请的 SSL 证书文件所在目录<ul><li>nginx配置证书示例</li></ul></li><li>🔍 验证 HTTPS 配置</li><li>🛡️ 常见问题及解决方法<ul><li>1. <strong>DNS 验证失败</strong></li><li>2. <strong>Nginx 配置冲突</strong></li></ul></li><li>🎉 总结</li><li>🔗 参考链接</li></ul></li></ul></div><p></p>
<blockquote>
<p>在如今的互联网环境中,为网站配置 SSL 证书已成为安全的标配。本文将介绍如何使用 <strong>Let’s Encrypt</strong> 免费获取泛域名 SSL 证书,并实现自动续期,为你的网站保驾护航。</p>
</blockquote>
<h2 id="️-环境准备">🛠️ 环境准备</h2>
<p>在开始之前,确保你具备以下条件:</p>
<ul>
<li>一台可以访问互联网的服务器(Linux 环境,如 Ubuntu/CentOS)。</li>
</ul>
<ul>
<li><strong>Root</strong> 权限或 <code>sudo</code> 权限。</li>
<li>一个已解析的域名(本文以 <code>example.com</code> 为例)。</li>
</ul>
<h2 id="-什么是-lets-encrypt">💡 什么是 Let’s Encrypt?</h2>
<p><strong>Let’s Encrypt</strong> 是一个免费的、自动化的、开放的证书颁发机构(CA),提供免费 SSL 证书。它的目标是让所有网站都能轻松实现 HTTPS 加密,保障用户数据的安全。通过 <strong>Let’s Encrypt</strong>,你可以为你的主域名、子域名,甚至泛域名配置安全证书,而且过程完全自动化,不需要手动申请和管理证书,官方推荐使用 Certbot。</p>
<h2 id="-lets-encrypt-证书颁发原理">🧠 Let’s Encrypt 证书颁发原理</h2>
<p>Let’s Encrypt 证书的颁发是通过 <strong>自动化的认证流程</strong> 完成的,以下是基本流程:</p>
<h3 id="1-域名验证">1. <strong>域名验证</strong></h3>
<p>在申请证书之前,Let’s Encrypt 必须验证你对所申请域名的控制权。这是通过以下几种方式进行的:</p>
<ul>
<li><strong>HTTP-01 验证</strong>:Let’s Encrypt 向你请求创建一个特定的文件,并放在你网站的指定路径下。它通过访问该文件来验证你是否控制该域名。</li>
<li><strong>DNS-01 验证</strong>:Let’s Encrypt 提供一条 DNS TXT 记录,要求你将其添加到域名的 DNS 设置中。它通过检查 DNS 记录来验证你对域名的控制权。</li>
</ul>
<p>对于 <strong>泛域名证书</strong>,必须使用 <strong>DNS-01</strong> 验证方式,因为 HTTP 验证不能跨域名层级进行。</p>
<h3 id="2-证书生成">2. <strong>证书生成</strong></h3>
<p>一旦验证成功,Let’s Encrypt 会生成一个 SSL 证书,并将其发放给申请者。这个证书包含了公钥和域名信息,任何人都可以通过该证书与网站进行安全通信。</p>
<h3 id="3-证书安装">3. <strong>证书安装</strong></h3>
<p>证书的安装你可以选择自己手动安装,我自己是手动安装的,因为我用的是docker版的nginx服务器。你也可以由 <strong>Certbot</strong> 自动完成,前提是你已经在服务器上安装 <strong>Nginx</strong> 或 <strong>Apache</strong> 等服务器。Certbot 会将证书安装到 Web 服务器(如 Nginx 或 Apache)上,并配置好相应的加密设置,自动安装会更方便,动手配置更灵活,比如申请证书和 Web 服务器不在同一台电脑上就需要手动。</p>
<h3 id="4-自动续期">4. <strong>自动续期</strong></h3>
<p>Let’s Encrypt 的证书有效期为 <strong>90 天</strong>,因此需要定期续期。Certbot 自动进行续期验证,确保你的网站不会因为证书过期而遭到用户的安全警告。</p>
<h2 id="️-certbot-的工作原理">🛠️ Certbot 的工作原理</h2>
<p><strong>Certbot</strong> 是一个命令行工具,用于自动化整个 SSL 证书的管理流程。它可以做以下几件事:</p>
<ul>
<li><strong>申请证书</strong>:使用 ACME 协议从 Let’s Encrypt 获取证书。</li>
<li><strong>验证域名所有权</strong>:通过 HTTP-01 或 DNS-01 验证确保你拥有该域名。</li>
<li><strong>安装证书</strong>:将证书自动安装到你的 Web 服务器,并配置相关的加密参数。</li>
<li><strong>续期证书</strong>:定期自动续期证书,避免证书过期。</li>
</ul>
<p>Certbot 的核心工作是通过 <strong>ACME 协议</strong>(自动证书管理环境)与 Let’s Encrypt 通信。ACME 是一套标准协议,用于自动化证书申请、验证和安装的过程。Certbot 使用 ACME 协议与 Let’s Encrypt 进行通信,确保你的网站能够通过安全的 HTTPS 连接。</p>
<h2 id="-安装-certbot">📦 安装 Certbot</h2>
<p><strong>Certbot</strong> 是由 <strong>Electronic Frontier Foundation (EFF)</strong> 提供的一个开源工具,用于自动化从 Let’s Encrypt 获取和管理 SSL 证书。Certbot 会自动为你处理证书申请、安装和续期等过程。</p>
<h3 id="linux-系统">Linux 系统</h3>
<p>推荐使用 Linux 的 snap 包管理工具安装Certbot,支持snap后可以使用如下命令安装Certbot</p>
<pre><code class="language-bash">sudo snap install --classic certbot #安装Certbot
sudo ln -s /snap/bin/certbot /usr/bin/certbot #创建一个符号链接,确保可以执行certbot命令(相当于快捷方式)
</code></pre>
<h3 id="其他系统平台">其他系统平台</h3>
<p>参考Certbot官网<br>
<img src="https://img2024.cnblogs.com/blog/1552138/202411/1552138-20241110164216901-1436023265.png" alt="" loading="lazy"></p>
<h2 id="-单域名-ssl-证书">🌐 单域名 SSL 证书</h2>
<h3 id="-申请单域名-ssl-证书">🔒 申请单域名 SSL 证书</h3>
<p>如果你只需要为单个域名(如 <code>example.com</code> 和 <code>www.example.com</code>)申请证书,可以使用以下命令:</p>
<pre><code class="language-bash">sudo certbot --nginx -d example.com -d www.example.com
</code></pre>
<p>--nginx 需要服务器预先安装nginx,certbot获取到证书后会自动通过修改nginx的配置将证书安装到nginx上。</p>
<p>根据提示输入邮箱地址,并同意服务条款,Certbot 将自动完成证书申请和安装。</p>
<h3 id="-单域名自动续期">🔄 单域名自动续期</h3>
<p>Let’s Encrypt 证书的有效期为 <strong>90 天</strong>,为了避免证书过期,我们可以使用 <strong>Cron Job</strong> 设置自动续期。</p>
<p>首先,你可以手动测试续期是否正常:</p>
<pre><code class="language-bash">sudo certbot renew --dry-run
</code></pre>
<p>如果没有报错,可以继续配置自动续期任务:</p>
<pre><code class="language-bash">sudo crontab -e
</code></pre>
<p>在打开的编辑器中添加以下行,表示每天凌晨 2 点执行自动续期任务:</p>
<pre><code class="language-bash">0 2 * * * /usr/bin/certbot renew --quiet
</code></pre>
<p><code>--quiet</code> 参数表示静默模式,不会输出非错误信息。</p>
<blockquote>
<p>单域名的操作非常简单,就说到这里!!!</p>
</blockquote>
<h2 id="-泛域名-ssl-证书">🌐 泛域名 SSL 证书</h2>
<h3 id="️-申请泛域名-ssl-证书">🛡️ 申请泛域名 SSL 证书</h3>
<p>泛域名证书(Wildcard Certificate)可以为同一主域名下的所有子域名提供 HTTPS 支持。例如,<code>*.example.com</code> 可以覆盖 <code>blog.example.com</code>、<code>api.example.com</code> 等子域名。</p>
<h4 id="使用-dns-验证申请泛域名证书">使用 DNS 验证申请泛域名证书</h4>
<p>Let’s Encrypt 要求通过 <strong>DNS-01</strong> 验证来申请泛域名证书。运行以下命令:</p>
<pre><code class="language-bash">sudo certbot certonly --manual --preferred-challenges dns -d *.example.com -d example.com
</code></pre>
<p>Certbot 会要求你在 DNS 中创建一个特定的 <strong>TXT 记录</strong> 记录以验证域名的所有权。</p>
<pre><code class="language-TXT">_acme-challenge.example.comINTXT"certbot给出的随机字符串"
</code></pre>
<p>前往你的域名 DNS 管理页面,添加该记录后,返回命令行按下 <code>Enter</code>。<br>
如图:<br>
<img src="https://img2024.cnblogs.com/blog/1552138/202411/1552138-20241110164310063-1858647968.png" alt="" loading="lazy"><br>
大概等几十秒钟,确保 DNS 记录在全网传播开来,Certbot 可以查询到。<br>
Certbot 在执行验证时会发起 DNS 查询,如果能找到所需的 TXT 记录并验证其值,认证就会成功,然后就会颁发证书。证书颁发后,这条 <strong>TXT 记录</strong> 就可以删除了。</p>
<p>这个是手动添加删除 DNS 对应的 TXT 记录,这里只是演示Certbot颁发证书的过程,实际情况下最好采用自动化脚本添加和删除 DNS 的 TXT 解析记录。</p>
<h3 id="-泛域名设置自动续期">🔄 泛域名设置自动续期</h3>
<p>Let’s Encrypt 颁发的 SSL 证书有效期为 <strong>90 天</strong>,为了避免证书过期导致网站 HTTPS 中断,<strong>自动续期</strong> 是必须要配置的。对于 <strong>泛域名证书</strong>,由于使用了 <strong>DNS-01 验证</strong>,因此我们也需要使用相应的自动化脚本来管理 DNS TXT 记录,从而实现自动续期。由于我购买的是腾讯云域名,这里我们以 <strong>腾讯云DNSPod</strong> 的 API 为例,来配置自动续期。</p>
<h4 id="1-创建自动化-dns-脚本">1. <strong>创建自动化 DNS 脚本</strong></h4>
<p>首先,我们需要编写两个脚本用于处理 <strong>DNS-01</strong> 验证的 DNS 记录添加和删除。假设你已经安装了 <strong>腾讯云 CLI 工具 (tccli)</strong>,,以下是 <code>dnspod.sh</code> 脚本的内容:<br>
tccli安装和使用参考 腾讯云 CLI 工具</p>
<pre><code class="language-bash">#!/bin/bash
RECORD_FILE="/tmp/_acme-challenge.${CERTBOT_DOMAIN}_${CERTBOT_VALIDATION}"
if ! command -v tccli >/dev/null; then
echo "TCCLI is required: https://cloud.tencent.com/document/product/440" 1>&2
exit 1
fi
if [ "$1" = "clean" ]; then
# 删除 DNS TXT 记录
RECORD_ID=$(cat ${RECORD_FILE})
if [ -n "${RECORD_ID}" ]; then
tccli dnspod DeleteRecord --cli-unfold-argument \
--Domain ${CERTBOT_DOMAIN} \
--RecordId ${RECORD_ID} \
>/dev/null
fi
rm -f ${RECORD_FILE}
else
# 创建 DNS TXT 记录
RECORD_ID=$(
tccli dnspod CreateRecord --cli-unfold-argument \
--Domain ${CERTBOT_DOMAIN} \
--SubDomain _acme-challenge \
--RecordType TXT \
--RecordLine 默认 \
--Value ${CERTBOT_VALIDATION} \
--TTL 600 \
| grep "RecordId" | grep -Eo "+"
)
echo ${RECORD_ID} > ${RECORD_FILE}
sleep 20 # 等待 DNS 记录传播
fi
</code></pre>
<p>脚本中涉及到一些环境变量比如<code>CERTBOT_DOMAIN</code>、<code>CERTBOT_VALIDATION</code>等等,这是由certbot自动将相关的环境变量传递给这些脚本的。</p>
<blockquote>
<p>参考:Certbot DNS验证前后的钩子</p>
</blockquote>
<h4 id="2-配置自动续期命令">2. <strong>配置自动续期命令</strong></h4>
<p>我们使用 <code>certbot</code> 的 <code>--manual-auth-hook</code> 和 <code>--manual-cleanup-hook</code> 参数,调用 <code>dnspod.sh</code> 脚本来自动添加和清理 DNS 记录:</p>
<pre><code class="language-bash">certbot renew --manual --preferred-challenges=dns \
--manual-auth-hook "/path/to/dnspod.sh" \
--manual-cleanup-hook "/path/to/dnspod.sh clean" \
--deploy-hook "/path/to/renew_and_reload_nginx.sh"
</code></pre>
<ul>
<li><strong><code>--manual-auth-hook</code></strong>:在验证开始时调用,用于创建 DNS TXT 记录。</li>
<li><strong><code>--manual-cleanup-hook</code></strong>:在验证结束后调用,用于清理 DNS TXT 记录。</li>
<li><strong><code>--deploy-hook</code></strong>:在证书更新成功后调用,用于重启并加载 Nginx 最新配置。</li>
</ul>
<h4 id="3-配置-crontab-定期续期任务">3. <strong>配置 Crontab 定期续期任务</strong></h4>
<p>编辑 <strong>Crontab</strong> 文件,添加以下行,实现每 10 天凌晨 2 点自动尝试续期证书:</p>
<pre><code class="language-bash">0 2 */10 * * root certbot renew --manual --preferred-challenges=dns \
--manual-auth-hook "/path/to/dnspod.sh" \
--manual-cleanup-hook "/path/to/dnspod.sh clean" \
--deploy-hook "/path/to/renew_and_reload_nginx.sh" >> /var/log/certbot-renew.log 2>&1
</code></pre>
<h4 id="4-重载-nginx-配置">4. <strong>重载 Nginx 配置</strong></h4>
<p>以下是 <code>renew_and_reload_nginx.sh</code> 的内容,用于在证书续期后重启 Nginx 服务(假设使用 Docker 运行 Nginx):</p>
<pre><code class="language-bash">#!/bin/bash
# 停止 nginx 服务
docker compose -f /path/to/compose.yml stop nginx
# 重新启动 nginx 服务
docker compose -f /path/to/compose.yml up -d nginx
</code></pre>
<h4 id="5-验证自动续期配置">5. <strong>验证自动续期配置</strong></h4>
<p>在完成配置后,可以运行以下命令来测试续期流程,确保一切正常:</p>
<pre><code class="language-bash">certbot renew --manual --preferred-challenges=dns --manual-auth-hook "/path/to/dnspod.sh" --manual-cleanup-hook "/path/to/dnspod.sh clean" --deploy-hook "/path/to/renew_and_reload_nginx.sh" --dry-run
</code></pre>
<p>如果没有错误提示,说明自动续期配置成功。</p>
<blockquote>
<p>加上--dry-run表示使用Let's Encrypt的测试服务器。防止多次使用真实服务器频繁颁发证书达到速率限制</p>
</blockquote>
<h4 id="-深入解读">🔍 深入解读</h4>
<ol>
<li>
<p><strong>DNS 验证和自动化挑战</strong>:</p>
<ul>
<li>泛域名证书使用 <strong>DNS-01 验证</strong>,即要求在 DNS 中添加 <code>_acme-challenge</code> 的 TXT 记录。这种方式可以验证你对整个域名的控制权。</li>
<li>使用 API 自动管理 DNS 记录,可以避免手动添加和删除 TXT 记录的繁琐操作,适合生产环境中的自动化需求。</li>
</ul>
</li>
<li>
<p><strong>Crontab 定时任务</strong>:</p>
<ul>
<li>由于 Let’s Encrypt 证书有效期为 90 天,我们配置 Crontab 每 10 天尝试续期一次,以确保在证书到期前完成续期。</li>
<li>任务执行日志会被重定向到 <code>/var/log/certbot-renew.log</code>,便于后续检查和调试。</li>
</ul>
</li>
<li>
<p><strong>Nginx 重载</strong>:</p>
<ul>
<li>证书续期后,需要重新加载 Nginx 配置,以使新的证书生效。通过 <code>docker compose</code> 管理的 Nginx 服务,可以使用 <code>up -d</code> 命令实现无中断重启。</li>
</ul>
</li>
</ol>
<h4 id="-配置完成后的效果">✅ 配置完成后的效果</h4>
<p>完成上述配置后,你的服务器将能够自动管理泛域名 SSL 证书,定期续期并自动应用新的证书配置。这将大大降低证书管理的工作量,同时保证网站的 HTTPS 加密连接始终有效。</p>
<blockquote>
<p>你可以随时使用以下命令检查现有证书的状态:</p>
</blockquote>
<pre><code class="language-bash">sudo certbot certificates
</code></pre>
<p>如果证书信息显示正确,并且 <code>expiry date</code> 在未来日期,说明配置成功。</p>
<hr>
<p>通过自动化脚本和 Certbot 工具的结合,你已经为你的泛域名 SSL 证书实现了从申请、安装到续期的全流程自动化,让你的网站可以轻松保持 HTTPS 安全连接。</p>
<h2 id="-申请的-ssl-证书文件所在目录">📁 申请的 SSL 证书文件所在目录</h2>
<p>当使用 <strong>Certbot</strong> 成功申请到 SSL 证书后,证书文件将默认保存在以下目录中:</p>
<pre><code class="language-bash">/etc/letsencrypt/live/your-domain-name/
</code></pre>
<p>具体包含以下几个文件:</p>
<ul>
<li><code>cert.pem</code>:这是你的 <strong>SSL 证书</strong> 文件。</li>
<li><code>privkey.pem</code>:这是你的 <strong>私钥</strong> 文件,务必妥善保管,切勿泄露。</li>
<li><code>chain.pem</code>:这是 <strong>中间证书链</strong> 文件,用于验证证书的完整性。</li>
<li><code>fullchain.pem</code>:这是 <strong>完整证书链</strong> 文件,通常用于 Nginx 或 Apache 的 SSL 配置中。</li>
</ul>
<p>例如,如果你的域名是 <code>example.com</code>,则目录路径为:</p>
<pre><code class="language-bash">/etc/letsencrypt/live/example.com/
</code></pre>
<p>你可以使用以下命令查看证书详细信息:</p>
<pre><code class="language-bash">sudo certbot certificates
</code></pre>
<p>输出示例:</p>
<pre><code class="language-TXT">Certificate Name: example.com
Domains: example.com www.example.com
Expiry Date: 2024-02-10 14:30:00+00:00 (VALID: 75 days)
Certificate Path: /etc/letsencrypt/live/example.com/fullchain.pem
Private Key Path: /etc/letsencrypt/live/example.com/privkey.pem
</code></pre>
<blockquote>
<p><strong>提示</strong>:为了避免证书路径错误,建议在 Nginx 或 Apache 配置中直接使用 <code>fullchain.pem</code> 和 <code>privkey.pem</code> 两个文件。</p>
</blockquote>
<h3 id="nginx配置证书示例">nginx配置证书示例</h3>
<pre><code class="language-nginx">server {
listen 80;
server_name example.com www.example.com;
location / {
return 301 https://$host$request_uri;
}
}
server {
listen 443 ssl;
server_name example.com www.example.com;
ssl_certificate /etc/letsencrypt/live/example.com/fullchain.pem;
ssl_certificate_key /etc/letsencrypt/live/example.com/privkey.pem;
location / {
proxy_pass http://127.0.0.1:8080;
}
}
</code></pre>
<p>如果使用docker nginx,可以通过docker挂载卷使用证书,比如我就是这样使用的:<br>
<code>compose.yml:</code></p>
<pre><code class="language-yml">services:
nginx:
image: nginx:latest
networks:
- spy
ports:
- "80:80"
- "443:443"
environment:
- TZ=Asia/Shanghai # 设置为上海时区
volumes:
# 主配置
- ./nginx/nginx.conf:/etc/nginx/nginx.conf:rw
# include配置
- ./nginx/conf.d/:/etc/nginx/conf.d/:rw
# 证书
- /etc/letsencrypt/live/spystudy.cn/fullchain.pem:/etc/ssl/certs/spystudy.cn/fullchain.pem:rw
- /etc/letsencrypt/live/spystudy.cn/privkey.pem:/etc/ssl/certs/spystudy.cn/private.pem:rw
# 日志
- ./nginx/logs/:/var/log/nginx/:rw
</code></pre>
<p>然后nginx配置文件:</p>
<pre><code class="language-conf">server {
listen 443 ssl;
server_name spystudy.cn;
ssl_certificate /etc/ssl/certs/spystudy.cn/fullchain.pem;
ssl_certificate_key /etc/ssl/certs/spystudy.cn/private.pem;
return 301 https://www.spystudy.cn$request_uri;
}
</code></pre>
<h2 id="-验证-https-配置">🔍 验证 HTTPS 配置</h2>
<p>证书安装完成后,可以通过访问 <code>https://example.com</code> 检查是否成功启用了 HTTPS。你也可以使用以下命令查看证书状态:</p>
<pre><code class="language-bash">sudo certbot certificates
</code></pre>
<p>如果证书信息显示正确,并且 <code>expiry date</code> 在未来日期,说明配置成功。</p>
<h2 id="️-常见问题及解决方法">🛡️ 常见问题及解决方法</h2>
<h3 id="1-dns-验证失败">1. <strong>DNS 验证失败</strong></h3>
<p>检查 DNS 记录是否添加正确,并确保记录已完全传播,可以使用以下命令查看 DNS 解析状态:</p>
<pre><code class="language-bash">nslookup -q=txt _acme-challenge.example.com
</code></pre>
<h3 id="2-nginx-配置冲突">2. <strong>Nginx 配置冲突</strong></h3>
<p>如果 Certbot 无法自动修改 Nginx 配置文件,你可以手动更新 Nginx 配置文件(<code>/etc/nginx/sites-available/default</code>):</p>
<pre><code class="language-nginx">server {
listen 80;
server_name example.com www.example.com;
location / {
return 301 https://$host$request_uri;
}
}
server {
listen 443 ssl;
server_name example.com www.example.com;
ssl_certificate /etc/letsencrypt/live/example.com/fullchain.pem;
ssl_certificate_key /etc/letsencrypt/live/example.com/privkey.pem;
include /etc/letsencrypt/options-ssl-nginx.conf;
ssl_dhparam /etc/letsencrypt/ssl-dhparams.pem;
location / {
proxy_pass http://127.0.0.1:8080;
}
}
</code></pre>
<p>保存并测试 Nginx 配置:</p>
<pre><code class="language-bash">sudo nginx -t
sudo systemctl reload nginx
</code></pre>
<h2 id="-总结">🎉 总结</h2>
<p>通过本文的教程,你已经学会了如何使用 <strong>Let’s Encrypt</strong> 免费获取 SSL 证书,包括 <strong>单域名</strong> 和 <strong>泛域名</strong> 的配置,并且实现了 <strong>自动续期</strong>。此外,你还了解了 <strong>Certbot</strong> 工具的作用及工作原理。现在,你可以轻松为你的网站配置 HTTPS,保障用户的安全体验,如果你在配置证书过程中遇到任何问题,欢迎在下方留言。</p>
<p>如果你觉得这篇文章对你有所帮助,欢迎分享给更多需要的朋友!</p>
<h2 id="-参考链接">🔗 参考链接</h2>
<ul>
<li>Let’s Encrypt 官方网站</li>
<li>Certbot 官方文档</li>
<li>ACME 协议介绍</li>
</ul><br><br>
来源:https://www.cnblogs.com/michaelshen/p/18538178
頁:
[1]