最近自己搭建了一个博客网站,我用openssl方式创建了一个免费证书,结果登录时显示“不安全”,要写hosts文件才可以,让用户配置不现实。

然后我就换成了Let’s Encrypt 免费证书,成功解决这个不安全的问题。
下面是我操作的完整步骤:
1 为什么不用自签名证书?
openssl自签名证书会遇到:
opnessl的自签名证书适合用在测试或开发环境,做网站就不适用。所以我用 Let’s Encrypt 生成免费证书,浏览器完全信任,并且可以自动续期。
2 前提
公网域名已备案:我的是www.ligelinux.com
DNS 已解析:www.ligelinux.com
和 ligelinux.com
都指向你的服务器 IP
Nginx 已安装,80 端口可访问。

3 安装 Certbot
yum install epel-release -y # 启用 EPEL 源
yum install certbot python3-certbot-nginx -y
CentOS 7.9 默认 EPEL 里的 Certbot 版本较旧,如果 nginx 插件不可用,可用 Webroot 模式。
4 配置 Nginx
因为我用的是CentOS7.9,没有加载到nginx插件,所以使用webroot方式绕过插件,需要放通80端口测试。
server {
listen 80; # 监听 HTTP 80 端口
server_name www.ligelinux.com ligelinux.com; # 域名绑定
# Let’s Encrypt 验证路径
location /.well-known/acme-challenge/ {
root /data/nginx/cert; # 指向 Webroot 临时目录
allow all;
}
location / {
return 301 https://$host$request_uri; # 所有 HTTP 请求重定向到 HTTPS
}
}
创建目录并测试
mkdir -p /data/nginx/cert/.well-known/acme-challenge
echo "test-ok" > /data/nginx/cert/.well-known/acme-challenge/test.txt
访问:
http://www.ligelinux.com/.well-known/acme-challenge/test.txt
显示 test-ok
表明路径正确。
申请 Let’s Encrypt 证书
certbot certonly --webroot -w /data/nginx/cert \
-d www.ligelinux.com -d ligelinux.com
--webroot -w /data/nginx/cert
:指定验证目录
-d www.ligelinux.com -d ligelinux.com
:指定需要证书的域名

证书生成后默认存放:
/etc/letsencrypt/live/www.ligelinux.com/fullchain.pem
/etc/letsencrypt/live/www.ligelinux.com/privkey.pem
5 配置HTTPS + 反向代理
server {
listen 443 ssl http2; # 启用 HTTPS 和 HTTP/2
server_name www.ligelinux.com ligelinux.com;
ssl_certificate /etc/letsencrypt/live/www.ligelinux.com/fullchain.pem;
ssl_certificate_key /etc/letsencrypt/live/www.ligelinux.com/privkey.pem;
ssl_protocols TLSv1.2 TLSv1.3;
ssl_ciphers HIGH:!aNULL:!MD5;
location / {
proxy_pass http://xxxxxx:8090; # 反向代理到后端应用,填写你的IP地址
proxy_set_header Host $host;
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
proxy_set_header X-Forwarded-Proto $scheme;
}
}
重载 Nginx:
nginx -t
systemctl restart nginx

然后访问一下URL,会发现已经显示安全

6 自动续签
Certbot 证书默认是90天过期,但提供自动续签功能:
sudo certbot renew --dry-run
sudo certbot renew --deploy-hook "systemctl reload nginx"
- 确保
.well-known/acme-challenge/
目录保持可访问,否则续签会失败。

7 小技巧总结
- 访问域名:必须通过
www.ligelinux.com
或 ligelinux.com
,直接访问 IP 不安全 - 浏览器缓存:首次启用 HTTPS,可清理浏览器缓存
- 自动续签:使用 Certbot timer 或 cron 保证证书永不过期
- 多域名/子域名:可以在申请时
-d sub.example.com
一次性添加
阅读原文:原文链接
该文章在 2025/8/29 11:34:28 编辑过