Ubuntu 26.04 Apache 配置 Let’s Encrypt 免费 SSL 证书,自动续期避坑教程

自己搭网站基本都离不开 HTTPS,现在云厂商自带免费证书大多只有三个月有效期,手动续期很容易忘导致网站打不开。Let’s Encrypt 提供完全免费的域名 SSL 证书,搭配 Certbot 工具可以一键部署、自动续期,Ubuntu 26.04 官方现在统一推荐 snap 方式安装 Certbot,比旧版 apt 包稳定很多,下面结合国内阿里云、腾讯云服务器的踩坑经验,完整走一遍可直接复制落地的流程。

先说说前置要求,很多人到最后申请失败都是前期条件没满足。你需要一台装好 Apache2.4 的 Ubuntu26.04 服务器,有已备案域名,域名 A 记录正确解析到服务器公网 IP;最重要的两点,服务器本地 UFW 防火墙、云平台安全组都必须放行 80、443 端口,HTTP 验证依赖 80 端口,就算全站走 HTTPS 也不能关闭 80,否则证书申请和续期都会报错。

动手前先简单核对服务器环境,确认系统、Apache、openssl 版本都正常,避免后续出现兼容问题。

# 查看系统版本,确认是Ubuntu26.04
lsb_release -ds
# 查看Apache版本
apache2 -v
# 查看OpenSSL版本,26.04自带3.x,完美支持TLS1.3
openssl version
# 确认Apache正常运行
sudo systemctl is-active apache2

输出 active 就代表 Apache 服务正常,如果没装 Apache,先执行sudo apt install apache2安装。

接下来安装 Certbot,官方不再推荐 apt 安装旧版 certbot,统一用 snap 包,国内服务器操作步骤如下,先更新软件源、安装 snapd,刷新核心组件,卸载系统残留旧版 certbot 避免冲突,最后做软链接让全局可以直接调用 certbot 命令。

sudo apt update
sudo apt install snapd -y
# 刷新snap核心运行库
sudo snap install core
sudo snap refresh core
# 卸载apt自带旧certbot,防止命令冲突
sudo apt remove certbot python3-certbot-apache 2>/dev/null || true
# 安装正式版certbot
sudo snap install --classic certbot
# 创建软链接,任意目录直接使用certbot
sudo ln -sf /snap/bin/certbot /usr/bin/certbot
# 验证安装成功
certbot --version

输出版本号即代表安装完成,同时可以查看插件列表确认 apache 插件正常识别:sudo certbot plugins

然后检查 Apache 站点配置,Certbot 会读取虚拟主机里的 ServerName 和 ServerAlias 自动匹配域名,站点配置文件必须写对。打开你的站点配置文件,替换成自己的域名:

sudo nano /etc/apache2/sites-available/你的域名.conf

80 端口虚拟主机基础模板参考:

<VirtualHost *:80>
    ServerName 58jb.com
    ServerAlias www.58jb.com
    DocumentRoot /var/www/test
    ErrorLog ${APACHE_LOG_DIR}/test-error.log
    CustomLog ${APACHE_LOG_DIR}/test-access.log combined
</VirtualHost>

保存退出后,启用站点、开启 ssl 模块,校验配置语法无误再重载服务:

sudo a2ensite 你的域名.conf
sudo a2enmod ssl
# 校验配置,必须显示Syntax OK
sudo apachectl configtest
sudo systemctl reload apache2

防火墙这块是国内服务器最容易踩坑的地方,Ubuntu 默认 UFW 防火墙,直接放行 Apache Full 配置,同时删除只开放 80 的旧规则,避免端口不全。

# 查看现有防火墙规则
sudo ufw status
# 放行80+443全套端口
sudo ufw allow 'Apache Full'
# 删除仅开放80的旧规则
sudo ufw delete allow 'Apache'
# 重载防火墙生效
sudo ufw reload

这里额外提醒一句,阿里云、腾讯云、华为云用户,除了服务器本地防火墙,还要登录云控制台,在安全组入方向放行 TCP 80、443 端口,只开本地防火墙外部依旧无法访问,会直接导致域名验证失败。

所有前置工作完成后,一键申请 SSL 证书,执行命令后跟着终端提示操作即可:

sudo certbot --apache

终端会依次提示输入接收证书到期提醒的邮箱、同意用户协议、是否接收 EFF 推送邮件、选择需要绑定证书的域名,全部确认后 Certbot 会自动完成域名验证、下载证书、生成 443 端口 ssl 配置文件,同时自动配置 HTTP 跳转 HTTPS。

