自己曾经做了一个网站部署在一台 ubuntu
服务器上,但是由于一开始不会配置 SSL,所以花钱买了付费的 SSL。最近发现了 Let’s Encrypt,可以免费申请 SSL 证书,下面是详细的教程。
我的网站是一个 React 的项目,所以我的服务器上只是一个简单的 Node.js 环境 + Nginx
。我主要参考了这个帖子 。如果你是用其他的环境比如LAMP
那一套的,请自行搜索其他的教程。
0. 安装 node.js 先看一下服务器上是否安装了 node.js
如果这行命令没有返回 node 版本号,那么就需要安装 node.js。这里不展示了。
1. 安装 certbot 敲这两个命令
1 2 sudo snap install core sudo snap refresh core
如果你曾经安装过 certbot,这里建议你先卸载原先的版本然后重新安装,这样你就有最新的版本了。
卸载
安装 1 sudo snap install --classic certbot
创建一个 symbolic link 因为 certbot 安装完毕之后是不能直接跑他的命令的,所以这里我们多一步,创建一个 symbolic link。
1 sudo ln -s /snap/bin/certbot /usr/bin/certbot
2. 检查一下 Nginx 的相关配置 如果你没有安装 Nginx,请参考这个帖子 。
如果你安装了 Nginx,请打开以下这个文件。example.com
是你自己的域名。
1 sudo nano /etc/nginx/sites-available/example.com
确保你有带有server_name
的那一行,应该长这样。确保他没有被注释掉。
1 server_name example.com www.example.com;
保存配置,从编辑器中退出来,然后敲这个命令确保没有语法错误。
用这个命令把 Nginx reload 一下使配置生效。
1 sudo systemctl reload nginx
3. 防火墙设置 ubuntu 服务器上一般都是用一个叫做ufw
的东西来做防火墙的。我们可以用这个命令看一下目前的状态。
一般返回的东西应该是这样的。
1 2 3 4 5 6 7 8 9 Output Status: active To Action From -- ------ ---- OpenSSH ALLOW Anywhere Nginx HTTP ALLOW Anywhere OpenSSH (v6) ALLOW Anywhere (v6) Nginx HTTP (v6) ALLOW Anywhere (v6)
敲如下命令使防火墙能允许 HTTPS 流量。
1 2 sudo ufw allow 'Nginx Full' sudo ufw delete allow 'Nginx HTTP'
之后你的防火墙配置应该是这样的。
1 2 3 4 5 6 7 8 9 Output Status: active To Action From -- ------ ---- OpenSSH ALLOW Anywhere Nginx Full ALLOW Anywhere OpenSSH (v6) ALLOW Anywhere (v6) Nginx Full (v6) ALLOW Anywhere (v6)
4. 获得 SSL 证书 敲如下命令来申请 SSL 证书。记得改成自己的域名。
1 sudo certbot --nginx -d example.com -d www.example.com
如果一切正常,terminal 最后会显示 SSL 证书被存到什么路径了之类的信息,类似这样。
1 2 3 4 5 6 7 8 9 10 11 12 13 Output IMPORTANT NOTES: Successfully received certificate. Certificate is saved at: /etc/letsencrypt/live/your_domain/fullchain.pem Key is saved at: /etc/letsencrypt/live/your_domain/privkey.pem This certificate expires on 2022-06-01. These files will be updated when the certificate renews. Certbot has set up a scheduled task to automatically renew this certificate in the background. - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - If you like Certbot, please consider supporting our work by: * Donating to ISRG / Let's Encrypt: https://letsencrypt.org/donate * Donating to EFF: https://eff.org/donate-le
理论上此时你的 SSL 应该就立即生效了。你可以试着访问自己的网站,或者通过一些 SSL 检测工具来验证一下你的证书是否有效。
5. 自动更新 SSL 证书 虽然我们通过这个方式获得的 SSL 证书是免费的,但是它的有效期一般只有 90 天。所以这里我们可以配置他的自动更新。
如下这个命令可以让 certbot 一天运行两次以检查当前的 SSL 是否依然有效。
1 sudo systemctl status snap.certbot.renew.service
1 2 3 4 5 Output ○ snap.certbot.renew.service - Service for snap application certbot.renew Loaded: loaded (/etc/systemd/system/snap.certbot.renew.service; static) Active: inactive (dead) TriggeredBy: ● snap.certbot.renew.timer
可以通过如下这个命令测试一下 SSL 是如何更新的。
1 sudo certbot renew --dry-run
❤️ 以上