Skip to content
Last updated: 2024-06-08
<

Intro

2023年底,一众服务器提供商纷纷发出这样的通知:

接 Digicert 厂商通知,2023年11月15日起,Digicert DV(Basic) 单域名证书有效期将从 12 个月缩短至 3 个月。

类似本站这样的非商业技术博客、个人网站,基本上都是使用免费证书。也曾打开过收费证书的价格列表页面,吓得马上就关闭了。我不配使用这么昂贵的证书。🙃

现在免费证书有效期缩短,就很难受,白嫖难度又增加了。因为这意味着,每 3 个月就申请、更换一次服务器证书。

唯一的好处是,作为非专业运维人员,更换证书的操作也变得熟练起来了。这里把我的笔记也整理一下备忘。

证书申请

各大云服务器平台,一般都有这样的资源。

TIP

以阿里云为例:登录控制台,找到 数字证书管理服务/SSL 证书,创建证书
以华为云为例:登录控制台,找到 云证书管理服务/SSL证书管理,创建测试证书

如华为云:

每个华为云账号可以免费申请20张测试证书

按提示填写一些信息,包括联系人信息、域名等。

然后系统会生成一段验证码,复制好,登录域名提供商的后台(DNS验证),添加一个 _dnsauth TXT记录,刷新解析,稍等一会就可以回证书申请页面,手动点一下验证。

解析记录通过后,提交申请就可以了。一般都很快就会签发证书。

证书部署

证书签发成功后,下一步需要部署到服务器应用上。

如果是相同云服务提供端,可以使用平台提供的付费“自动部署”服务。可是我证书都白嫖了,会花这冤枉钱么?🙃

下面的部署过程,以我的一个 eggjs 服务为例。

首先需要修改 eggjs 服务的启动脚本,指定 https 使用的证书文件:

json
// ~/package.json
{
  "scripts": {
    "start": "egg-scripts start --daemon --title=xxx --port=443 --https.key='cert.key' --https.cert='cert.pem'",
  }
}

把证书下载下来,解压准备好,会发现有针对多种不同服务类型的证书……咦,等等,为什么没有 nodejs 的?!🙃

逐个打开看了一下,发现 Nginx 的证书最接近,比较了一下里面(根本看不懂)的密钥内容,发现也是差不多。

赶紧恶补一下证书的知识:

Base64 (ASCII) 编码的文本格式。这种证书文件是可以通过文本编辑器打开,甚至进行编辑,常见有 PEM 证书格式,扩展名包括 PEM、CRT 和 KEY。

只是扩展名不同,内容是一样的,那就没问题了。把证书文件名,改成和上面启动脚本中指定的一致。

然后,将证书文件上传到服务的根目录:

bash
scp ./cert.* root@ceil.top:/root/eggjs/

重启服务,发现浏览器已能正确识别为有效证书。

大功告成!

Released under the MIT License.