CertSvc 的总体逻辑分为两部分,公有平台负责管理配置,定期检索签发证书,而证书部署则是依赖于独立的CertDeployTool 应用,该应用采用 .NET 7.0 技术开发,所以天然具备跨平台的能力,目前我们编译发布了常用的三个包。该程序部署在服务之后,启动时会执行一次部署任务,然后在每天的凌晨3点会定时执行部署任务,当证书快过期时,平台签发新的证书之后,该服务在检测到有新证书时会重新部署。免去了证书过期之后人工维护的工作。
CertDeployTool_linux-arm64.zip
该程序主要包含两个配置文件 appsettings.json 用于配置账户信息
{
"Logging": {
"LogLevel": {
"Default": "Information",
"Microsoft.Hosting.Lifetime": "Information",
"Microsoft.EntityFrameworkCore": "Warning",
"System.Net.Http.HttpClient": "Warning"
}
},
"Account": {
"Name": "",
"PassWord": ""
}
}
在Account 节点输入在平台注册的账户信息即可,Name 默认为手机号,密码为注册时设定的密码。
certificates.json 用于配置证书部署信息
[
{
"Domain": "*.aaa.net",
"EndTime": null,
"Path": "d:/Software/IISSSL/",
"Format": "pfx",
"ReloadCommand": null
},
{
"Domain": "*.xxx.com",
"EndTime": null,
"Path": "/etc/nginx/ssl/",
"Format": "pem",
"ReloadCommand": "/etc/init.d/nginx reload"
}
]
该配置文件的内容是一个 JSON 数组,支持多个证书,对象字段说明如下:
假设应用所在目录为 c:\CertDeployTool\
安装
sc.exe create CertDeployTool binpath= 'c:\CertDeployTool\CertDeployTool.exe --cd="true"' start= auto
启动
net start CertDeployTool
停止
net stop CertDeployTool
卸载
sc.exe delete CertDeployTool
假设应用所在目录为 /var/appdata/CertDeployTool/
设置应用目录权限为777
sudo chmod 777 -R /var/appdata/CertDeployTool
创建服务定义文件:
sudo vim /etc/systemd/system/CertDeployTool.service
[Unit]
Description=CertDeployTool
[Service]
WorkingDirectory=/var/appdata/CertDeployTool
ExecStart=/var/appdata/CertDeployTool/CertDeployTool
Restart=always
RestartSec=60
KillSignal=SIGINT
SyslogIdentifier=CertDeployTool
User=root
[Install]
WantedBy=multi-user.target
保存该文件并启用该服务。
sudo systemctl enable CertDeployTool.service
启用该服务,并确认它正在运行。
sudo systemctl start CertDeployTool.service
sudo systemctl status CertDeployTool.service