CentOS7自动安装通配符域名SSH证书

一、概述

Let's Encrypt

是一个证书颁发机构(CA)。要从 Let's Encrypt 获取证书,就必须证明对域名的实际控制权。

您可以在您的 Web 主机上运行使用 ACME 协议的软件来获取 Let’s Encrypt 证书。

Certbot

是一个ACME客户端,用于签发SSH证书。


二、安装 snapd

snap是一种全新的软件包管理方式,它类似一个容器拥有一个应用程序所有的文件和库,各个应用程序之间完全独立。所以使用snap包的好处就是它解决了应用程序之间的依赖问题,使应用程序之间更容易管理。但是由此带来的问题就是它占用更多的磁盘空间。

1> 安装EPEL源:https://sidoc.cn/doc/583.html

2> 安装snapd

## 安装snapd
sudo yum install snapd
## 启用 snap 通信套接字的systemd单元
sudo systemctl enable --now snapd.socket
## 在/var/lib/snapd/snap和snap之间创建符号链接/snap
sudo ln -s /var/lib/snapd/snap /snap
## 重启系统
reboot

3>. 更新snapd为最新版

sudo snap install core
sudo snap refresh core


三、安装Certbot

安装certbot后,certbot会扫描所有nginx配置文件,从中找出所有域名;并让你选择要为哪些域名安装SSL证书。需要注意的是:选择安装SSL证书的域名,其顶级域名必须解析到当前安装certbot的服务器;

1>. 删除已有的Certbot,确保系统中没Certbot残留

## 0.1> 删除通过yum安装的certbot
sudo yum remove certbot

## 0.2> 删除通过snap安装的certbot
sudo sed -i '/certbot-auto/d' /etc/crontab;
sudo rm /usr/local/bin/certbot-auto;
sudo rm -rf /opt/eff.org;

2>. 安装Certbot

## 安装Certbot
sudo snap install --classic certbot;
## 建立软链接(最新版中,此步可省略)
## sudo ln -s /snap/bin/certbot /usr/bin/certbot;
## 确认插件包含级别
sudo snap set certbot trust-plugin-with-root=ok


四、申请证书

申请SSL证书时需要验证域名所属权,Let's Encrypt虽提供多种验证方式,但申请通配符证书时,仅支持DNS验证方式。

为了实现通配符证书,Let’s Encrypt 对 ACME 协议的实现进行了升级,只有 v2 协议才能支持通配符证书,如下命令使用 --server 指定 API。

1>. 申请证书,修改其中的“*.example.com”为你的域名

certbot certonly --manual -d *.example.com --preferred-challenges dns --server https://acme-v02.api.letsencrypt.org/directory

yes | certbot certonly --manual -d *.example.com --agree-tos -m 512113110@qq.com --preferred-challenges dns --server https://acme-v02.api.letsencrypt.org/directory

yes | certbot certonly --manual -d *.example.com -preferred-challenges dns --server https://acme-v02.api.letsencrypt.org/directory

注意:虽然Certbot有内置定时器,能够实现SSL证书自动更新;但以上命令中指定了“--manual”选项,且未提供身份验证脚本,所以无法实现自动续订;

身份验证脚本创建过程繁琐,所以此处没有创建。

更新此证书唯一方式,就是在证书到期日期之前重复如上命令。

2>. 申请过程中会随机生成一个token值,你需要将其添加到 DNS 的 TXT 记录上:

申请完成后,会输出SSL证书路径,其中包含以下文件:

cert.pem:证书
chain.pem:证书链
fullchain.pem:完整的证书链,就是 cert.pem 和 chain.pem 的整合
privkey.pem:私钥


四、自动续期证书

自动续期其实就是将申请证书的命令重新执行一次,通常情况下执行申请证书命令时,若已存在未过期证书,则会提示是否要申请,以覆盖现有证书;

但命令中如何加了“--force-renewal”选项,即强制更新;则不会再询问。

Cerbot命令行中,有一部分选项是专门进行自动化的,即直接避免了所有执行过程中的询问选项,一次执行完成。


https://blog.ibaoger.com/2017/03/07/certbot-command-line-tool-usage-document/

--force-renewal, --renew-by-default
                        如果请求的证书已经存在,无论是否快要到期,更新该证书。
                        (通常使用 --keep-until-expiring 选项)。
                        该选项默认包含了 --expand 选项的功能。(默认: False)

https://blog.csdn.net/oHaiKuoTianKong1682/article/details/116714880


五、Cerbot常用命令

删除某个已续订SSL证书的域名

certbot delete --cert-name example.vip


举报

© 著作权归作者所有


1