申请泛域名证书
Let's Encrypt
已经支持泛域名证书了,由于 acme.sh
实现了 acme 协议,可以从 Let's Encrypt
生成免费的证书,并且支持自动更新,所以这里使用它来快速实践一下。
安装 acme.sh
首先安装 acme.sh
,可以使用官方提供的自动安装脚本,默认会把 acme.sh
安装到用户目录下,同时创建 cron 每日任务去检查是否有证书需要更新。
1 | $ curl https://get.acme.sh | sh |
获取域名 API
目前泛域名证书仅支持 DNS 验证,acme.sh
通过 DNS 提供商的 API 自动完成域名验证、添加删除记录等操作,因此我们需要先设置 DNS API。我使用的是腾讯云提供的云解析,腾讯云使用的是 DNSPOD 的服务,这两家账号是通用的,登录后如果没有 API Token 则创建一个。
生成证书
拿到 Token 后,将对应的 id 和 token 设置为环境变量。
1 | $ export DP_Id="你的 Id" |
接下来使用命令申请证书。dns
参数的值与使用的 DNS 脚本有关,具体可以参见 acme.sh
的说明文档
1 | $ ./acme.sh --issue --dns dns_dp -d nekolr.com -d *.nekolr.com --keylength ec-256 |
证书有两种,一种是 ECC 证书(内置公钥是 ECDSA 公钥),一种是 RSA 证书(内置 RSA 公钥)。简单来说,同等长度 ECC 比 RSA 更安全,在具有同样安全性的情况下,ECC 的密钥长度比 RSA 短得多(加密解密会更快)。但是 ECC 的兼容性会差一些,不支持 Android 4.x 以下的版本,也不支持 Windows XP。
添加证书
生成证书以后,使用命令将证书拷贝一份留作备用(尽量避免手动拷贝,容易出错)。由于单纯使用 reload 参数,nginx 服务器只会重新加载配置文件,可能会导致新证书不生效,因此应该在证书安装完成后选择重启 nginx 服务器。
1 | $ ./acme.sh --installcert -d nekolr.com -d *.nekolr.com \ |
接下来修改 nginx 的配置文件,添加证书。
1 | # SSL 证书 |