You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
|
|
2 weeks ago | |
|---|---|---|
| App.vue | 2 weeks ago | |
| Certificates.vue | 2 weeks ago | |
| Login.vue | 2 weeks ago | |
| MainLayout.vue | 2 weeks ago | |
| README.md | 2 weeks ago | |
| README_TROUBLESHOOTING.md | 2 weeks ago | |
| Register.vue | 2 weeks ago | |
| RegisterCertificate.vue | 2 weeks ago | |
| Requests.vue | 2 weeks ago | |
| SETUP.md | 2 weeks ago | |
| VerifyCertificate.vue | 2 weeks ago | |
| __init__.py | 2 weeks ago | |
| admin.js | 2 weeks ago | |
| admin.py | 2 weeks ago | |
| app.py | 2 weeks ago | |
| auth.js | 2 weeks ago | |
| auth.py | 2 weeks ago | |
| auth_middleware.py | 2 weeks ago | |
| auth_utils.py | 2 weeks ago | |
| cert_utils.py | 2 weeks ago | |
| certificate.js | 2 weeks ago | |
| certificate.py | 2 weeks ago | |
| certificate_1.cer | 2 weeks ago | |
| config.py | 2 weeks ago | |
| database_supplement.sql | 2 weeks ago | |
| fix_token_length.sql | 2 weeks ago | |
| index.html | 2 weeks ago | |
| index.js | 2 weeks ago | |
| init_admin.py | 2 weeks ago | |
| init_database.sql | 2 weeks ago | |
| main.js | 2 weeks ago | |
| models.py | 2 weeks ago | |
| package-lock.json | 2 weeks ago | |
| package.json | 2 weeks ago | |
| requirements.txt | 2 weeks ago | |
| vite.config.js | 2 weeks ago | |
README.md
小型CA系统
这是一个前后端分离的小型CA(证书颁发机构)系统,用于管理数字证书的申请、签发、验证和吊销。
技术栈
后端
- Python 3.8+
- Flask 2.3.3
- Flask-SQLAlchemy(数据库ORM)
- PyMySQL(MySQL驱动)
- cryptography(证书操作)
- PyJWT(Token认证)
- bcrypt(密码加密)
前端
- Vue 3
- Vue Router 4
- Element Plus(UI组件库)
- Axios(HTTP客户端)
- Vite(构建工具)
数据库
- MySQL 5.7+
项目结构
CA_system/
├── backend/ # Flask后端
│ ├── app.py # 应用入口
│ ├── config.py # 配置文件
│ ├── models.py # 数据模型
│ ├── requirements.txt # Python依赖
│ ├── routes/ # 路由模块
│ │ ├── auth.py # 认证路由
│ │ ├── certificate.py # 证书路由
│ │ └── admin.py # 管理员路由
│ ├── utils/ # 工具函数
│ │ ├── auth_utils.py # 认证工具
│ │ └── cert_utils.py # 证书工具
│ └── middleware/ # 中间件
│ └── auth_middleware.py
├── frontend/ # Vue前端
│ ├── src/
│ │ ├── api/ # API接口
│ │ ├── views/ # 页面组件
│ │ ├── layouts/ # 布局组件
│ │ ├── router/ # 路由配置
│ │ └── utils/ # 工具函数
│ ├── package.json
│ └── vite.config.js
├── database_supplement.sql # 数据库补充SQL
└── README.md
功能特性
用户功能
-
用户注册和登录
- 用户注册新账号
- 用户名密码登录
- Token认证机制
-
证书查询
- 查看所有已颁发的证书
- 显示证书ID、创建时间、过期时间、状态
- 查看证书详细信息
-
证书下载
- 下载.cer格式的证书文件
-
证书吊销
- 用户可吊销自己的证书
- 吊销后的证书将被加入CRL(证书吊销列表)
-
证书注册
- 填写证书基本信息(国家、省、市、组织、部门、域名、邮箱)
- 上传CSR文件或自动生成RSA密钥对
- 提交公钥后等待管理员审核
-
证书验证
- 上传.cer证书文件
- 验证证书是否由本CA签发
- 显示证书详细信息
管理员功能
-
证书审核
- 查看待审核的证书申请
- 同意申请并签发证书
- 拒绝申请
-
证书管理
- 查看所有证书
- 吊销证书
安装和运行
1. 数据库设置
首先执行数据库创建脚本和补充SQL:
# 连接到MySQL
mysql -u root -p
# 执行数据库创建脚本(根据您提供的SQL)
# 然后执行补充SQL
mysql -u root -p Simple_CA < init_database.sql
2. 后端设置
# 切换到后端目录
cd backend
# 安装Python依赖
pip install -r requirements.txt
# 运行Flask应用
python app.py
后端服务将运行在 http://localhost:5000
3. 前端设置
# 切换到前端目录
cd frontend
# 安装依赖
npm install
# 开发模式运行
npm run dev
前端服务将运行在 http://localhost:8080
4. 创建管理员账号
首次运行需要创建管理员账号,可以通过以下方式:
- 使用MySQL命令行创建:
INSERT INTO users (username, password, authority, created_at, updated_at)
VALUES ('admin', '<bcrypt加密后的密码>', 1, NOW(), NOW());
- 或先注册普通账号,然后在数据库中修改authority字段为1
配置说明
后端配置(backend/config.py)
MYSQL_HOST = '127.0.0.1' # MySQL主机
MYSQL_PORT = 3306 # MySQL端口
MYSQL_USER = 'root' # MySQL用户名
MYSQL_PASSWORD = 'sxd123' # MySQL密码
MYSQL_DATABASE = 'Simple_CA' # 数据库名
SECRET_KEY = 'your-secret-key-change-in-production' # JWT密钥
CERT_VALIDITY_DAYS = 365 # 证书有效期(天)
前端配置(frontend/vite.config.js)
代理配置已设置,开发环境下会自动代理API请求到后端。
API接口
认证接口
POST /api/auth/register- 用户注册POST /api/auth/login- 用户登录POST /api/auth/logout- 用户退出GET /api/auth/me- 获取当前用户信息
证书接口
GET /api/certificate/list- 获取证书列表GET /api/certificate/detail/:id- 获取证书详情GET /api/certificate/download/:id- 下载证书POST /api/certificate/revoke/:id- 吊销证书POST /api/certificate/verify- 验证证书POST /api/certificate/request- 申请证书POST /api/certificate/request/upload-csr- 上传CSR文件POST /api/certificate/request/submit-key- 提交公钥POST /api/certificate/generate-keypair- 生成密钥对
管理员接口
GET /api/admin/requests- 获取证书申请列表POST /api/admin/request/:id/approve- 同意申请POST /api/admin/request/:id/reject- 拒绝申请GET /api/admin/certificates- 获取所有证书POST /api/admin/certificate/:id/revoke- 吊销证书
注意事项
-
CA根证书:首次运行时会自动生成CA根证书和私钥,存储在
backend/ca/目录下。请妥善保管CA私钥。 -
私钥安全:系统不会存储用户的私钥,用户需自行保存生成的私钥。
-
证书格式:系统使用PEM格式的X.509证书。
-
生产环境:部署到生产环境前,请:
- 修改
SECRET_KEY - 使用HTTPS
- 配置适当的数据库权限
- 设置防火墙规则
- 修改
数据库设计补充说明
已补充以下字段:
certificates.certificate_content- 存储证书内容certificates.serial_number- 证书序列号ca_requests.csr_content- CSR文件内容
开发说明
后端开发
- 使用Flask Blueprint组织路由
- 使用SQLAlchemy ORM操作数据库
- JWT Token进行身份认证
- 使用装饰器实现权限控制
前端开发
- Vue 3 Composition API
- Element Plus组件库
- Axios进行API调用
- Vue Router进行路由管理