使用certbot为Nginx一键配置Let's Encrypt SSL安全证书

还记得Let's Encrypt刚出来的时候,繁琐的手动配置简直是让人心力交瘁。这几天,由于购买了阿里的服务器,并且也需要提供后端服务,于是不得不再次需要去配置免费ssl证书的,但是,这次,让我出乎意料的是,配置ssl证书居然这么简单。

certbotLet's Encrypt官网推荐的自动化配置工具,工具官网可以选择针对Apache/Nginx/Haproxy/Plesk等不同服务器不同操作系统的安装配置方法。这里只介绍最常用的Nginx+CentOS组合。

首先,不得不说,certbot有几个不得不解决的依赖问题。

  1. certbot依赖的python2的urllib3库版本为1.21.1版本,如果已经安装了更高版本的urllib3库,那么降级吧pip install urllib3==1.21.1issue参考

  2. 如果python2的requests库版本小于2.6.0,那么自觉升级pip install --upgrade --force-reinstall 'requests==2.6.0'issue参考

  3. 接下来真正的安装过程:

    1
    2
    yum install epel-release -y && yum update -y
    yum install python2-certbot-nginx -y
  4. 确保你的nginx配置已经有配置域名,并且域名解析也已经指向该IP地址,域名能够通过80端口正常访问。

  5. 当安装完成以后,一切就简单了,运行certbot --nginx,会以提问的方式询问你几个配置问题:

    1
    2
    3
    4
    5
    6
    7
    8
    # 第一步会读取你的nginx配置,询问你需要对哪些域名需要添加ssl
    Which names would you like to activate HTTPS for?
    -------------------------------------------------------------------------------
    1: a.haofly.net
    2: b.haofly.net
    -------------------------------------------------------------------------------
    # 第二步询问你在遇到http的时候是否需要重定向到https
    Please choose whether or not to redirect HTTP traffic to HTTPS, removing HTTP access.

    就这样,配置就算完成了,可以看到新的nginx配置已经写入到配置文件中,访问域名也会自动跳转到https了。

  6. 当然,Let's Encrypted只有90天的有效期,可以使用这条命令更新证书: sudo certbot renew --dry-run,官方建议每天随机运行两次该命令,如果证书没有过期,运行命令并不会对你的服务器造成什么影响,所以就添加如下定时任务:

    1
    0 0,12 * * * python -c 'import random; import time; time.sleep(random.random() * 3600)' && certbot renew
haofly wechat
欢迎您扫一扫上面的微信公众号,订阅我的博客!
坚持原创技术分享,您的支持将鼓励我继续创作!