手动生成 SSL 证书添加到又拍云

本站一直用又拍云进行 CDN 加速,因为又拍云有一个又拍云联盟的活动,博主只需要在网站放一个 LOGO 即可获取一定的免费额度。唯一的问题就是需要每年重新申请一下这个又拍云的活动。

又拍云还提供 SSL 证书申请与管理,可以一站式管理 HTTPS 的问题。之前一直用他家的 TrustAsia DV SSL 单域名证书,还可以自动续签。然而今年到期后开始收费了,只能转向免费的 Let's Encrypt. 但不知道又拍云还是 Let's Encrypt 这里抽什么风,重复申请好几次都还是失败,提工单来来回回咨询了很多次都没有结果,最后跟我说的厂商 Let's Encrypt 给我限制了。。。

没办法,而且我的旧证书马上就要过期了,只能自己动手,丰衣足食。又拍云支持上传自己的证书,干脆我自己去 Let's Encrypt 申请一个证书上传上去。

我用的是 acme.sh 进行的申请,使用起来也很简单。

  1. 安装 acme.sh

    1. curl https://get.acme.sh | sh -s email=my@example.com
    2. 安装后默认会搞一个每天 0 点运行的 crontab 自动更新过期证书
  2. 我这里用的是 dns 验证域名所有权的方式.

    1. 手动验证(不能够自动更新,每次都需要手动更新)
      1. 生成 dns 验证相关的 dns 配置,生成后需要添加 dns 解析。
        1. acme.sh --issue --dns -d scottyeung.top --yes-I-know-dns-manual-mode-enough-go-ahead-please
      2. 添加 dns 解析后,生成证书。
        1. acme.sh --renew -d scottyeung.top --yes-I-know-dns-manual-mode-enough-go-ahead-please
    2. 自动验证。通过申请 DNS 解析商的 API Key,访问 DNS 解析商来进行验证
      1. 申请解析商相应的 API key,并通过环境变量进行设置。不同的解析商使用不同的变量命名,可以参考 acme.sh/wiki。下面以 DNSPod 为例
        1. export DP_Id="<id>"
          export DP_Key="<key>"
          
      2. 生成证书
        1. ./acme.sh --issue --dns dns_dp -d scottyeung.top
  3. 最终生成的证书和私钥放在 ~/.acme.sh/scottyeung.top_ecc

    1. 证书:fullchain.cer
    2. 私钥:scottyeung.top.key

生成之后把证书和私钥上传到又拍云就可以。唯一的缺点是有效期比较短,只有 90 天,需要 60 天后更新,到时再看看能不能自动化更新。 (三个月已经到了,在更新的过程中意识到就算可以本地更新,还是需要手动上传到 又拍云 去,才能确保又拍云上面的证书不过期)。