个人主页域名申请下来了,下一步就是开启 https。决定用 Let's Encryptp,据说既简单又安全,没想到都是眼泪,于是就有了这篇爬坑记。
打开Let's Encrypt 官网,跟着 Get Started 就到了certbot。乍一看很人性化,什么 nginx,ubuntu18.04 剩下的事情就是跟着步骤一路 copy paste 和 Enter 了吧。接下来就发现自己还是太傻太天真了。先选择的是 default 步骤,报错一看大致意思是 DNS provider 这边被拒绝了。还有个 wildcard 方式啊,也发现了 linode 支持在列。又是一通鼓捣,结果在安装 DNS provider 插件的时候坑了。通过 apt-get 安装没有 python3-certbot-dns-linode 这个包。想了一下直接通过 pip 安装:pip install cert-dns-linode。安装成功,开心的进行下一步。又坑了,报错大致上提示 linode 这个插件是 0.35.1 然后我其它的组件都是 0.31.0 的版本,版本不兼容!google 上查了一下,有个和我一样情况的帖子得到了官方人员的回复:大致意思是说 ubuntu 的源不是他们官方维护的人家无能为力,并给推荐了一种通用的方式Running with Docker。此时我心中有一万头草泥马在崩腾。官方网站上详细描述了安装步骤,出了问题之后轻描淡写的把这个锅甩给了 ubuntu。我就想弄个 ssl 证书,你跟我扯上 Docker 了。除了“干得漂亮”还能说什么。
吐槽无用,想一下怎么解决吧。cerbot 提供的功能无非就是申请好证书,然后再配置 nginx(apache)之类的服务器,把这些繁琐的工作工具化。捷径走不通那就一步步的通过源码来解决问题吧。这次终于成功了。先说一下前提,我的服务器是ubuntu 18.04 LTS(在 linoe 上),nginx 是通过 apt-get 安装的,事先也需要安装好 git,并把你的源更新到最新:sudo apt update && sudo apt upgrade。
接下来说一下用 certbot 生成证书步骤(使用时请将 example.com 替换成自己的域名):
git clone https://github.com/certbot/certbot /opt/letsencrypt
cd /opt/letsencrypt
sudo -H ./letsencrypt-auto certonly --standalone -d example.com -d www.example.com
接下来一通 Enter 即可。
此时你网站的域名应该有了,验证一下:
sudo ls /etc/letsencrypt/live
example.com
./certbot-auto certificates
Found the following certs:
Certificate Name: example.com
Domains: example.com www.example.com
Expiry Date: 2019-09-27 20:49:02+00:00 (VALID: 89 days)
Certificate Path: /etc/letsencrypt/live/example.com/fullchain.pem
Private Key Path: /etc/letsencrypt/live/example.com/privkey.pem
./letsencrypt-auto renew
sudo crontab -e
0 0 1 * * /opt/letsencrypt/letsencrypt-auto renew
sudo crontab -e
0 0 1 * * cd /opt/letsencrypt && git pull
至此证书的生成就完成了,有了证书配置 nginx 就简单许多了,接下来说一下 nginx 配置步骤 (可以参考Configuring HTTPS servers ):
server {
listen 443 ssl;
server_name www.example.com;
ssl_certificate /etc/letsencrypt/live/example.com/fullchain.pem;
ssl_certificate_key /etc/letsencrypt/live/example.com/privkey.pem;
...
}
http {
ssl_session_cache shared:SSL:10m;
ssl_session_timeout 10m;
...
sudo systemctl restart nginx
最后还可以去SSL Server Test验证一下 SSL 是否已经生效了。
原文在博客,刚刚弄好的主页,有点丑,大家凑合看。web 开发我还是个小白,这个项目用来练手,现在 github 上还只是个 private repository。还在持续改进中,过些天会开放出来。