CodeGym /课程 /Docker SELF /使用 Let's Encrypt 配置 HTTPS (SSL/TLS)

使用 Let's Encrypt 配置 HTTPS (SSL/TLS)

Docker SELF
第 7 级 , 课程 3
可用

使用 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 也会满意,而你则可以放心地睡觉,因为你知道你的数据已免受网络恶棍的侵袭。

评论
TO VIEW ALL COMMENTS OR TO MAKE A COMMENT,
GO TO FULL VERSION