快速签发 Let's Encrypt 证书指南

说在前面

本文仅记录给本身的网站添加“小绿锁”的动手操做过程,不涉及 HTTPS 工做原理等内容的讲解,感兴趣的同窗能够参考篇尾的文章自行了解。html

简单了解下个人实验环境:nginx

  • 云服务器:CentOS 7.4
  • 网站宿主:Nginx 1.12.2
  • 备案域名:www.esofar.cn

这里以www.esofar.cn做为演示域名,届时必定要修改成本身的域名。git

什么是 Let's Encrypt

Let's Encrypt

Let's Encrypt 是一个由非营利性组织 互联网安全研究小组(ISRG)提供的免费、自动化和开放的证书颁发机构(CA)。github

简单的说,借助 Let's Encrypt 颁发的证书能够为咱们的网站免费启用 HTTPS(SSL/TLS) 。web

Let's Encrypt免费证书的签发/续签都是脚本自动化的,官方提供了几种证书的申请方式方法,点击此处 快速浏览。shell

官方推荐使用 Certbot 客户端来签发证书,这种方式可参考文档自行尝试,不作评价。安全

我这里直接使用第三方客户端 acme.sh 申请,据了解这种方式多是目前 Let's Encrypt 免费证书客户端最简单、最智能的 shell 脚本,能够自动发布和续订 Let's Encrypt 中的免费证书。bash

安装 acme.sh

安装很简单,一条命令:服务器

curl https://get.acme.sh | sh

整个安装过程进行了如下几步,了解一下便可:dom

  1. 把 acme.sh 安装到当前用户的主目录$HOME下的.acme.sh文件夹中,即~/.acme.sh/,以后全部生成的证书也会放在这个目录下;
  2. 建立了一个指令别名alias acme.sh=~/.acme.sh/acme.sh,这样咱们能够经过acme.sh命令方便快速地使用 acme.sh 脚本;
  3. 自动建立cronjob定时任务, 天天 0:00 点自动检测全部的证书,若是快过时了,则会自动更新证书。

安装命令执行完毕后,执行acme.sh --version确认是否能正常使用acme.sh命令。

https://github.com/Neilpang/acme.sh
v2.7.9

若有版本信息输出则表示环境正常;若是提示命令未找到,执行source ~/.bashrc命令重载一下环境配置文件。

整个安装过程不会污染已有的系统任何功能和文件,全部的修改都限制在安装目录~/.acme.sh/中。

生成证书

据 acme.sh 官方文档介绍,其实现了 acme 协议支持的全部验证协议,通常有两种方式验证:http 和 dns 验证。

也就是咱们有两种选择签发证书,这里我直接选择 http 验证方式,另一种方式本篇不作介绍,可参考文档自行尝试。

签发证书也很简单,一条命令:

acme.sh --issue -d esofar.cn -d www.esofar.cn -w /home/wwwroot/esofar.cn

简单解释下这条命令涉及的几个参数:

  • --issue是 acme.sh 脚本用来颁发证书的指令;
  • -d--domain的简称,其后面须填写已备案的域名;
  • -w--webroot的简称,其后面须填写网站的根目录。

证书签发成功会有以下输出:

Cert1
Cert2

从截图看出,生成的证书放在了/root/.acme.sh/esofar.cn目录。

另外,能够经过下面两个经常使用acme.sh命令查看和删除证书:

# 查看证书列表
acme.sh --list 

# 删除证书
acme.sh remove <SAN_Domains>

至此,证书就下载成功。

安装证书

个人站点是由 Nginx 承载的,因此本节内容重点记录如何将证书安装到 Nginx,其余 webserver 请参考 acme.sh 文档自行实践。废话很少说,进入本节正题。

上一小节,生成的证书放在了/root/.acme.sh/esofar.cn目录,由于这是 acme.sh 脚本的内部使用目录,并且目录结构可能会变化,因此咱们不能让 Nginx 的配置文件直接读取该目录下的证书文件。

正确的作法就是使用--installcert命令,指定目标位置,而后证书文件会被 copy 到相应的位置。

一条命令便可解决:

acme.sh  --installcert -d esofar.cn \
         --key-file /etc/nginx/ssl/esofar.cn.key \
         --fullchain-file /etc/nginx/ssl/fullchain.cer \
         --reloadcmd "service nginx force-reload"

这里我将证书放到了/etc/nginx/ssl/目录下。

输出以下信息,则操做成功:

Install Cert

最后一步就是,修改 Nginx 配置文件启用 ssl,修改完成后须要重启下 Nginx,这一块再也不详述。Nginx 配置请参考:

server {
        listen 443 ssl;
        server_name esofar.cn;
        
        ssl on;
        ssl_certificate      /etc/nginx/ssl/fullchain.cer;
        ssl_certificate_key  /etc/nginx/ssl/esofar.cn.key;

        root /home/wwwroot/esofar.cn;
        index index.html;
    
        location / {
            try_files $uri $uri/ @router;
            index index.html;
        }
    
        location @router {
            rewrite ^.*$ /index.html last;
        }
    }
    
    server {
        listen 80;
        server_name esofar.cn;
        return 301 https://$server_name$request_uri;
    }

完成证书部署后能够经过以下站点检测网站的安全级别:

更新证书

目前 Let's Encrypt 的证书有效期是90天,时间到了会自动更新,您无需任何操做。 从此有可能会缩短这个时间, 不过都是自动的,不须要您关心。

可是,您也能够强制续签证书:

acme.sh --renew -d example.com --force

更新 acme.sh

目前因为 acme 协议和 letsencrypt CA 都在频繁的更新, 所以 acme.sh 也常常更新以保持同步。

升级 acme.sh 到最新版:

acme.sh --upgrade

若是您不想手动升级,,能够开启自动升级:

acme.sh  --upgrade  --auto-upgrade

您也能够随时关闭自动更新:

acme.sh --upgrade  --auto-upgrade  0

相关阅读

相关文章
相关标签/搜索