Initial commit of Step Admin panel
This commit is contained in:
287
任务.md
Normal file
287
任务.md
Normal file
@@ -0,0 +1,287 @@
|
||||
# Step Admin 项目骨架说明
|
||||
|
||||
## 项目目标
|
||||
|
||||
这是一个基于 **SvelteKit + SQLite + step CLI** 的轻量证书管理后台,用于管理 `step-ca` 签发的客户端证书。
|
||||
|
||||
适用场景:
|
||||
|
||||
* 管理员登录后台
|
||||
* 创建设备证书
|
||||
* 下载 `crt / key / p12`
|
||||
* 吊销证书
|
||||
* 记录证书元数据与审计日志
|
||||
|
||||
## 技术栈
|
||||
|
||||
* 前后端一体:SvelteKit
|
||||
* 数据库:SQLite
|
||||
* 命令执行:`step` CLI
|
||||
* 运行方式:Node adapter + systemd + Caddy 反代
|
||||
|
||||
## 项目结构
|
||||
|
||||
```text
|
||||
step-admin/
|
||||
├─ package.json
|
||||
├─ svelte.config.js
|
||||
├─ vite.config.ts
|
||||
├─ tsconfig.json
|
||||
├─ .env.example
|
||||
├─ src/
|
||||
│ ├─ app.d.ts
|
||||
│ ├─ app.html
|
||||
│ ├─ hooks.server.ts
|
||||
│ ├─ lib/
|
||||
│ │ ├─ server/
|
||||
│ │ │ ├─ auth.ts
|
||||
│ │ │ ├─ db.ts
|
||||
│ │ │ ├─ schema.ts
|
||||
│ │ │ ├─ step.ts
|
||||
│ │ │ ├─ files.ts
|
||||
│ │ │ └─ audit.ts
|
||||
│ │ └─ types.ts
|
||||
│ └─ routes/
|
||||
│ ├─ +layout.server.ts
|
||||
│ ├─ +layout.svelte
|
||||
│ ├─ login/
|
||||
│ │ ├─ +page.svelte
|
||||
│ │ └─ +server.ts
|
||||
│ ├─ logout/
|
||||
│ │ └─ +server.ts
|
||||
│ ├─ dashboard/
|
||||
│ │ └─ +page.svelte
|
||||
│ ├─ certificates/
|
||||
│ │ ├─ +page.server.ts
|
||||
│ │ ├─ +page.svelte
|
||||
│ │ └─ create/
|
||||
│ │ ├─ +page.svelte
|
||||
│ │ └─ +server.ts
|
||||
│ └─ api/
|
||||
│ └─ certificates/
|
||||
│ ├─ [id]/
|
||||
│ │ ├─ download/
|
||||
│ │ │ └─ +server.ts
|
||||
│ │ └─ revoke/
|
||||
│ │ └─ +server.ts
|
||||
├─ scripts/
|
||||
│ └─ init-db.ts
|
||||
└─ data/
|
||||
├─ app.db
|
||||
└─ certs/
|
||||
```
|
||||
|
||||
## 核心模块说明
|
||||
|
||||
### 1. 认证模块
|
||||
|
||||
文件:`src/lib/server/auth.ts`
|
||||
|
||||
作用:
|
||||
|
||||
* 管理员账号密码校验
|
||||
* Session Cookie 签发与校验
|
||||
* 登录态注入到 `event.locals`
|
||||
|
||||
建议:
|
||||
|
||||
* 初期可用单管理员密码登录
|
||||
* 后期可接入 OIDC / 企业 SSO
|
||||
|
||||
### 2. 数据库模块
|
||||
|
||||
文件:
|
||||
|
||||
* `src/lib/server/db.ts`
|
||||
* `src/lib/server/schema.ts`
|
||||
* `scripts/init-db.ts`
|
||||
|
||||
主要存储:
|
||||
|
||||
* 证书 subject
|
||||
* 设备名称
|
||||
* 序列号
|
||||
* 创建时间
|
||||
* 过期时间
|
||||
* 吊销时间
|
||||
* 文件路径
|
||||
* 创建者
|
||||
|
||||
### 3. step 命令封装模块
|
||||
|
||||
文件:`src/lib/server/step.ts`
|
||||
|
||||
建议封装的方法:
|
||||
|
||||
* `createCertificate()`
|
||||
* `createP12()`
|
||||
* `revokeCertificate()`
|
||||
* `inspectCertificate()`
|
||||
|
||||
实现方式:
|
||||
|
||||
* 使用 Node.js 的 `child_process.execFile`
|
||||
* 服务端调用 `step` 命令
|
||||
* 严禁在前端执行任何证书命令
|
||||
|
||||
### 4. 文件管理模块
|
||||
|
||||
文件:`src/lib/server/files.ts`
|
||||
|
||||
作用:
|
||||
|
||||
* 统一管理 `crt / key / p12` 文件路径
|
||||
* 控制下载输出
|
||||
* 避免把证书目录直接暴露成静态目录
|
||||
|
||||
### 5. 审计日志模块
|
||||
|
||||
文件:`src/lib/server/audit.ts`
|
||||
|
||||
记录行为:
|
||||
|
||||
* 登录
|
||||
* 创建设备证书
|
||||
* 下载证书
|
||||
* 吊销证书
|
||||
|
||||
## 页面设计
|
||||
|
||||
### 登录页
|
||||
|
||||
* 用户名
|
||||
* 密码
|
||||
* 登录按钮
|
||||
|
||||
### 仪表盘
|
||||
|
||||
* 证书总数
|
||||
* 已吊销数量
|
||||
* 即将过期证书数量
|
||||
|
||||
### 证书列表页
|
||||
|
||||
字段:
|
||||
|
||||
* 设备名
|
||||
* Subject
|
||||
* 序列号
|
||||
* 状态
|
||||
* 创建时间
|
||||
* 过期时间
|
||||
* 操作按钮
|
||||
|
||||
操作:
|
||||
|
||||
* 下载
|
||||
* 查看详情
|
||||
* 吊销
|
||||
|
||||
### 创建设备证书页
|
||||
|
||||
表单建议:
|
||||
|
||||
* 设备名称
|
||||
* Subject
|
||||
* 证书有效期(小时 / 天)
|
||||
* 是否导出 p12
|
||||
* p12 密码
|
||||
|
||||
## 环境变量建议
|
||||
|
||||
```env
|
||||
APP_ADMIN_USERNAME=admin
|
||||
APP_ADMIN_PASSWORD_HASH=
|
||||
APP_SESSION_SECRET=change-me
|
||||
|
||||
STEP_BIN=/usr/bin/step
|
||||
STEP_CONTEXT=internal-ca
|
||||
STEP_ROOT_CA=/var/lib/step-ca/certs/root_ca.crt
|
||||
STEP_OUTPUT_DIR=./data/certs
|
||||
|
||||
DEFAULT_CERT_HOURS=8760
|
||||
```
|
||||
|
||||
## 证书签发流程
|
||||
|
||||
### 管理后台创建证书
|
||||
|
||||
1. 管理员登录后台
|
||||
2. 提交设备名与 subject
|
||||
3. 服务端调用 `step ca certificate`
|
||||
4. 生成 `crt / key`
|
||||
5. 可选调用 `step certificate p12`
|
||||
6. 将元数据写入 SQLite
|
||||
7. 返回下载链接
|
||||
|
||||
### 吊销流程
|
||||
|
||||
1. 管理员在列表页点击吊销
|
||||
2. 服务端根据序列号执行 `step ca revoke`
|
||||
3. 更新数据库状态为 `revoked`
|
||||
4. 写入审计日志
|
||||
|
||||
## 安全建议
|
||||
|
||||
### 必须做到
|
||||
|
||||
* Web 服务不要以 root 运行
|
||||
* `step` 命令只允许在服务端执行
|
||||
* 私钥文件权限严格控制
|
||||
* 下载接口必须鉴权
|
||||
* 证书目录不要公开暴露
|
||||
|
||||
### 建议做到
|
||||
|
||||
* 每台设备单独一张证书
|
||||
* 文件下载带审计日志
|
||||
* 吊销前二次确认
|
||||
* 定期备份 SQLite 与元数据
|
||||
|
||||
## 推荐部署方式
|
||||
|
||||
### 应用层
|
||||
|
||||
* SvelteKit 使用 `adapter-node`
|
||||
* systemd 管理 Node 进程
|
||||
* Caddy 反代应用
|
||||
|
||||
### 数据层
|
||||
|
||||
* SQLite 起步
|
||||
* 后期可迁移 PostgreSQL
|
||||
|
||||
### step 命令层
|
||||
|
||||
* 后端调用系统中的 `step`
|
||||
* `step-ca` 独立运行,不与 Web 服务同权限
|
||||
|
||||
## 第一版最小可用功能
|
||||
|
||||
建议优先做:
|
||||
|
||||
1. 登录
|
||||
2. 证书列表
|
||||
3. 创建设备证书
|
||||
4. 下载 `crt / key / p12`
|
||||
5. 吊销证书
|
||||
|
||||
## 第二版扩展功能
|
||||
|
||||
* 证书到期提醒
|
||||
* 搜索与筛选
|
||||
* 批量导出
|
||||
* 多管理员角色
|
||||
* OIDC 登录
|
||||
* 用户自助申请与审批
|
||||
|
||||
## 总结
|
||||
|
||||
这是一个适合内部使用的轻量 step-ca 管理后台骨架。
|
||||
|
||||
重点原则:
|
||||
|
||||
* Web 后台只做管理和审计
|
||||
* `step-ca` 继续做真正的 CA
|
||||
* 私钥和命令执行放在服务端受控环境
|
||||
* 每台设备独立证书,便于吊销和追踪
|
||||
Reference in New Issue
Block a user