利用certbot获取Let's Encrypt SSL证书

前言

为什么需要https就不必多说了x
那么我们开始吧x

访问certbot官网

https://certbot.eff.org/

这里选择你的web软件和服务器系统,有对应教程。我是Nginx on CentOS/RHEL 7,以下便以此为例。
certbot.JPG

安装

Certbot is packaged in EPEL (Extra Packages for Enterprise Linux). To use Certbot, you must first enable the EPEL repository. On RHEL or Oracle Linux, you must also enable the optional channel.

根据教程描述,我们需要启用这个EPEL,使用以下代码:

$ yum -y install yum-utils
$ yum-config-manager --enable rhui-REGION-rhel-server-extras rhui-REGION-rhel-server-optional
$ sudo yum install epel-release

之后就可以安装certbot了:

$ sudo yum install certbot python2-certbot-nginx

有确认的全部y过去。因为要配置python所以可能需要一段时间。

开始使用

certbot自带nginx的插件:

$ sudo certbot --nginx

然后一运行就报错了...

Error while running nginx -c /etc/nginx/nginx.conf -t.

nginx: [emerg] open() "/etc/nginx/nginx.conf" failed (2: No such file or directory)
nginx: configuration file /etc/nginx/nginx.conf test failed

The nginx plugin is not working; there may be problems with your existing configuration.
The error was: MisconfigurationError('Error while running nginx -c /etc/nginx/nginx.conf -t.\n\nnginx: [emerg] open() "/etc/nginx/nginx.conf" failed (2: No such file or directory)\nnginx: configuration file /etc/nginx/nginx.conf test failed\n',)

很显然这里是没找到nginx的配置文件nginx.conf。仔细一看我的nginx装在/usr/local,那它在/etc里肯定找不到咯。写个链接给他连一下x(这里要链接文件夹而不是单个conf文件,因为它要调用的不只这一个)

$ sudo ln -s /usr/local/nginx/conf /etc/nginx

然后就能跑了,一上来会先让你输自己的邮箱(大概是认证吧)。之后:
`Please read the Terms of Service at
`阅读条款直接(A)gree过去。
Would you be willing to share your email address with ... 大概是确认能不能给你邮箱发关于SSL的邮件,建议(N)o吧。
如果你的配置文件里没有网站域名,它还会让你输一下域名。然后是:

Please choose whether or not to redirect HTTP traffic to HTTPS, removing HTTP access.
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
1: No redirect - Make no further changes to the webserver configuration.
2: Redirect - Make all requests redirect to secure HTTPS access. Choose this for
new sites, or if you're confident your site works on HTTPS. You can undo this
change by editing your web server's configuration.
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
Select the appropriate number [1-2] then [enter] (press 'c' to cancel): 

这里新网站敲2,意思大概是脚本自动把重定向写进conf,就不用我们再自己修改配置了。敲完看到Congratulations! You have successfully enabled https://tqlwsl.moe说明已经成功配置ssl证书了。可喜可贺!

替换图片url

虽然这里主站是支持https了,但是之前上传的很多图片还是http的。(可以在chrome按F12检查)数量少还能手动替换,数量多的话emmm。这里有一个自动链接替换的插件TEDUriReplace 请戳链接进原网站下载。

  1. 下完插件解压传到服务器
  2. 进管理页面启用
  3. 在规则一里输入https://tqlwsl.moe=>https://tqlwsl.moe并启用

这样就行了。按F12检查终端应该没有报错了。
https.JPG
爽死了

配置typecho的conf(可跳过)

根据大佬的博客,这里还需要在根目录的config.inc.php文件中加上:

/** 定义HTTPS */
define('__TYPECHO_SECURE__',true);

但实际上我不加也没问题了。chrome不会报错。:joy:

配置自动续期

虽然Let's Encrypt免费好用,但是它最大的问题就是...只有90天期限,所以我们要配置一个 cron jobsystemd timer的自动续期计划,这里以Cron为例:

  1. cd /var/spool/cron切进cron目录,ls看一下有没有配置文件,没有新建一个
  2. 输入
crontab -e

新建配置,应该会弹出一大堆~

  1. i进入insert模式,复制进去这行代码:
0 3 */7 * * /bin/certbot renew --renew-hook "/etc/init.d/nginx reload"

然后敲esc键退出插入模式,敲:wq保存退出。以上代码含义是:每隔7天,夜里3点整自动执行检查续期命令一次。续期完成后,重启nginx服务。

  1. 重启cron服务,输入:
service crond restart

这样就完事了。一劳永逸了,收工!

参考:
http://www.xiaofm.cn/index.php/archives/32/
https://www.liaosam.com/use-cron-service-and-certbot-for-renewal-of-letsencrypt-ssl-certificates.html

Last modification:May 10th, 2019 at 09:20 pm

Leave a Comment