证书部署

CertSvc 的总体逻辑分为两部分,公有平台负责管理配置,定期检索签发证书,而证书部署则是依赖于独立的CertDeployTool 应用,该应用采用 .NET 7.0 技术开发,所以天然具备跨平台的能力,目前我们编译发布了常用的三个包。该程序部署在服务之后,启动时会执行一次部署任务,然后在每天的凌晨3点会定时执行部署任务,当证书快过期时,平台签发新的证书之后,该服务在检测到有新证书时会重新部署。免去了证书过期之后人工维护的工作。

CertDeployTool_win-x64.zip

CertDeployTool_linux-x64.zip

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 数组,支持多个证书,对象字段说明如下:

  • Domain:控制台维护的证书域名
  • EndTime:默认保持 null 即可
  • Path:用于部署存放证书的路径
  • Format:证书的格式,支持 pfx 与 pem 两种,pfx常用于 iis服务器,pem 可用于 nginx apache 等服务器。
  • ReloadCommand:用于证书部署时执行的终端命令

Windows 平台安装方法:

假设应用所在目录为 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

Linux 平台安装方法:

假设应用所在目录为 /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