申请成功后终端会输出证书存放路径,这里记一下常用证书文件位置:

/etc/letsencrypt/live/ 你的域名 /fullchain.pem 完整证书链

/etc/letsencrypt/live/ 你的域名 /privkey.pem 网站私钥

打开浏览器访问域名,地址栏出现小锁图标就代表 HTTPS 部署成功。

证书默认有效期 90 天,手动续期很麻烦,snap 安装的 Certbot 会自动创建 systemd 定时任务,一天两次检测证书有效期,剩余 30 天自动续期,我们可以查看定时任务确认是否正常运行:

# 查看续期定时器
systemctl list-timers | grep certbot
# 模拟续期测试,无报错代表自动续期可用
sudo certbot renew --dry-run

测试出现 success 字样,说明自动续期功能完全正常,后续不用手动操作,服务器会后台自动更新证书并重载 Apache。

基础 HTTPS 部署完成后,建议加固 TLS 安全配置,关闭老旧不安全的 TLS1.0/1.1,启用现代加密套件、HSTS 安全头,提升网站安全评级。

先开启 headers 模块用于添加安全响应头:

sudo a2enmod headers

编辑 Apache ssl 全局配置,修改协议与加密套件:

sudo vim /etc/apache2/mods-available/ssl.conf

在文件内替换 ssl 相关配置:

# 仅保留TLS1.2、TLS1.3,淘汰老旧协议
SSLProtocol all -SSLv3 -TLSv1 -TLSv1.1
# 现代安全加密套件
SSLCipherSuite ECDHE-ECDSA-AES128-GCM-SHA256:ECDHE-RSA-AES128-GCM-SHA256:ECDHE-ECDSA-AES256-GCM-SHA384:ECDHE-RSA-AES256-GCM-SHA384
SSLHonorCipherOrder off
# OCSP stapling优化握手速度
SSLUseStapling on
SSLStaplingCache "shmcb:${APACHE_RUN_DIR}/ssl_stapling(32768)"

接着打开 Certbot 自动生成的 ssl 站点配置,添加安全头部:

sudo vim /etc/apache2/sites-available/你的域名-le-ssl.conf

在 <VirtualHost *:443> 内部添加:

# 强制浏览器一年使用HTTPS
Header always set Strict-Transport-Security "max-age=31536000; includeSubDomains"
# 禁止MIME类型嗅探
Header always set X-Content-Type-Options "nosniff"
# 禁止页面被iframe嵌入
Header always set X-Frame-Options "SAMEORIGIN"

修改完成后校验配置、重载 Apache:

sudo apachectl configtest
sudo systemctl reload apache2

最后整理国内服务器高频踩坑问题,大部分人申请失败都能在这里找到解决方案。

  1. 域名验证提示 unauthorized,返回 503 / 超时 大概率是云安全组没放行 80 端口、CDN 开启代理、Apache80 端口无法公网访问;临时关闭 CDN 代理模式,同时核对服务器和云平台两层防火墙。
  2. 提示找不到 apache 插件 检查是否卸载干净旧 apt 版 certbot,重新执行snap install --classic certbot重装。
  3. 自动续期失败 查看日志定位问题:sudo less /var/log/letsencrypt/letsencrypt.log,重点检查 80 端口是否长期对外开放、域名解析是否正常。
  4. 频繁申请证书触发限流 Let’s Encrypt 限制单域名每周最多 50 张证书,测试阶段使用测试证书避免限流,命令加 –staging 参数:sudo certbot --apache --staging,测试证书浏览器不信任,仅用于调试。

整套流程适配 Ubuntu26.04 所有云服务器,全程无第三方面板依赖,原生命令稳定可靠,证书自动续期省去每年手动更新的麻烦,加固后的 TLS 配置也能满足常规网站安全需求,搭建个人博客、企业官网都可以直接套用这套方案。

更详细的使用方法可查阅官方文档:https://eff-certbot.readthedocs.io/en/stable/using.html#managing-certificates

本文首发于 58Linux技术博客,专注Ubuntu桌面使用、Linux服务器运维与网站搭建实战。

发表评论

粤ICP备10052831号 | © 2026 58Linux 技术笔记. All Rights Reserved. | 联系我们 | 关于本站
本站内容开放共享,仅供学习交流 | 专注 Ubuntu & Linux 实战教程
Built with GeneratePress