Ubuntu 域名绑定 SSL 证书实操指南

一 准备工作
- 准备一台运行 Ubuntu 的服务器,并已安装 Nginx 或 Apache,同时确保网站当前可以通过 HTTP 80 端口正常访问。
- 提前将你的 域名解析到服务器公网 IP(A 或 AAAA 记录),这是后续申请和绑定 SSL 证书的前提。
- 开放防火墙端口:建议放行 80/443,如使用 UFW,可执行:sudo ufw allow ‘Nginx Full’。
- 如果你使用的是云厂商签发的证书或自定义 CA 证书,请提前准备好证书文件:通常包括 域名证书 .crt、私钥 .key、中间证书链 .crt/chain.crt。
二、方案一:Let’s Encrypt自动获取与部署(推荐)
- 安装 Certbot(两种常用方式,选择其中一种即可)
- 方式 A(Debian 系常见仓库):sudo apt update && sudo apt install certbot python3-certbot-nginx
- 方式 B(Snap 推荐):sudo apt install snapd -y && sudo snap install core && sudo snap refresh core && sudo snap install --classic certbot && sudo ln -s /snap/bin/certbot /usr/bin/certbot
- 申请并自动配置 SSL 证书
- Nginx:sudo certbot --nginx -d example.com -d www.example.com
- Apache:sudo certbot --apache -d example.com -d www.example.com
- 按照交互提示选择是否将 HTTP 重定向到 HTTPS,一般建议直接开启重定向。
- 验证与续期
- 打开 https://example.com,检查浏览器锁标识以及证书信息是否正常。
- 测试自动续期:sudo certbot renew --dry-run(Let’s Encrypt 证书有效期为 90 天,Certbot 通常会自动生成定时续期任务)。
三、方案二:手动部署已有证书(Nginx与Apache示例)
- Nginx 手动配置示例
- 证书路径示例:/etc/letsencrypt/live/example.com/fullchain.pem 与 privkey.pem(也可以替换为你自己的证书存放路径)。
- 配置片段:
server {
listen 443 ssl http2;
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 / {
root /var/www/html;
index index.html index.htm;
}
}
server {
listen 80;
server_name example.com www.example.com;
return 301 https://$host$request_uri;
} - 检查配置并重载服务:sudo nginx -t && sudo systemctl reload nginx
- Apache 手动配置示例
- 先创建证书目录:sudo mkdir -p /etc/apache2/ssl
- 将 yourdomain.crt / yourdomain.key / chain.crt 复制到 /etc/apache2/ssl
- 启用 SSL 模块与站点:sudo a2enmod ssl && sudo a2ensite default-ssl.conf
- 编辑 /etc/apache2/sites-a vailable/default-ssl.conf(或 000-default-le-ssl.conf):
ServerName example.com
SSLEngine on
SSLCertificateFile /etc/apache2/ssl/yourdomain.crt
SSLCertificateKeyFile /etc/apache2/ssl/yourdomain.key
SSLCertificateChainFile /etc/apache2/ssl/chain.crt
# 其他目录与日志配置… - 如果 443 端口没有监听,请检查 /etc/apache2/ports.conf 中是否包含 Listen 443
- 重载 Apache:sudo systemctl reload apache2
- 可选配置 HTTP→HTTPS 重定向(可在 000-default.conf 的 80 端口 VirtualHost 中添加):Redirect permanent / https://example.com/
四 常见问题与排查
- 端口与防火墙:确认云服务器安全组和本机防火墙都已放行 80/443;如果使用 UFW,可执行 sudo ufw allow ‘Nginx Full’。
- 域名验证失败:请确认域名的 A/AAAA 记录已生效,并且确实指向当前 Ubuntu 服务器;如果使用 certonly 模式,还需要保证 80/443 端口可访问,才能完成 ACME 验证。
- 配置语法与生效检查:修改配置文件后,先使用 nginx -t 或 apache2ctl configtest 检查语法,再执行 reload/restart 让配置正式生效。
- 续期失败排查:运行 sudo certbot renew --dry-run,结合日志排查 DNS、端口占用、权限等问题;通常在证书到期前系统会自动完成续期。
