ubuntu apache更新Let'sEncrypt证书

更新证书很简单,直接如下命令就可以了:

sudo letsencrypt renew

可以用--dry-run选项来模拟更新证书,看看会不会出错。由于Ubuntu自带的版本有点旧,所以会出错……(certbot-auto的是最新的所以不会有问题)。这时候就需要加上--force-renew选项来强制更新。第一次运行可能还要你同意服务条款,所以根据提示加上--agree-tos(以后就不需要了)。

在正式更新的时候,要使证书生效还需要重启Nginx。如果是certbot-auto我们可以用--pre-hook和--post-hook来设置更新前后的命令,用来停止和启动Nginx。

sudo /path/to/certbot-auto renew --pre-hook "systemctl stop nginx" --post-hook "systemctl start nginx"

但是Ubuntu自带的版本有点旧,所以就只好自己写脚本了。

#!/bin/sh

systemctl stop nginx

letsencrypt renew --force-renew

systemctl start nginx

[indent]  [b]2017年2月20日更新[/b]

  上述命令中不能使用systemctl stop nginx来停止nginx,因为更新证书时同样需要验证,如果停止了服务就无法验证了。我们只需要在更新后重启nginx就行了。所以:

  如果使用新版certbot-auto我们只需要:

sudo /path/to/certbot-auto renew --post-hook "systemctl start nginx"

  自己编写脚本的话改成这样:

#!/bin/sh

letsencrypt renew

systemctl restart nginx

  我们还可以在这个脚本中将输出重定向来生成日志文件,以便以后检查。

[/indent]保存文件,这里我们保存到/opt/scripts/letsencrypt_renew。

我们可以用crond或者systemd来自动更新证书,这里就简单点,用crond吧。用sudo crontab -e命令编辑root用户的crontab。在最后面新插入行并添加如下内容:

0 */12 * * * sh /opt/scripts/letsencrypt_renew

上面的意思是,每12小时的第0分执行脚本一次。因为Let’s Encrypt的推荐每12小时更新一次。更新操作并不一定会真的更新证书,只有在快到期的时候才会更新。

如果不想修改root的crontab,可以在/etc/cron.d下新建文件写入如下内容:

0 */12 * * * root sh /opt/scripts/letsencrypt_renew

比起crontab,就是在要执行的命令前面多了一个表示用户的root。

更新证书是检测/etc/letsencrypt/renewal下的配置文件进行的,所以即使不管颁发多少个证书,上面的更新脚本都不用修改。

你可能感兴趣的:(ubuntu apache更新Let'sEncrypt证书)