acme.sh实现了acme协议,可以从let’s encrypt方便的生成免费https证书,最主要因为let’s encrypt的证书都是有有效期的,过期以后需要手动续期,而acme.sh会为你生成一个定时cron计划任务,这样就可以自动检测证书是否到期,快到期就会自动为你重现申请证书,避免了自己忘记证书过期时间而没用重新申请的尴尬。

使用acme.sh脚本申请Let’s Encrypt泛域名SSL证书

首先安装acme.sh

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

执行以上命令后会在用户的Home目录下自动生成一个名为 .acme.sh 的隐藏目录,以后acme.sh脚本的所有执行结果数据都放在此目录中,不会扰乱你自己的目录结构。

source ~/.bashrc

设置DNS API,acme.sh验证域名时会用此验证

可从域名解析商后台查询相关API Key,acme.sh支持多个平台的域名解析验证,此文以cloudflare解析为例。

export CF_Key="jflajfajsfljsdfjlskfjlsf"

export CF_Email="[email protected]"

开始申请签发证书

acme.sh --issue --dns dns_cf -d *.example.com

申请成功后会提示证书的绝对路径(都在用户Home目录下的.acme.sh子目录内),接下来就可以拷贝证书到Web服务器对应的目录并配置启用HTTPS了。

Nginx配置HTTPS

server {
    
    listen 443 ssl;

    ssl_protocols TLSv1.2 TLSv1.1 TLSv1;
    ssl_certificate /where/is/your/.acme.sh/*.example.com/fullchain.cer;
    ssl_certificate_key /where/is/your/.acme.sh/*.example.com/*.example.key;

    server_name www.example.com;
    
    set     $root_path '/www/www.example.com';
    root    $root_path;
    
    ... ...
}