Nginx 部署免费SSL安全证书Let's Encrypt (certbot)

关于Let’s Encrypt

Let’s Encrypt 是一个免费、开放,自动化的证书颁发机构,由 ISRG(Internet Security Research Group)运作。

兼容性: Let’s Encrypt 已经得了 IdenTrust 的交叉签名,这意味着其证书现在已经可以被所有主流的浏览器所信任,包括从IE6-IE11,其它现代浏览器更没话说,100%放心使用。

申请频率限制

注册IP限制:每IP每3个小时不超过10次

域名数量限制:每个域名(包含子域名)每7天不超过5个

证书位置

所有版本已申请的证书放在 /etc/letsencrypt/archive下,/etc/letsencrypt/live是指向最新版本的符号链接。web server中关于证书的配置建议指向 live 目录下的文件,以免证书更新后还需要更改配置。

每个域名一个目录,主要包含以下几个文件:

  • cert.pem 申请的服务器证书文件
  • privkey.pem 服务器证书对应的私钥
  • chain.pem 除服务器证书外,浏览器解析所需的其他全部证书,比如根证书和中间证书
  • fullchain.pem 包含服务器证书的全部证书链文件

证书更新

Let’s Encrypt 颁发的服务器证书有效期为90天,官方表示此为出于安全原因,降低错发证书,证书泄漏的危害。通过自动续期来解决有效期短的问题,官方建议每2个月更新证书。

如果到期没有更新证书,CA会向申请证书时提交的邮件地址发送提醒email。

自动续期可以使用 crontab 实现。注意更新证书后重启 web server !

生成证书

通过官方提供的脚本自动生成证书

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
git clone https://github.com/certbot/certbot
cd certbot

# 墙内服务器?如果使用最新版的certbot有问题,可下载老版本的来用

# 方式一、(推荐)使用webroot方式,生成、升级证书都不需要重启web服务器
# 生成、升级证书都用如下脚本
./certbot-auto certonly \
--webroot -w /web/htdocs/imcm.me/ \
--email cmpan@qq.com \
-d imcm.me \
-d www.imcm.me


# 方式二、使用 standalone 方式,升级时需要停止web服务器
./certbot-auto certonly --standalone --email cmpan@qq.com -d imcm.me -d www.imcm.me

nginx 部署

跟http对比,只需要调整如下设置即可

1
2
3
4
5
6
7
8
9
# 监听443端口
listen 443;

# 启用 ssl
ssl on;
ssl_certificate /etc/letsencrypt/live/imcm.me/fullchain.pem;
ssl_certificate_key /etc/letsencrypt/live/imcm.me/privkey.pem;
ssl_protocols TLSv1 TLSv1.1 TLSv1.2 SSLv3;
ssl_prefer_server_ciphers on;

常见问题

1)IE6打不开
ssl_protocols 增加SSLv3参数即可,IE6的安全设置中默认不勾选 TLS 协议。

2)第一次执行letsencrypt-auto需要安装需要的关联包,需要等待的时间比较长,甚至更新系统关联包后执行脚本不成功,再执行一次就行。

3)免费版本不支持通授权域名使用通配符

1
2
# 不支持使用 * 通配符
-d *.imcm.me