Let's Encrypt简介
Let's Encrypt
是一个免费、开放,自动化的证书颁发机构。如果我们要启用
HTTPS
,就需要从证书授权机构(以下简称 CA ) 处获取一个证书,Let's Encrypt
就是一个 CA。本文是 Debian 8 + Nginx 下的配置过程。
Let's Encrypt 安装
Let's Encrypt 官方 推荐我们使用 certbot 客户端
注:letsencrypt
或者 letsencrypt-auto
这种方式从2016年5月开始已经过时了。
certbot
客户端要求安装 Python
要有 root
权限
如上图,我们在 certbot 的官网选择自己使用的服务器和操作系统。网站就会给出对应的安装文档。
安装客户端
sudo apt-get install certbot -t jessie-backports
获取证书
证书的获取有两种方式
第一种,web
服务器已经在运行了,不能关闭端口和服务器,可以使用 --webroot
模式
sudo certbot certonly --webroot -w /var/www/example -d example.com --agree-tos --email 你的@邮箱.com
这个命令会为
example.com
域名生成一个证书,使用 --webroot 模式会在/var/www/example
中创建.well-known
文件夹,这个文件夹里面包含了一些验证文件,letsencrypt
会通过访问example.com/.well-known/acme-challenge
来验证你的域名是否绑定的这个服务器。--agree-tos
参数是你同意他们的协议。
第二种,如果我们的项目没有根目录,只是一个微服务,可以使用 --standalone
模式。
这种模式会自动启用服务器的 443 端口,来验证域名的归属。我们有其他服务(例如nginx)占用了443端口,就必须先停止这些服务,在证书生成完毕后,再启用。
sudo certbot certonly --standalone -d example.com --agree-tos --email 你的@邮箱.com
证书生成目录在 /etc/letsencrypt/live/
,该目录下可以看到对应域名的文件夹,里面存放了指向证书的一些快捷方式。
证书申请成功后会提示证书的文件路径,以及证书到期时间:
IMPORTANT NOTES:
- Congratulations! Your certificate and chain have been saved at
/etc/letsencrypt/live/example.com/fullchain.pem. Your cert will
expire on 2018-02-08. To obtain a new version of the certificate in
the future, simply run Let's Encrypt again.
- If you like Let's Encrypt, please consider supporting our work by:
Donating to ISRG / Let's Encrypt: https://letsencrypt.org/donate
Donating to EFF: https://eff.org/donate-le
Nginx 配置
server {
server_name example.com www.example.com;
listen 443;
ssl on;
ssl_certificate /etc/letsencrypt/live/diamondfsd.com/fullchain.pem;
ssl_certificate_key /etc/letsencrypt/live/diamondfsd.com/privkey.pem;
location / {
proxy_pass http://localhost:4000;
}
}
重启 Nginx
服务就可以使用 https
了
证书自动更新
Let's Encrypt
提供的证书只有 90 天的有效期,我们必须在证书到期之前,重新获取这些证书。
我们可以在服务器添加一个 crontab
定时任务来处理
crontab -e
注:如果要执行的脚本需要 root
权限, 那就用 root
用户创建 crontab
添加下面的内容
10 1 * */2 * certbot renew --pre-hook "systemctl stop nginx" --post-hook "systemctl start nginx"
这个 cron
计划,意思是 每隔两个月的凌晨 1:10 执行更新操作。
--pre-hook
这个参数表示执行更新操作之前要做的事情,因为我用的 --standalone
模式的证书,所以需要停止 nginx
服务,解除端口占用。
--post-hook
这个参数表示执行更新操作完成后要做的事情,这里就恢复 nginx
服务的启用。
验证 https
使用 ssllabs 在线测试服务器证书强度及配置正确性
**粗体** _斜体_ [链接](http://example.com) `代码` - 列表 > 引用
。你还可以使用@
来通知其他用户。