【概述】
① 使用 certbot 签发免费的 SSL 通配符证书;
② 证书有效期为三个月,非通配符证书到期后会自动重签,但是通配符证书由于需要设置 DNS TXT 记录,故需要借助各云服务商的CLI工具自动设置(本文以阿里云CLI为例);
③ 编写用于转换证书格式的脚本(本文主要介绍用于 .net 程序的证书格式 .pfx);
④ 编写用于将证书复制到远程服务器对应目录的脚本(此脚本需要用到 expect 工具自动补全 ssh 密码,存在一定风险,介意的朋友也可以考虑更安全的方式,也欢迎在评论区分享出来!);
⑤ 往 crontab 中添定时任务,定时执行证书刷新命令以及上述两个脚本。
在开始之前,先来说说 certbot 签发证书的大致流程
① 执行 certbot 命令,然后根据提示输入必要的信息;
② certbot 向 SSL 通配符证书自动签发平台 Let’s Encrypt 发送签发请求;
③ 输出 已成功签发的证书文件。
0. 准备
① 进行通配符证书签发的服务器需要有公网IP;
② 在服务器上安装 certbot 工具,本文以 Linux 平台为例,大家可以结合自身需求以及系统版本参考 certbot官网 给出的教程进行安装;
ℹ️ 需要特别说明的是,Oracle Linux Server 参考 CentOS 的教程借助 snapd 进行安装的时候会提示 Segmentation fault
这一类错误信息,如果你的系统恰巧也是 Oracle Linux Server,可参考以下命令进行安装:
|
|
③ 检查服务器上的443端口是否被占用,如被占用,则请先关闭对应的服务进程,否则后续执行 certbot 可能会报错。
1. 签发通配符证书
使用 certbot 签发证书很简单,只需要一条命令即可。
|
|
参数说明:
- certonly 表示插件,Certbot 有很多插件。不同的插件都可以申请证书,用户可以根据需要自行选择;
- -d 为哪些主机申请证书。如果是通配符,输入 *.xxx.com (根据实际情况替换为你自己的域名);
- –preferred-challenges dns-01,使用 DNS 方式校验域名所有权;(通配符证书只能用 dns-01)
- –server,Let’s Encrypt ACME v2 版本使用的服务器不同于 v1 版本,需要显示指定。
执行完上述命令后,会提示 输入邮箱、是否同意相关协议、是否愿意将邮箱地址共享给基金会、对IP被访问是否OK 等输入确认项,挨个输入确认即可,当执行到最后一步的时候先不要按回车:
|
|
将提示中的 DNS TXT 记录添加到域名的 DNS 解析中。(示例: 记录名:_acme-challenge;记录值:fxTlRPDBTFGUXCp2qDrEZRfasdKoPGuShUVYk2jIf-9)
回车确认是否成功,若成功,则输出如下内容:
|
|
证书和密钥保存在目录 /etc/letsencrypt/live/yourdomain.com/
下方。
以上步骤即完成了通配符证书的签发。
2. 配置用于自动创建 DNS TXT 记录的脚本
Github上有很多写的特别好的教程,此处放一个传送门。
大致步骤如下:(详细步骤还请参考原文,如有不懂可留言)
① 在阿里云控制台中创建一个 Access Key(记得记下来);
② 安装 aliyun cli 工具,执行 aliyun configure
配置 Access Key;
③ 安装 certbot-dns-aliyun 插件(一个用于 certbot 钩子的脚本);
④ 执行 certbot renew 命令对证书进行延期操作时,加上钩子参数 --manual-auth-hook 和 --manual-cleanup-hook 指定需要运行的命令(即第③步中安装的插件)
3. 编写用于转换证书格式的脚本(可无)
创建存放脚本的目录(根据个人习惯自定义)
|
|
创建脚本 $ nano transform-to-pfx.sh
,内容如下:
|
|
给脚本授予可执行权限:
|
|
4. 编写用于拷贝证书文件到对应服务器的脚本(可无)
创建脚本 $ nano copy-result-to-private-server.sh
,内容如下:
|
|
给脚本授予可执行权限:
|
|
5. 配置 crontab
每周周日0点执行一次
|
|