启用 https 简单免费的 Let's Encrypt SSL证书配置

Let's Encrypt简介

Let's Encrypt 是一个免费、开放,自动化的证书颁发机构。html

若是咱们要启用 HTTPS,就须要从证书受权机构(如下简称 CA ) 处获取一个证书,Let's Encrypt 就是一个 CA。本文是 Debian 8 + Nginx 下的配置过程。nginx

Let's Encrypt 安装

Let's Encrypt 官方 推荐咱们使用 certbot 客户端web

注:letsencrypt 或者 letsencrypt-auto 这种方式从2016年5月开始已通过时了。服务器

certbot 客户端要求安装 Python 要有 root 权限ide

clipboard.png

如上图,咱们在 certbot 的官网选择本身使用的服务器和操做系统。网站就会给出对应的安装文档。微服务

安装客户端post

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 参数是你赞成他们的协议。spa

第二种,若是咱们的项目没有根目录,只是一个微服务,可使用 --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 在线测试服务器证书强度及配置正确性

参考扩展

Let's Encrypt 使用教程,免费的SSL证书,让你的网站拥抱 HTTPS

相关文章
相关标签/搜索