文章转载自Nginx启用Let’s Encrypt SSL证书,根据实际搭建情况,略有修改
Let’ s Encrypt 是一个免费的 SSL/TLS 证书发行机构, 证书有效期为90天, 到期前30内可续期,因此不需要担心费用问题。
服务器环境:
- nginx-1.10.1
- php-7.0.4
- mariadb-10.1.13
启用证书的主要过程包括:客户端安装、获取证书、配置Nginx、证书自动续期等几个方面。
客户端下载
Let’ s Encrypt客户端现已更名为certbot,客户端的地址为https://github.com/certbot/certbot/releases 。
1 | 下载 |
运行一次客户端,进行检查升级:
1 | 进入目录 |
如果没什么问题的话,会显示帮助文档。
获取证书
申请过程中要验证绑定的域名是否属于申请人, 其原理就是申请人在域名所在的服务器上申请证书, 然后 Let’ s Encrypt 会访问绑定的域名与客户端通信成功即可通过。
验证的方式有两种,一种是停止当前的 web server 服务, 让出 80 端口, 由客户端内置的 web server 启动与 Let’ s Encrypt 通信;一种是在域名根目录下创建一个临时目录, 并要保证外网通用域名可以访问这个目录,这种方式不需要停止当前的 web server 服务。
证书获取方式1:通过访问80端口方式验证
1 | 停止nginx |
证书获取方式2:通过临时目录验证
1 | --webroot 参数:指定使用临时目录的方式. -w 参数:指定后面-d 域名所在的根目录, 如果一次申请多个域的, 可以附加更多 -w...-d... 这段. |
完成上面的操作即可获得 SSL 证书, 保存在 “/etc/letsencrypt/live/根域名/” 目录下, 会产生 4 个文件, 其中3个证书文件, 1个私钥文件. 不要移动证书的位置, 以免续期时出现错误。关于Letsencrypt使用的更多命令参见「这里」。
我这里是通过方式2申请的证书。
配置Nginx启用https
上面你的Nginx配置并没有启用ssl,下面我们需要开始配置nginx,让其支持https。进行这一步的前提是你前面已经成功生成证书。
编辑文件/etc/nginx/conf.d/default.conf(我是通过yum的方式安装的nginx,配置目录在这里,你根据自己的情况来),进行如下配置(这个是我的完整配置):
1 | #设置非安全连接永久跳转到安全连接 |
证书续期
前面说了,证书的有效期是3个月,你可以在证书过期前的30天内,进行续期,也可以进行脚本自动续期。
方式1
进入你在下载的certbot客户端目录,执行证书续期的脚本命令如下:
1 | ./certbot-auto renew |
renew 参数是官方推荐的续期方式, 使用这个参数会遍历 /etc/letsencrypt/live 下所有的证书, 如果证书在可续期的时间范围内(过期前30天内), 就会申请新的证书并替换原有证书, 否则跳过。
方式2
如果要指定更新某个域名的证书, 则要使用 certonly 参数, 其实和新申请证书时的命令差不多.
1 | ./certbot-auto certonly --webroot --renew-by-default --email admin@4spaces.org -w /usr/share/nginx/html -d 4spaces.org -d www.4spaces.org |
方式3
上面两种方式,都是手动去执行的,我们可以将上面两种方式跟linux的定时任务进行结合,最终脚本如下:
1)通过端口验证的脚本
1 | !/bin/sh |
2)通过临时目录的脚本
1 | !/bin/sh |
上面两个脚本中的/path/to/certbot-auto
代表你下载客户端解压后的目录,其中目录下有个certbot-auto
。
选取一种方式,将对应的脚本保存为 certbotrenew.sh
。
添加可执行权限
1 | chmod +x certbotrenew.sh |
编辑 crontab 配置文件或执行 crontab -e
添加 cron 任务
1 | 编辑定时任务 |
我这里设置为每月28号23点执行此脚本:
1 | 0 23 28 * * /bin/sh /home/michael/certbot/certbotrenew.sh |
保存退出即可。
内容参考: