使用Let's Encrypt证书为网站启用https

简介

  • Let's Encrypt:一个免费、开放,自动化的证书颁发机构,由ISRG运作,在20165月,更名为Certbot
  • ISRGInternet Security Research Group,是一个关注网络安全的公益组织,其赞助商有非商业的组织、财富100强的公司。
  • ISRG的使命:以消除资金,技术领域的障碍,全面推进加密连接成为互联网的标配。
  • Let's Encrypt项目于2012年由Mozilla的两个员工发起,201411年对外宣布公开,2015123日开启公测。

相关网址

  • Let's Encrypt官网
  • Cerbot官网GitHub

安装指导

CentOS

1
yum makecache && yum update -y
  • 安装软件:
1
yum install -y certbot

证书指导

配置文件

  • 更改Nginx的配置文件:
1
2
3
4
5
6
7
8
9
10
11
12
13
server {
listen 80;
server_name www.xiaocoder.com;
location ~ /.well-known {
allow all;
root /data/www/;
}

location / {
root /data/www/;
index index.html index.htm;
}
}

申请证书

  • 若你的网站正在运行中,推荐使用webroot plugin

  • 支持多个域名使用相同的证书,只需使用多个-d选项即可。

  • 命令格式

1
certbot certonly --webroot -w <网站根目录> -d <域名> --agree-tos --email <email>
  • 命令示例
1
certbot certonly --webroot -w /data/www -d www.xiaocoder.com --agree-tos --email xiao.950901@gmail.com

证书位置

  • 所有已申请的证书都放在/etc/letsencrypt/archive下,而/etc/letsencrypt/live总指向最新版本的软链接。

  • 在Web服务器中配置时,建议指向/etc/letsencrypt/live目录下的文件,避免证书更新后,还需要更改配置。

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

    • cert.pem:服务器证书。
    • privkey.pem:服务器证书对应的私钥。
    • chain.pem:除服务器证书外,浏览器解析所需的其他全部证书,比如根证书和中间证书。
    • fullchain.pem:包含服务器证书的全部证书的文件。
  • 一般情况下fullchain.pemprivkey.pem就够用了。

  • 加强diffie-hellman算法强度(耐心等待):

1
openssl dhparam -out /etc/ssl/certs/dhparams.pem 2048

使用证书

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
server {
listen 80;
server_name www.xiaocoder.com;
location ~ /.well-known {
allow all;
root /data/www/;
}

return 301 https://$server_name$request_uri;
}

server {
listen 443 ssl;
server_name www.xiaocoder.com;

location / {
root /data/www;
index index.html index.htm;
try_files $uri $uri/ =404;
}

ssl_stapling on;
ssl_stapling_verify on;
ssl_session_tickets on;
ssl_session_timeout 5m;
ssl_prefer_server_ciphers on;
ssl_protocols TLSv1.2 TLSv1.3;
ssl_dhparam /etc/ssl/certs/dhparams.pem;
ssl_session_cache builtin:1000 shared:SSL:10m;
ssl_certificate /etc/letsencrypt/live/www.xiaocoder.com/fullchain.pem;
ssl_certificate_key /etc/letsencrypt/live/www.xiaocoder.com/privkey.pem;
ssl_ciphers TLS-AES-256-GCM-SHA384:TLS-CHACHA20-POLY1305-SHA256:TLS-AES-128-GCM-SHA256:ECDHE-RSA-AES256-GCM-SHA384:ECDHE-RSA-AES128-GCM-SHA256:DHE-RSA-AES256-GCM-SHA384:DHE-RSA-AES128-GCM-SHA256:!aNULL:!eNULL:!MD5;
}
  • 重新加载Nginx服务:
1
nginx -s reload
  • 使用浏览器访问,测试是否配置成功。
  • 使用SSL LABS在线测试服务器证书强度。

证书续约

  • 证书的有效期为3个月,3个月后需要刷新证书。
  • 刷新证书的命令:
1
certbot renew
  • 在执行刷新命令时,只有当过期时间小于30天时,才会真正的更新。

  • 因此,一个实际的操作方式是每星期或每天执行一次更新操作。

  • 添加Ctrontab任务,实现自动续约:

1
crontab -e
  • 每星期一的330分执行更新证书操作,335分执行Nginx重载操作。
1
2
30 3 * * 1 /usr/bin/certbot renew >> /var/log/le-renew.log
35 3 * * 1 /usr/sbin/nginx -s reload

请作者喝瓶肥宅快乐水