Files
certificate-management/ca-server/backend-design.md
wangjianhong 5e4e272b3a init
2025-07-23 17:30:33 +08:00

2.4 KiB

小型CA系统后端设计文档

1. 技术架构

1.1 技术选型

  • 编程语言: Go 1.18+
  • Web框架: Gin
  • 数据库: MongoDB 5.0+
  • 证书工具: OpenSSL 3.0
  • 认证方式: JWT

1.2 系统架构图

[前端] → [API Gateway] → [证书服务] → [OpenSSL]
                   ↓
              [黑名单服务] → [MongoDB]

2. API接口设计

2.1 证书签发接口

  • 路径: /api/v1/certificates
  • 方法: POST
  • 请求参数:
    • domain (string): 域名
    • organization (string): 组织名称
    • validity (int): 有效期(天)
  • 响应:
    • cert (string): 证书内容
    • key (string): 私钥内容
    • ca (string): CA证书

2.2 黑名单查询接口

  • 路径: /api/v1/blacklist
  • 方法: GET
  • 响应:
    • items ([]BlacklistItem): 黑名单条目列表

2.3 证书撤销接口

  • 路径: /api/v1/certificates/{serial}
  • 方法: DELETE
  • 权限: 管理员

3. 数据库模型

3.1 证书模型

type Certificate struct {
  SerialNumber string    `bson:"serial"`
  Domain       string    `bson:"domain"`
  Organization string    `bson:"org"`
  IssuedAt     time.Time `bson:"issued_at"`
  ExpiresAt    time.Time `bson:"expires_at"`
  CertContent  string    `bson:"cert"`
  KeyContent   string    `bson:"key"`
}

3.2 黑名单模型

type BlacklistItem struct {
  ID         primitive.ObjectID `bson:"_id"`
  Type       string             `bson:"type"` // domain/ip
  Value      string             `bson:"value"`
  Reason     string             `bson:"reason"`
  RevokedAt  time.Time          `bson:"revoked_at"`
  RevokedBy  string             `bson:"revoked_by"`
}

4. 核心流程

4.1 证书签发流程

  1. 验证JWT令牌和用户权限
  2. 生成CSR配置文件
  3. 调用OpenSSL生成证书
  4. 将证书信息存入数据库
  5. 返回证书给客户端

4.2 黑名单管理流程

  1. 验证管理员权限
  2. 查询/更新MongoDB
  3. 记录操作日志
  4. 返回操作结果

5. 安全设计

5.1 认证授权

  • 基于JWT的RBAC实现
  • 令牌有效期: 2小时
  • 敏感操作需要二次验证

5.2 通信安全

  • 强制HTTPS
  • 证书签名使用SHA-256
  • 私钥加密存储

6. 性能优化

6.1 缓存策略

  • 黑名单查询结果缓存
  • 证书签发请求限流

6.2 并发控制

  • 使用Go协程处理并发请求
  • 数据库连接池配置