使用 Let's Encrypt 配置 HTTPS (SSL/TLS)
1. 这节讲座讲什么以及为什么需要这个
在现代的世界里,HTTPS已经成为了所有网站的标准。如果你希望你的用户感到安全,同时不想因为Google降低你的搜索排名(是的,HTTPS对SEO有影响),你就必须设置SSL/TLS协议。HTTPS协议通过加密保护用户与服务器之间传输的数据,从而避免被恶意拦截。
在这节讲座中,我们会一步步学习如何使用Let's Encrypt为你的Web服务器免费启用HTTPS。Let's Encrypt 是一个权威的认证中心 (CA),它提供免费的证书和安装工具。我们还会学会如何自动续订证书,这样就不会因为证书过期而感到头疼。
HTTP vs HTTPS
HTTP (Hypertext Transfer Protocol) 是一种数据传输协议。它非常适合看猫咪表情包,但是!如果有谁连上了你的Wi-Fi(比如在咖啡馆),他们就可以拦截你发送到服务器的数据(糟糕了,你的密码就会变成“他们的密码”)。
HTTPS (Hypertext Transfer Protocol Secure) 是加了加密功能的HTTP版本。客户端和服务器之间传输的数据通过SSL/TLS (Secure Sockets Layer / Transport Layer Security) 进行了保护。即使攻击者能拦截数据包,他们也无法看到数据包的内容。
2. 安装 Let's Encrypt 和 Certbot
Certbot 是 Let's Encrypt 的开发者提供的一个工具,它可以帮助你轻松获取和配置你的 web 服务器的 SSL 证书。它足够智能,能够自动与 Nginx 或 Apache 一起工作,帮我们完成所有繁琐的工作。我们从安装开始。
安装 Certbot
确保你的服务器已更新:
sudo apt-get update
sudo apt-get upgrade
现在安装 Certbot 和它的插件:
对于 Nginx:
sudo apt-get install certbot python3-certbot-nginx
对于 Apache:
sudo apt-get install certbot python3-certbot-apache
Certbot 本身就是 Python 代码,由社区积极维护。它可以轻松集成到大多数服务器中。
3. 使用Certbot获取SSL证书
针对Nginx
如果你使用Nginx,Certbot可以自动为你的网站配置HTTPS。输入以下命令:
sudo certbot --nginx
Certbot会扫描你当前的虚拟主机(server
块配置)。它会询问你想为哪个域名配置HTTPS。请确保该域名已经通过DNS指向你的服务器(例如,通过A记录)。
输出示例:
Which names would you like to activate HTTPS for?
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
1: example.com
2: www.example.com
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
选择你的域名(例如1)。
Certbot会自动配置Nginx并进行检测。在成功安装后,你会看到类似以下的消息:
Congratulations! Your certificate and chain have been saved ...
现在你的网站可以通过HTTPS访问了。你可以在浏览器中打开https://example.com进行测试。
针对Apache
如果你使用Apache,命令会稍有不同:
sudo certbot --apache
Certbot也会扫描你的虚拟主机(<VirtualHost>
块配置),并推荐为选定的域名配置HTTPS。选择你需要的域名,Certbot会为你完成所有配置。
完成后,你会再次看到祝贺的消息,并且可以通过HTTPS检查你的网站的可访问性。
4. 自动更新证书
Let's Encrypt 的证书只有效 90 天,所以需要定期更新。Certbot 可以自动完成,但我们需要确保配置正确。
检查证书的有效期
你可以检查证书的过期时间:
sudo certbot certificates
输出将显示你的域名和证书的过期日期。
设置自动更新
安装 Certbot 时,它会自动在 Cron 或 Systemd Timer 中添加一个任务来检查更新。如果你想确认是否正常工作,可以在 Cron 中添加一个测试任务:
sudo crontab -e
添加以下行:
0 0 * * * certbot renew --quiet
这个命令每天午夜检查并更新证书。参数 --quiet
禁用无用的信息输出。
手动更新
如果你想手动更新证书(比如为了测试),可以使用:
sudo certbot renew
5. 启用 HTTP → HTTPS 的自动重定向
你的网站可能仍然通过 HTTP 访问,但这不安全。我们来配置自动将所有请求重定向到 HTTPS。
针对 Nginx
在发放证书时,Certbot 可以自动设置重定向。如果之前没有启用这功能,可以在虚拟主机配置文件中手动添加重定向:
server {
listen 80;
server_name example.com www.example.com;
return 301 https://$host$request_uri;
}
重新加载 Nginx 以应用更改:
sudo systemctl restart nginx
针对 Apache
Certbot 也可以提供自动启用重定向的选项。如果你错过了这一步,可以在你的虚拟主机文件中添加以下内容:
<VirtualHost *:80>
ServerName example.com
Redirect permanent / https://example.com/
</VirtualHost>
重新启动 Apache:
sudo systemctl restart apache2
6. 调试错误
如果遇到问题,首先查看日志:
对于 Nginx
sudo tail -f /var/log/nginx/error.log
对于 Apache
sudo tail -f /var/log/apache2/error.log
配置测试
也要检查一下 web 服务器的配置:
对于 Nginx:
sudo nginx -t
对于 Apache:
sudo apachectl configtest
HTTPS 检查
确保你的网站可以通过 HTTPS 访问:
curl -I https://example.com
你应该看到状态 200 OK
和一行 Strict-Transport-Security
,这意味着 HTTPS 正在正常工作。
现在你可以创建安全的 HTTPS 网站了。你的用户会很满意,Google 也会满意,而你则可以放心地睡觉,因为你知道你的数据已免受网络恶棍的侵袭。
GO TO FULL VERSION