随着互联网安全的重要性日益突出,SSL 证书已成必备。然而,免费 SSL 证书的有效期一般仅为三个月,这就意味着网站管理员需要频繁地更新证书。手动更新不仅耗时费力,还容易因为疏忽而导致证书过期,从而影响网站或应用的正常运行。互联网上常见的证书颁发、服务服务都是基于ACME(Automatic Certificate Management Environment)的,ACME 协议是由 Let’s Encrypt 推出的自动化 SSL 证书管理协议。尽管官方配套脚本(acme.sh)以及 certbot 等并不难用,但对于很多没有接触过代码的新手而言还是有一定门槛的,而国内很多易用的域名证书平台则需要手机号或微信等进行注册才能使用,安全性堪忧。本文就带大家看一款非常精简的证书自动化部署项目,以及主机端的通用脚本使用,彻底解放双手。
证书自动化项目
基于 acme 协议,有很多证书自动化项目,国内项目大多闭源、需要通过手机或微信等方式注册,而 certbot 等则需要一定的 linux 命令行知识。本文给大家介绍一个小众工具 auto-ssl , 旨在通过 GitHub Actions + acme.sh 自动申请/续签泛域名 SSL 证书。这个项目非常简单,没有酷炫的图形化界面,但无需 linux 命令行知识,不失为新手了解、掌握 github 和证书自动化原理的入门之选。auto-ssl 托管于 github,仓库地址如下:
功能 README 自述如下:
- 自动申请 SSL 证书,并通过 git commit 的方式保存证书到 SSL
- 每天检查 SSL 证书是否快过期,如果小于 30 天,自动续期
- 每天的检查报告会同步到 CHECK_LIST.md 文件中
- 证书是泛域名证书
- 同时申请 ECDSA 和 RSA 证书
项目下载与私有仓库建立
对于 auto-ssl 项目,一定不能简单 fork,而应该先下载项目代码后,创建自己的私有仓库并将下载的代码导入/上传。下载、上传代码可以使用 git 工具,也可以直接下载 zip 压缩包解压后上传。这里使用小白用户通用的 zip 下载方式。
将项目下载解压后备用。登录自己的 github 账户,转到『Repositories』后,点击右上方的『New』新建一个私有仓库。
创建仓库过程中,指定仓库名称,将仓库类型修改为『Private』后,点击『Create repository』完成创建。
完成创建后的文件上传本文略过,采用拖拽方式即可。注意 Github Action 的工作流文件需要创建 .github 目录/文件夹后单独上传。这里仅简单提示,添加文件时输入 /direcory/ ,也就是在文件名后添加 “/” 就会自动创建文件夹。
私有仓库配置
完成 auto-ssl 项目的私有化“搬家”后,需要添加 cloudflare account id、cloudflare token、e-mail 三项机密参数,机密(SECRET)名称分别为 CF_ACCOUNT_ID、CF_TOKEN、EMAIL,内容分别为cloudflare账户ID、cloudflare域访问Token、acme 账号邮箱。
CF_ACCOUNT_ID
首先,登录 cloudflare,点开相应的域,拷贝右下方的『账户ID』备用。点击『获取您的API令牌』,以创建访问、编辑该域名称解析内容的访问令牌(CF_TOKEN)。
CF_TOKEN
在用户API令牌界面,点击『创建令牌』。
接下来选择『编辑区域DNS』,点击右侧的『使用模板』。
可以为令牌指定一个名称便于记忆、区分,重要的是选择特定的域(域名),然后点击『继续以显示摘要』。
显示摘要页点击『创建令牌』。
令牌将在摘要页仅显示一次,点击 Copy 备用。如果没有记录,后续可以进行轮换,轮换后会在此页面将新令牌显示一次。
至此,需要获取的必要参数内容就完成了。EMAIL 为 acme 账户所需,可以随意指定一个有效邮箱用于 action 自动注册 acme 账号。
配置SECRETS
在仓库页面,点击上方的『Settings』,左侧导航栏点开『Secrets and variables』,选择『Actions』,在默认的『Secrets』选项卡下,点击『new repository secret』。
逐一添加 CF_ACCOUNT_ID、CF_TOKEN、EMAIL 三项 SECRET 内容,添加次序随意,完成后应显示如下。
最后,需要对 action workflow 进行赋权,github 默认分配给 workflow 的权限为只读,需要修改为读写。『Settings』页面下点开『Action』,选择『General』,找到『Workflow permission』,将权限修改为『Read and write permissions』就完成了所有配置。
最后,不要忘了将 cloudflare_domains_list.txt 文件中的内容修改为自己的域名。可以指定多个域名以分别申请多个通配符证书,每行一个域名。
运行工作流与证书生成
配置完成并且设定了正确的域名后,接下来可以手动触发工作流。点击『Actions』,选择『Cloudflare SSL Certification』,右侧即有『Run workflow』以手动触发工作流。
工作流的工作过程一般不超过一分钟就可完成,工作流状态则有很直观的显示。
工作流成功完成之后,会在 ssl 目录下生成以域名命名的目录,其下包括了 EC 和 RSA 两种类型的证书,均可使用。RSA 证书兼容性相比 EC 略好,毕竟还有很多老旧系统目前和未来都不会升级以支持 EC 证书。生成的证书可以直接下载再上传,也可以通过拷贝粘贴的方式在服务器上导入使用。
补充
不同于 public(公开)仓库的访问,私有仓库的远程访问需要有一定的动手能力。有能力的小伙伴,可以创建 github fine-grained 细粒度个人访问密钥,配置为仅针对特定仓库并赋予对特定仓库的细粒度权限(如内容只读),使用该访问密钥通过 github api 远程下载指定文件。Github fine-grained 个人访问密钥虽然为 beta 版本,但对于日常使用不会有任何问题,指定仓库、指定权限等都是 fine-grained 个人访问密钥才有的功能,有效期最长为 1 年。
当然,偷懒的话也可以使用老 E 自用脚本远程下载、本地自动更新 ssl 证书。
wget https://appscross.com/as-tools/pub%20Tools/shell/cert.sh && bash cert.sh
更多精彩,敬请关注老 E 的博客!
文章评论