之前有介绍过 1Panel 面板管理服务器。其中,有介绍到 1Panel 面板进行 SSL 证书自动续期的操作,非常的方便。但很多时候我们的证书并不是直接配置在源站,而是配置在 CDN 上,例如阿里云的 DCDN,百度云 CDN 等。
常规的操作是,1Panel 面板的 SSL 证书自动续期后,将证书的公钥和私钥手动拷贝到 CDN 管理平台上,进行替换。虽然操作起来也的比较快的,但我还是想通过现有的工具完成自动化运维。
这里要提到阿里云官方的一个命令行工具 CLI,它能够调用阿里云的 OpenAPI,实现访问阿里云官方服务的目的。
在 Linux 服务器上下载阿里云 CLI,并解压放置在 /usr/local/bin
目录。如果使用了我前文介绍的阿里云镜像安装 1Panel 的话,其自带了这个 CLI 命令。
可以使用 aliyun
这个命令来测试命令是否存在。
阿里云 CLI 需要提供阿里云的 Access Key Id 和 Access Secret,使用 aliyun configure --profile default
进行配置,其中还需要提供服务器所在的区域 ID,例如 cn-hangzhou
。
配置完成后使用 aliyun cdn DescribeDomainCertificateInfo --region cn-hangzhou --DomainName 'xxx.example.com'
命令来测试是否配置成功,命令需要替换为自己服务器所在的区域和阿里云的域名。
在 1Panel 面板的证书导航下,勾选 推送证书到本地目录 和 申请证书后执行脚本 并选择一个创建好的空目录,例如 /root/certs
。
接着,需要在上述目录里编写一个自动推送证书的脚本 upload-cdn-ssl.sh
,脚本的内容如下,其中可以设置多个域名(如果证书是通配符证书的话)。
#!/bin/bash
# 读取 fullchain.pem 文件内容
SSLPub=$(cat fullchain.pem)
# 读取 privkey.pem 文件内容
SSLPri=$(cat privkey.pem)
# 使用读取到的内容执行 aliyun 命令
aliyun cdn SetCdnDomainSSLCertificate --region cn-hangzhou --DomainName 'xxx1.example.com' --SSLProtocol on --CertType upload --SSLPub="$SSLPub" --SSLPri="$SSLPri"
aliyun cdn SetCdnDomainSSLCertificate --region cn-hangzhou --DomainName 'xxx2.example.com' --SSLProtocol on --CertType upload --SSLPub="$SSLPub" --SSLPri="$SSLPri"
所有的配置完成后,可以点击证书的申请,实际测试一下,这样等自动续期时就完成了无感知替换。
如果一个源站下挂了多个网站,并都使用了阿里云 CDN,此时需要在回源项中配置 SNI,可以是自己源站的域名。