为你的网站添加SSL证书

一、概述

什么是SSL证书?

SSL证书(安全套接层证书) 是一种数字证书,用于在互联网上建立加密链接,使用 SSL 协议对传输的数据(如登录信息、支付详情等)进行加密,防止被第三方窃取或篡改。同时证明网站的真实身份,防止用户访问假冒网站。证书由受信任的第三方机构(CA)颁发,验证网站所有者的合法性。

SSL证书如何工作?

  1. 用户访问 HTTPS 网站时,服务器会发送 SSL 证书。
  2. 浏览器验证证书的合法性(是否由信任的 CA 签发、是否过期、是否被提前启用等)。
  3. 验证通过后,双方通过“握手”过程建立加密连接,后续通信均被加密。

SSL证书有什么用?

  • 防止中间人攻击、数据泄露。
  • 谷歌等搜索引擎优先收录 HTTPS 网站。
  • 安装了 SSL 证书的网站,网址会从 http:// 变为 https://,浏览器显示锁形标志(🔒)。

二、使用

前提

  1. 域名的 DNS 已经解析到你的服务器 IP。
  2. 服务器上运行着 Web 服务(如 Nginx 或 Apache),并且 80 端口是开放的(Certbot 初始验证需要)。

获取 SSL/TLS 证书

建议使用Let‘s Encrypt颁发的免费证书,主流浏览器都信任该证书。

以下操作流程基于Ubuntu22和Nginx环境展开。

在服务器上配置证书

安装Certbot

1
2
sudo apt update
sudo apt install certbot python3-certbot-nginx # 安装 Certbot 和 Nginx 插件

运行 Certbot 获取并安装证书

1
2
#这会自动修改Nginx配置
sudo certbot --nginx -d yourdomain.com -d www.yourdomain.com #修改为实际命名

安装完成后,会自动为设置的域名添加证书信息,同时将默认80端口重定向到443端口

1
2
3
4
5
6
7
8
server {
if ($host = elix.pics) {
return 301 https://$host$request_uri;
} # managed by Certbot
listen 80;
server_name elix.pics;
return 404; # managed by Certbot
}

实际上到这一步已经完成了,此时网站已经可以通过https访问了。

此时要注意,如果网站中还引用了http开头的资源链接(如js/css资源),会被拦截访问。可以为这些资源传输也添加SSL证书。

自动续期

Let‘s Encrypt颁发的免费SSL证书有效期为90天,预计2027年会缩短到45天,因此开启SSL证书自动续期很有必要。

1
2
3
4
# 查看系统定时任务
sudo crontab -l
# 或者查看 Certbot 的定时任务
sudo systemctl list-timers | grep certbot

如果看到类似下面的输出,说明已经设置了:

1
0 0,12 * * * /usr/bin/certbot renew --quiet

如果没有,则需要手动设置

1
2
# 编辑 root 用户的定时任务
sudo crontab -e

添加以下内容:

1
2
# 每天凌晨3点检查续期,并记录日志
0 3 * * * /usr/bin/certbot renew >> /var/log/certbot-renew.log 2>&1

完成。