amtoaer

晓风残月

叹息似的渺茫,你仍要保存着那真!
github
x
telegram
steam
nintendo switch
email

免费获取Let's Encrypt泛域名证书

去年在GoDaddy买的jeasonlau.xyz域名即将到期,然而最近囊中羞涩续费不起了,于是考虑将网站业务迁移到allwens.work域名下。

目前在jeasonlau.xyz域名下的服务主要有我的马原毛概刷题工具、用于订阅RSSRSSHub和个人使用的Cloudreve网盘,迁移的话我打算将其挂在不同的子域名下,所以打算看看能不能免费申请一张泛域名证书,结果还真找到了教程。

按着教程走了一遍,整个流程不过十分钟,非常方便,本文主要记录一下申请过程。😆

安装acme.sh#

Let's Encrypt官方提供了一系列的申请方法文档,但流程比较复杂。我们使用第三方工具acme.sh来简化申请流程。

首先安装acme.sh

curl  https://get.acme.sh | sh

该脚本进行的操作有:

  • acme.sh安装到~/.acme.sh/
  • alias acme.sh = ~/.acme.sh/acme.sh,达到类似安装到环境变量中的效果;
  • 自动创建cronjob脚本,每天自动检测证书,如果快过期则自动更新。

使用DNS-API验证获取证书#

参考acme.sh 文档可以发现,我们可以用很多种方式进行域名验证来得到证书。因为我的服务器未备案,所以web的那几种方式用起来都不是很方便,最终我选用了DNS-API来进行验证。

DNS验证指的是通过在你域名的 DNS 解析中加入指定的txt记录来验证你对域名的所有权,而DNS-API则是通过使用 DNS 提供商的 API 自动进行txt记录的增加和删除,达到自动验证的效果。

对于不同的提供商,需要不同的API key,可以点击此处查看详细教程,此处以阿里云为例。

  1. 首先在阿里云账号的 API 管理中获取到AccessKey IDAccessKey Secret

  2. 在服务器中执行

    export Ali_Key=AccessKey ID
    export Ali_Secret=AccessKey Secret
    
  3. 运行以下命令获取证书(以allwens.work为例)

    acme.sh --issue --dns dns_ali -d allwens.work -d *.allwens.work
    

    完成后,证书文件将会存放在~/.acme.sh/allwens.work中,后续acme.sh将会自动更新该文件夹内的证书。

    我目前尚不清楚更新时是否需要 API,因此为了保险又将第二步创建环境变量的语句写到了~/.zshrc中。

在 web 服务器中使用证书#

因为嫌原有的路径名过长,所以我首先在/etc下新建了cert文件夹,做了一个软链接:

该步骤可以跳过,我只是为了让路径短一点 🤣

sudo mkdir /etc/cert
cd /etc/cert
ln -s ~/.acme.sh/allwens.work/allwens.work.cer ./
ln -s ~/.acme.sh/allwens.work/allwens.work.key ./

接着打开 web 服务器的配置文件(以nginx为例),找到需要使用证书的Server块:

# Cloudreve
server {
        server_name drive.allwens.work;
        location / {
                proxy_pass http://localhost:5212;
        }
        client_max_body_size 30g;
        error_page 497 =301 https://$http_host$request_uri;
        listen 10000;
        # 加入如下内容
        ssl on;
        ssl_certificate /etc/cert/allwens.work.cer;
        ssl_certificate_key /etc/cert/allwens.work.key;

接着让nginx重新加载配置文件即可:

nginx -s reload
加载中...
此文章数据所有权由区块链加密技术和智能合约保障仅归创作者所有。