使用ACME手动申请证书

  1. 安装并启用acme.sh脚本

    apt install -y curl && curl https://get.acme.sh | sh && source .bashrc
  2. 切换证书签发机构

    acme.sh --set-default-ca --server letsencrypt

    3.签发证书

    acme.sh  --issue -d 域名 --standalone

    4.安装证书

    认生成的证书都放在安装目录下: ~/.acme.sh/,但是不要在web服务器中直接引用目录下的证书文件,也不要手动来拷贝证书文件到具体的web服务器中,手动拷贝会导致之后更新证书流程不能完全自动。
    
    正确方式是使用acme.sh的安装证书命令,acme.sh自动拷贝证书文件到具体目录中,拷贝命令会被记录下来,之后自动更新证书流程也会执行此拷贝步骤,从而实现更新证书流程的完全自动化。
    
    格式例子如下:
    
    acme.sh --install-cert -d xxx \
         --cert-file xxx \
         --key-file xxx \
         --fullchain-file xxx\
         --reloadcmd xxx
    根据web服务器需要的文件按需引入对应的参数,reloadcmd定义证书更新后重启对应的web服务命令。
    
    以nginx为例:
    
    acme.sh --install-cert -d www.a.com -d img.a.com \
         --key-file   /etc/nginx/cert_file/key.pem  \
         --fullchain-file /etc/nginx/cert_file/fullchain.pem \
         --reloadcmd     "service nginx force-reload"
    证书类型说明:
  • --cert-file

    • cert.pem 服务端证书
  • --key-file

    • privkey.pem 证书的私钥
  • --ca-file

    • ca.pem 数字证书
  • --fullchain-file

    • fullchain.pem 包括了 cert.pem 和 chain.pem 的内容
    • chain.pem 浏览器需要的所有证书,比如根证书和中间证书,但不包括服务端证书

通过上一步安装证书,已经把证书拷贝到目标的目录,接下来就是在web服务中使用证书即可。

以nginx为例:

...
server {
listen 443 ssl;
ssl_certificate /etc/nginx/cert_file/fullchain.pem;
ssl_certificate_key /etc/nginx/cert_file/key.pem;
# ...

}

开启acme.sh自动升级

acme.sh  --upgrade  --auto-upgrade

设置证书自动更新

crontab -e
#填入自动执行的命令:每月1日凌晨1点重新安装证书
0 1 1 * * acme.sh --install-cert -d 域名 --key-file 密钥存放路径和名字 --fullchain-file 证书存放路径就和名字