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

简介

  • Let's Encrypt:一个免费、开放,自动化的证书颁发机构,由ISRG运作;
  • ISRG:全称为Internet Security Research Group,是一个关注网络安全的公益组织,其赞助商从非商业组织到财富100强公司都有,包括MozillaAkamaiCiscoFacebook,密歇根大学等等;
  • ISRG以消除资金,技术领域的障碍,全面推进加密连接成为互联网标配为自己的使命;
  • Let's Encrypt项目于2012年由Mozilla的两个员工发起,201411年对外宣布公开,2015123日开启公测;
  • Let's Encrypt目前处于公测期间,文档,工具还不完善,请_谨慎_用于生产环境;
  • 20165月,Let's Encrypt更名为Certbot,特此说明;

相关网址

安装指导

CentOS系统

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

获取证书并配置

更改Nginx的配置文件

1
2
3
4
5
6
7
8
9
10
11
server {
listen 80;
server_name www.xiaocoder.com;
root /data/www;
location / {
index index.html index.htm;
}
location ~ /.well-known/acme-challenge {
allow all;
}
}

验证域名所有权并申请证书

  • 若你的网站正在运行中,推荐使用webroot plugin
  • 命令格式
1
$ certbot certonly --webroot -w <网站根目录> -d <域名> --agree-tos --email <email>
  • 命令示例
1
2
$ certbot certonly --webroot -w /data/www -d www.xiaocoder.com --agree-tos --email xiao.950901@gmail.com
$ certbot certonly --webroot -w /data/www -d www.xiaocoder.com -d www.xiaocoder.cn --agree-tos --email xiao.950901@gmail.com
  • 支持多个域名使用相同的证书,只需使用多个-d选项即可;
  • 暂不支持通配符域名,*.example.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
  • 这一步可能需要花一些时间,请耐心等待;

配置Nginx使其支持Https

  • 使http请求强制跳转到https
1
2
3
4
5
6
7
8
server {
listen 80;
server_name www.xiaocoder.com;
location ~ /.well-known/acme-challenge {
allow all;
}
return 301 https://$server_name$request_uri;
}
  • 配置SSL_谨记_要开启443端口;
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
server {
listen 443 ssl;
server_name www.xiaocoder.com;
ssl_certificate /etc/letsencrypt/live/www.xiaocoder.com/fullchain.pem;
ssl_certificate_key /etc/letsencrypt/live/www.xiaocoder.com/privkey.pem;
ssl_protocols TLSv1 TLSv1.1 TLSv1.2;
ssl_dhparam /etc/ssl/certs/dhparams.pem;
ssl_ciphers 'ECDHE-RSA-AES128-GCM-SHA256:ECDHE-ECDSA-AES128-GCM-SHA256:ECDHE-RSA-AES256-GCM-SHA384:ECDHE-ECDSA-AES256-GCM-SHA384:DHE-RSA-AES128-GCM-SHA256:DHE-DSS-AES128-GCM-SHA256:kEDH+AESGCM:ECDHE-RSA-AES128-SHA256:ECDHE-ECDSA-AES128-SHA256:ECDHE-RSA-AES128-SHA:ECDHE-ECDSA-AES128-SHA:ECDHE-RSA-AES256-SHA384:ECDHE-ECDSA-AES256-SHA384:ECDHE-RSA-AES256-SHA:ECDHE-ECDSA-AES256-SHA:DHE-RSA-AES128-SHA256:DHE-RSA-AES128-SHA:DHE-DSS-AES128-SHA256:DHE-RSA-AES256-SHA256:DHE-DSS-AES256-SHA:DHE-RSA-AES256-SHA:AES128-GCM-SHA256:AES256-GCM-SHA384:AES128-SHA256:AES256-SHA256:AES128-SHA:AES256-SHA:AES:CAMELLIA:DES-CBC3-SHA:!aNULL:!eNULL:!EXPORT:!DES:!RC4:!MD5:!PSK:!aECDH:!EDH-DSS-DES-CBC3-SHA:!EDH-RSA-DES-CBC3-SHA:!KRB5-DES-CBC3-SHA';
ssl_prefer_server_ciphers on;
ssl_session_timeout 1d;
ssl_session_cache shared:SSL:50m;
ssl_stapling on;
ssl_stapling_verify on;
add_header Strict-Transport-Security max-age=15768000;
root /data/www;
index index.html index.htm;
location / {
try_files $uri $uri/ =404;
}
}
  • 重新加载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

有你就有世界,感谢有你,昕!
0%