Let’s Encrypt 是一个由非营利性组织 互联网安全研究小组(ISRG)提供的免费、自动化和开放的证书颁发机构(CA)。借助 Let’s Encrypt 颁发的证书可以为我们的网站免费启用 HTTPS(SSL/TLS) 。
这里直接使用第三方客户端 acme.sh 申请,据了解这种方式可能是目前 Let’s Encrypt 免费证书客户端最简单、最智能的 shell 脚本,可以自动发布和续订 Let’s Encrypt 中的免费证书。

安装 acme.sh

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

Failed to connect to raw.githubusercontent.com port 443 解决方案

可使用命令修改host sudo vi /etc/hosts 添加host 199.232.28.133 raw.githubusercontent.com

image.png
出现了红色的提醒就安装 socat

yum install socat -y

安装socat后再执行安装acme.sh命令

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

acme.sh --version

image.png
安装命令后有些系统会提示如下,acme.sh命令也使用不了
image.png
执行下面的命令让 PATH 生效即可:

source ~/.bashrc

生成证书

据 acme.sh 官方文档介绍,其实现了 acme 协议支持的所有验证协议,一般有两种方式验证:http 和 dns 验证。也就是我们有两种选择签发证书,这里我直接选择 http 验证方式,另外一种方式本篇不做介绍。
签发证书也很简单,一条命令:

acme.sh --issue -d lxjasxq.com -w /var/www/TP6-xiao/public/vue-admin-template/dist

explame:

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

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

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

证书签发成功会有如下输出:
image.png
从截图看出,生成的证书放在了/root/.acme.sh/esofar.cn目录。

另外,可以通过下面两个常用acme.sh命令查看和删除证书:

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

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

至此,证书就下载成功。

安装证书

我的站点是由 Nginx 承载的,所以本节内容重点记录如何将证书安装到 Nginx。
上一小节,生成的证书放在了/root/.acme.sh/esofar.cn目录,因为这是 acme.sh 脚本的内部使用目录,而且目录结构可能会变化,所以我们不能让 Nginx 的配置文件直接读取该目录下的证书文件。
正确的做法就是使用--installcert命令,指定目标位置,然后证书文件会被 copy 到相应的位置。
一条命令即可解决:

acme.sh  --installcert -d lxjasxq.com \
         --key-file /usr/local/nginx/ssl/lxjasxq.com.key \
         --fullchain-file /usr/local/nginx/ssl/fullchain.cer \
         --reloadcmd "service nginx force-reload"

这里我将证书放到了/usr/local/nginx/ssl/目录下。
输出如下信息,则操作成功:
image.png
最后一步就是,修改 Nginx 配置文件启用 ssl,修改完成后需要重启下 Nginx,这一块不再详述。Nginx 配置请参考:

server {
    listen 443 ssl;
    server_name lxjasxq.com;

    ssl on;
    ssl_certificate /usr/local/nginx/ssl/fullchain.cer;
    ssl_certificate_key /usr/local/nginx/ssl/esofar.cn.key;

    root /var/www/TP6-xiao/public/vue-admin-template/dist;
    index index.php index.htm index.html;

    access_log /usr/local/nginx/logs/lxjasxq_access.log;

    location / {
        try_files $uri $uri/ @router;
        index index.php index.htm index.html;
    }

    location @router {
        rewrite ^.*$ /index.html last;
    }
}

server {
    listen 80;
    server_name lxjasxq.com;

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

完成证书部署后可以通过如下站点检测网站的安全级别:

  • https://myssl.com
  • https://www.ssllabs.com

    更新证书

    目前 Let’s Encrypt 的证书有效期是90天,时间到了会自动更新,您无需任何操作。 今后有可能会缩短这个时间, 不过都是自动的,不需要您关心。(ps如果证书没有自动更新,可能是acme.sh版本太老原因,请先升级acme.sh版本)
    但是,您也可以强制续签证书:

    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
    

    相关阅读

  • 快速签发 Let’s Encrypt 证书指南