整一个Let's Encrypt证书

Let's Encrypt 证书免费,对于我这种穷得很的学生党来说无疑是最佳的选择,虽然每次只有 90 天的有效期,但可以通过脚本定期更新,配好之后一劳永逸,何不为之?

安装 acme.sh

一行命令,简单的很:

# 使用curl
curl https://get.acme.sh | sh

# 或者wget
wget -O - https://get.acme.sh | sh

然后重新载入一下bashrc:

source ~/.bashrc

现在你就能使用 acme.sh 获取命令帮助。

若不能使用,可手动添加:

echo '. "/root/.acme.sh/acme.sh.env"' >> ~/.bashrc

申请 SSL 证书

基本命令如下:

acme.sh --issue -d www.example.com -w /data/web/example/

解释:为域名 www.example.com 申请RSA证书,使用文件验证,站点目录为 /data/web/example/

欲使用ECC证书,可在尾部添加 --keylength ec-256,例如:

acme.sh --issue -d www.example.com -w /data/web/example/ --keylength ec-256

同时也可以申请多个域名&泛解析:

acme.sh --issue -d example.com -d *.example.com -d example2.com -w /data/web/example/

使用 DNS API 验证

如果不喜欢使用文件的验证方式,可以使用域名解析商的API,这里以dnspod为例:

  1. 到dnspod账号中心获取密钥
  2. 配置环境变量:
    export DP_Id="this is your id"
    export DP_Key="this is your token"

    注意替换自己的 DNSPod API Key 和 ID

  3. 执行命令:
    acme.sh --dns dns_dp --issue -d www.example.com

安装证书

证书默认保存在 ~/.acme.sh/,建议不要直接使用此目录下的文件。

正确的使用方法是使用 --installcert 命令,并指定目标位置,然后证书文件会被 copy 到相应的位置,例如:

acme.sh --installcert -d example.com \
--cert-file /data/cert/example.com/chain.pem  \
--key-file /data/cert/example.com/privkey.pem  \
--fullchain-file /data/cert/example.com/fullchain.pem \
--reloadcmd "service nginx restart"

更新证书

这里指定的所有参数都会被自动记录下来,以便在60天后被自动更新调用,你无需任何操作。