Nginx部署Let's Encrypt免费SSL证书踩过的坑

7 minute read

申请Let’s Encrypt永久免费SSL证书

Let’s Encrypt简介

Let’s Encrypt公共且免费SSL的项目

Let’s Encrypt免费SSL支持包括FireFox、Chrome在内的主流浏览器的兼容和支持,虽然目前是公测阶段,但是也有不少的用户在自有网站项目中正式使用起来。

步骤如下:

第一、安装Let’s Encrypt前的准备工作

1#检查系统是否安装git
2git  --version 
3#git 安装
4yum install git
5#查看python版本,尽量保证在2.7以上
6python -v 

第二、获取Let’s Encrypt免费SSL证书 //当时配置的时候,碰到好多错误,还好网上都有了解决办法,大家出错的时候可以看看letsencrypt下面的日志,里面报错内容都有,把错误尽量都解决了,再安装,不然错一次申请一次证书,次数用完,就要在等一周才能申请了.

 1#获取letsencrypt
 2git clone https://github.com/letsencrypt/letsencrypt
 3#进入letsencrypt目录
 4cd letsencrypt
 5#生成证书1
 6//可以填两个域名,也可以填一个
 7./letsencrypt-auto certonly --standalone --email your_email@address -d your_url_address -d www.your_url_address
 8
 9#生成证书2
10//我一般用这个
11./letsencrypt-auto
121. 填入邮箱地址
132. 选择A
143. 选择Y
154. 填入域名地址    //多域名用空格或者/或者,隔开

第三、Let’s Encrypt免费SSL证书获取与应用

在完成Let’s Encrypt证书的生成之后,我们会在"/etc/letsencrypt/live/your_url_address/“域名目录下有4个文件就是生成的密钥证书文件。

cert.pem - Apache服务器端证书 chain.pem - Apache根证书和中继证书 fullchain.pem - Nginx所需要ssl_certificate文件 privkey.pem - 安全证书KEY文件

如果我们使用的Nginx环境,那就需要用到fullchain.pem和privkey.pem两个证书文件,在部署Nginx的时候需要用到。在Nginx环境中,只要将对应的ssl_certificate和ssl_certificate_key路径设置成我们生成的2个文件就可以。

1#打开linux配置文件,找到HTTPS 443端口配置的server,如果有以下文件就不需要再添加了,没有的话就添加上
2 ssl_certificate /etc/letsencrypt/live/your_url_address/fullchain.pem;
3 ssl_certificate_key /etc/letsencrypt/live/your_url_address/privkey.pem;

第四、解决Let’s Encrypt免费SSL证书有效期问题

Let’s Encrypt证书是有效期90天的,需要我们自己手工更新续期才可以。 手工续期命令如下:_

1./letsencrypt-auto certonly --renew-by-default --email your_email@address -d your_url_address -d www.your_url_address

这样我们就可以续期,当然我们也可以写一个cron脚本让他自动续期

从证书中删除域名

Let’s Encrypt目前并不提供从证书中删除域名的功能,所以我们只是把证书删除后重新申请.

证书每周申请数量有限,不要一直删了申请

删除证书的时候,需要删除archive中的文件和live中的符号链接,同时还需要删除证书更新的配置文件:

1rm -rf /etc/letsencrypt/live/www.example.com/
2rm -rf /etc/letsencrypt/archive/www.example.com/
3rm /etc/letsencrypt/renewal/www.example.com.conf

删除后,重新申请证书,这里给出的是webroot方式,当然你也可以用上面的方法:

1letsencrypt certonly --webroot -w /var/www/example -d your_url_address -d www.your_url_address

自动续期脚本

1//这个脚本放在和let's encrypt目录同级的目录下
2#!/bin/sh
3# This script renews all the Let's Encrypt certificates with a validity < 30 days
4
5if ! /opt/letsencrypt/letsencrypt-auto renew > /var/log/letsencrypt/renew.log 2>&1 ; then
6    echo Automated renewal failed:
7    cat /var/log/letsencrypt/renew.log
8    exit 1
9fi

权限

1chmod +x renewCerts.sh

cron脚本

1//每个月凌晨1点运行
20 0 1 * * /bin/sh /opt/renewCerts.sh

坑:

  • 每周申请次数有限
  • 国内服务器要放行443端口,然后重启服务器,不然访问不到,(当时国外两个服务器很快就配置好了,国内服务器一直出错出错,后来问了几个表哥,原来是阿里云要放行一下443端口.)
  • 如果用以上第二种方法申请,nginx服务器默认的配置在删除证书文件后还存在.