Certificate(SSL 证书)
| Name | Type | Relation With | Description |
|---|---|---|---|
| privateKey | Text | 私钥内容 | |
| content | Text | 证书体内容 | |
| name | Text(short text) | 证书名称(可以为空) | |
| user | Relation | User | |
| startTime | DateTime | 有效期起始时间 | |
| endTime | DateTime | 有效期结束时间 | |
| commonName | Text(short text) | 通用名称 | |
| dnsNames | Text | 其它DNS名称 | |
| ca | Text | 颁发机构 | |
| cdnDomains | Relation(一对多) | CDN Domain |
添加证书
用户添加证书时,privateKey 和 content 字段是必填项,startTime、endTime、commonName、'dnsNames'、 'ca' 字段由证书解析而来,不可由用户填写。
在添加证书页面,需要给用户列出匹配证书的 commonName 或 dnsName 的所有域名,以便用户将证书和域名关联,然后调用上游接口设置并启用证书。
为证书关联域名时,有两种情况:一是域名未关联任何证书,这时直接设置即可;二是域名已有关联的证书,这时就是调用上游接口更新证书了,TODO:此时会有旧证书的处理问题,暂时先忽略。
TODO:由于上游有自己的证书管理系统,并且为每个证书分配了ID,这样,上游就能通过证书ID与域名关联了。但是,在我们的系统中接入的是多个厂商,这就面临一个情况:我们系统里管理的证书要与每个上游的证书管理对应起来,这会增加我们系统的复杂度,因此,我们做如下简化处理:我们忽略上游对证书的管理(也就是上游为上传的证书所分配的 ID),将我们自己的证书管理作为唯一来源,每次为域名设置证书时都让上游作为新添加证书,即便证书已经在上游存在了。
成功调用上游接口添加或更新证书之后,需要消息队列根据上游返回的 CertificateId 查询一下证书的详细信息并回填到域名的 config.Certificate 字段,后续前端页面展示域名所关联的证书的详细信息时需从域名的 config.Certificate 字段获取。
更新证书
不允许修改已经添加的证书,只能上传新证书。然后将新证书应用到域名上,或者在域名配置页面选择证书重新配置。
删除证书
删除证书前,需要让用户解绑与待删除证书关联的所有域名。没有关联域名的证书可以由用户操作直接从数据库中删除。
对于已经失效且没有关联域名的证书,在页面上要标记该证书已过期且XX天之后将自动删除。由后台巡检程序定期检查并删除。