在申请Let's Encrypt证书时可能会遇到的坑
最近尝试给我的博客申请一个Let’s Encrypt证书, 结果发现跟网上的各种教程有点不同, 不是简单的clone一个repo那么简单 — 坑真的很多.
首先还是先把repo给clone下来再说. Let’s Encrypt 的官方repo里有一个现成的签署证书(?)用的工具.
1 | git clone https://github.com/letsencrypt/letsencrypt |
这样下来最后的输出出现了”Important Notes”之类的, 好像成功了诶! cd至/etc/letsencrypt
才发现下面空荡荡的什么都没有. google了一番才发现是因为 nginx 占用了 port 80. 解决方法就是先 systemctl stop nginx
.
再做一遍. 这个时候就好玩了; 出现了 Challenge failed for domain, 看了下错误说明好像是dns问题. 十几分钟google之后我突然找到了答案: 我当时在freenom上注册域名时没有加www.<yourdomain>
的记录, 也就没有经过freenom的dns解析, 自然找不到这个域名. 我就把上面的命令改成了
1 | ./letsencrypt-auto certonly --standalone --email <youremail> -d <yourdomain> #同上 |
我就想反正www.
的问题可以慢慢解决, 先把证书搞到手再说. 这次成功了……
cd至/etc/letsencrypt/live
看, 下面该有的四个.pem
也终于有了.
你以为这就完了? 没有, 还要配置nginx呢…
先vim /etc/nginx/nginx.conf
. 然后在注释”SSL settings” (如果你的nginx.conf是套模板的话) 的那里写两行:
1 | ssl_certificate /etc/letsencrypt/live/<yourdomain>/fullchain.pem; # 域名换成你自己的 |
再在 /etc/nginx/sites-available/<你的站点配置文件名>
那里, server{
下面加两句:
1 | listen 443 ssl; |
看到那里已经有写 listen 80
了? 不要紧, 先删掉就行(当然一会儿会以船新的方式加回来). 这个时候就可以尝试 systemctl start nginx
了.
进网站看了一下, 发现网址旁边竟然没加锁…… 试了一下 https 才终于看到加了锁. 这就说明我们要设置 http 重定向至 https. (据说对于一些没有备案导致80端口被cngov封的网站也有帮助)
还是在上面那个站点配置文件里, 新加 一个 server{}
段, 在那里面写上:
1 | listen 80; |
再 systemctl restart nginx
一下, 这次不管怎么输入网址都是加锁的了.
不过要注意的是这个证书默认会在90天后过期, 所以还是要定期renew. 因为我们肯定会忘可以把这条命令写进crontab
里省事一点:
1 | ./letsencrypt-auto renew --pre-hook "service nginx stop" --post-hook "service nginx start" #同上 |
小结
总之要注意的坑就这么几个:
- 做这些操作前先
systemctl stop nginx
- 前面带
www.
的域名也要在你注册域名的那个地方添加一个dns记录 - 做好 http https 重定向 的工作
- 证书默认会在90天后过期, 这个时候
crontab
就派上用场了
#EOF.