起因

自阿里云宣布不再提供一年期的免费证书后,腾讯云在今年4月25日起也不再提供一年期的免费证书。我的域名主要在 dnspod,所以也因此会受到影响。

好在服务器面板 1panel 提供了自动申请证书服务,虽然同样只有三个月的有效期,但是优点有二:

一是证书为通配符证书,无需逐个申请;

二是面板支持自动续签,大概可以算得上是一劳永逸。

开始折腾

其实整个过程也不算折腾,甚至不用文档,按照流程摸索着来,一次就能申请成功。

创建 Acme 账户

按照如下顺序点击“Acme账户”,输入你自己的邮箱。账号类型和密钥算法我保持了默认,这可能不是最优解。

输入邮箱创建Acme账户

提示:虽然不会验证邮箱,但是建议填写自己真实的邮箱地址。

创建腾讯云子账户

由于 dnspod 的 API 即将废弃,所以域名在 dnspod 的可以选择腾讯云。

在获取Secret IDSecret Key之前,我强烈建议创建一个腾讯云子账户,并且设定用户组和权限,尽可能避免不必要的风险。

创建子账户可以参考腾讯云官方的文档,这里我分享一下的配置的策略。

点击这里进入到腾讯云的访问管理控制台,点击“新建自定义策略”,选择“按策略语法创建”,选择“空白模板”,填写以下内容,名称自拟:

{
"statement": [
{
"action": [
"dnspod:DescribeDomainList",
"dnspod:DescribeRecordList",
"dnspod:ModifyRecord",
"dnspod:CreateRecord",
"dnspod:DeleteRecord"
],
"effect": "allow",
"resource": [
"*"
]
}
],
"version": "2.0"
}

当然,如果你不喜欢json,也可以选择“按产品功能或项目权限创建”,只不过这样稍微繁杂一点。

创建完成之后,还需要把它关联到用户/组/角色。

最后,点击左侧的“用户”,选择“用户列表”,点击自己创建的子账户,点击 API 密钥,新建一个密钥即可。

注意SecretKey仅支持在创建时查看,请及时保存SecretKey

新建API密钥

创建 DNS 账户

回到 1panel 中,点击“DNS账户”,再创建账户,输入刚才获取的Secret IDSecret Key就可以了。

创建DNS账户

申请证书

点击“申请证书”,参考图片填写:

申请ssl证书

如果你要申请的证书是特定的网站,可以选择“从网站中获取”,不过我觉得通配符证书更方便,所以选择了前者。为了能一定程度上“一劳永逸”,记得勾选上“自动续签”。

关于“推送证书到本地目录”我没勾选,因为我的服务器上不止一个网站目录,所以我是申请成功之后在“网站”的“HTTPS”里,手动选择了申请的通配符证书。

按照上述图片填写完成后,保存并点击申请,然后就可以看到申请日志:

日志显示证书申请成功

最后

前面也说过,这个过程其实并不算折腾。但是由于 1panel 是明文保存的Secret IDSecret Key,在权限策略和安全性问题上我纠结了很久,最终决定只赋予最少必要权限。

此外,由于我使用的 CDN 支持自动续签,所以我无需把服务器申请的证书推送到 CDN 那边,也给我节省了一些时间。

当然,如果对于上述的权限配置之类的有不同看法,欢迎赐教。