11月21, 2017

开始使用 Let's Encrypt 证书

博客一直使用的是赛门铁克(Symantec)的免费ssl证书,最近发现Chrome默默的在控制台给我报了一个warning,这怎么能忍?控制台怎么能报warning呢?

Symantec Warnning

谷歌一顿操作后,决定使用Let's Encrypt证书,Let's Encrypt 是个免费、自动化、开放的证书签发服务。申请 Let's Encrypt 证书不但免费,还非常简单。虽然每次只有 90 天的有效期,但可以通过脚本定期更新,配好之后一劳永逸。

这里使用的是acme.sh,acme.sh操作比较简单,定时自动化更新证书,还有中文文档,体验还是不错的。基本按照这里的介绍就可以完成整个部署过程,这里记录一下申请过程和遇到的问题。

安装

安装很简单,一个命令就搞定了。

# curl https://get.acme.sh | sh
//设置别名
# alias acme.sh=~/.acme.sh/acme.sh 

生成证书

命令也很简单。

acme.sh --issue -d luodao.me -d www.luodao.me --webroot /home/xxx/www/luodao

在这里遇到了一个问题,耽误了一些时间。当时忘了截图了,大概原因是从服务器验证,因为从服务器上找不到.well-known/acme-challenge/xxxxx这个文件。

因为申请证书的过程是需要在服务器上面生成这么一个验证文件的,当然acme.sh会在验证完成后删除这个文件,不用担心会在你的网站下生成一大推乱七八糟的东西。

经过排查,发现这个文件是404的,开始以为是程序出了问题,没有生成这个文件。后面仔细一看,发现是因为使用了firekylin博客系统,带的nginx里面把这个文件转到ssl目录下了,这样自然就找不到验证文件了。

alt

修改后再生成证书,果然顺畅了很多。

安装证书

acme.sh --installcert -d luodao.me --key-file /home/xxx/www/luodao/ssl/luodao.me.key --fullchain-file /home/xxx/www/luodao/ssl/fullchain.cer --reloadcmd "echo 'password' | sudo -S service nginx restart"

命令也很很简单,指定证书生成位置,再重启nginx即可。这里需要注意一下,普通的用户是默认没有权限重启nginx的,这里可以使用sudo命令,同时使用-S 来实现自动输入密码。

贴一下nginx配置:

ssl on;
ssl_certificate /home/xxx/www/luodao/ssl2/fullchain.cer;
ssl_certificate_key /home/xxx/www/luodao/ssl2/luodao.me.key;
#ssl_certificate  /home/xxx/www/luodao/ssl/luodao.me.crt;
#ssl_certificate_key /home/xxx/www/luodao/ssl/luodao.me.key;
ssl_session_timeout 5m;
ssl_protocols TLSv1 TLSv1.1 TLSv1.2;
ssl_ciphers ECDH:AESGCM:HIGH:!RC4:!DH:!MD5:!aNULL:!eNULL;
ssl_prefer_server_ciphers on;

替换之前的证书即可。

已替换为Let's Encrypt 证书:
alt

自动更新

证书的有效期只有三个月,所以如果要每次到时间都重新操作一遍的话会很麻烦,所以如果可以自动更新的就最好了。想要自动更新其实也很简单,跑个自动任务,自动将这些命令执行以下不就好了。

编写sh命令文件

autohttps.sh文件内容如下:

#!/bin/bash

/home/username/.acme.sh/acme.sh --issue -d luodao.me -d www.luodao.me --webroot /home/username/web/luodao

/home/username/.acme.sh/acme.sh --installcert -d luodao.me --key-file /home/username/web/luodao/ssl/luodao.me.key --fullchain-file /home/username/web/luodao/ssl/fullchain.cer --reloadcmd "echo 'password' | sudo -S service nginx restart"

注意替换自己的文件路径及密码。

crontab命令

0 0 2 * * /bin/sh /home/username/web/luodao/autohttps.sh > /dev/null 2>&1

这样就OK了,再也不用担心证书突然失效了~~

本文链接:https://luodao.me/post/use-let-s-encrypt-https.html

-- EOF --

Comments

评论加载中...

注:如果长时间无法加载,请针对 disq.us | disquscdn.com | disqus.com 启用代理。