通过免费SSL证书服务Let's Encrypt和certbot给自己的域名添加https证书

Author Avatar
双例模式 5月 29, 2018
  • 在其它设备中阅读本文章

网站通常有安全以及防劫持篡改等需求,基础的一个解决办法就是加上SSL证书,使用https进行访问,但是通常证书都需要付费使用,且费用较高,所以之前未曾有很好的普及。在Let’s Encrypt的免费SSL服务出现之后,很多网站和web服务开始使用Let’s Encrypt的免费服务,比如SSL FOR FREE就提供了这个功能。

申请SSL FOR FREE的服务

通过SSL FOR FREE网站按照步骤操作即可,写得非常详细,操作非常简单,实在英文不好的同学可以参考这里

SSL FOR FREE会生成三个文件,其中有一个是key文件,另外两个证书文件一个包含了中间证书而另外一个未包含,通常都选择包含了中间证书的文件作为最终的证书文件路径(例如微信小程序后台仅支持TLS v1.2的https服务并且要求有中间证书,否则在android设备上将无法访问后台)。另外也可以可以在这里进行添加中间证书的操作。

这样基本可以满足一些使用,但是有一个问题,就是这样生成的证书每次仅有90天的试用期,90天过后需要重新认证,操作比较麻烦;再后来出现了certbot,可以通过设置来进行90天的自动更新,这样基本可以满足要求较高的个人用户或者中小企业的安全需求。下面就其使用过程进行一下归纳总结。

安装certbot服务

首先需要有python2.7环境,通常主流服务器都已经有了python环境,如果有特殊情况需要自己安装的可参考这里

安装好python之后,分别执行如下命令:

yum install -y epel-release
yum install -y certbot

执行完之后则完成了certbot的安装,然后通过如下命令进行证书申请:

# 使用方法:certbot certonly --webroot -w [Web站点目录] -d [站点域名] -m [联系人email地址] --agree-tos
# 例如:
certbot certonly --webroot -w /home/webadm/webroot/caishiduo/ -d www.caishiduo.com,caishiduo.com -m laijj@jiqibaba.com --agree-tos

这里邮件信息一定要有效,快到期的时候会有邮件提醒的,安装完成后会有如下提示:

IMPORTANT NOTES:
 - Congratulations! Your certificate and chain have been saved at
   /etc/letsencrypt/live/[xxx.xxx.xxx]/fullchain.pem. Your cert will
   expire on 2017-03-20. To obtain a new or tweaked version of this
   certificate in the future, simply run certbot again. To
   non-interactively renew *all* of your certificates, run "certbot
   renew"
 - If you like Certbot, please consider supporting our work by:

   Donating to ISRG / Let's Encrypt:   https://letsencrypt.org/donate
   Donating to EFF:                    https://eff.org/donate-le

安装好之后,证书位置在

/etc/letsencrypt/live/mt.jiqibaba.com/

这里有个坑,有时候有可能会报一个错:

ImportError: 'pyOpenSSL' module missing required functionality. Try upgrading to v0.14 or newer.

这是由于pyOpenSSL模块在python2.7上未更新的原因造成的,解决办法是使用如下命令更新python相关的包:

pip2 uninstall requests
yum reinstall python-requests

pip2 uninstall six
yum reinstall python-six

pip2 uninstall urllib3
yum reinstall python-urllib3

然后再重新执行申请证书的命令

certbot certonly --webroot -w /home/webadm/webroot/caishiduo/ -d www.caishiduo.com,caishiduo.com -m laijj@jiqibaba.com --agree-tos

设置自动更新证书

因为证书有效期只有90天,故我们可以设置一个自动更新的crontab进行自动更新,省去一些烦恼的操作,certbot自带的更新指令如下:

# 更新证书
certbot renew --dry-run 
# 如果不需要返回的信息,可以用静默方式:
certbot renew --quiet

配置的crontab如下:

# 每月1号5时执行执行一次更新,并重启nginx服务器
00 05 01 * * /usr/bin/certbot renew --quiet && /bin/systemctl restart nginx

注意,以上命令中重启nginx的指令根据部署情况可能各有不一样,可以灵活修改

如果更新的时候有问题,提示:

 Could not decode 'status' (u'ready')

可尝试使用:

yum update certbot.noarch python2-acme.noarch python2-certbot.noarch

更新certbot之后再进行更新

整个流程的配置参考了这里

完成以上配置后,即可正常使用https服务