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.
 
 
 
 
p6s4t3fer e0ac3fd9ac
ADD file via upload
2 weeks ago
App.vue ADD file via upload 2 weeks ago
Certificates.vue ADD file via upload 2 weeks ago
Login.vue ADD file via upload 2 weeks ago
MainLayout.vue ADD file via upload 2 weeks ago
README.md ADD file via upload 2 weeks ago
README_TROUBLESHOOTING.md ADD file via upload 2 weeks ago
Register.vue ADD file via upload 2 weeks ago
RegisterCertificate.vue ADD file via upload 2 weeks ago
Requests.vue ADD file via upload 2 weeks ago
SETUP.md ADD file via upload 2 weeks ago
VerifyCertificate.vue ADD file via upload 2 weeks ago
__init__.py ADD file via upload 2 weeks ago
admin.js ADD file via upload 2 weeks ago
admin.py ADD file via upload 2 weeks ago
app.py ADD file via upload 2 weeks ago
auth.js ADD file via upload 2 weeks ago
auth.py ADD file via upload 2 weeks ago
auth_middleware.py ADD file via upload 2 weeks ago
auth_utils.py ADD file via upload 2 weeks ago
cert_utils.py ADD file via upload 2 weeks ago
certificate.js ADD file via upload 2 weeks ago
certificate.py ADD file via upload 2 weeks ago
certificate_1.cer ADD file via upload 2 weeks ago
config.py ADD file via upload 2 weeks ago
database_supplement.sql ADD file via upload 2 weeks ago
fix_token_length.sql ADD file via upload 2 weeks ago
index.html ADD file via upload 2 weeks ago
index.js ADD file via upload 2 weeks ago
init_admin.py ADD file via upload 2 weeks ago
init_database.sql ADD file via upload 2 weeks ago
main.js ADD file via upload 2 weeks ago
models.py ADD file via upload 2 weeks ago
package-lock.json ADD file via upload 2 weeks ago
package.json ADD file via upload 2 weeks ago
requirements.txt ADD file via upload 2 weeks ago
vite.config.js ADD file via upload 2 weeks ago

README.md

小型CA系统

这是一个前后端分离的小型CA证书颁发机构系统用于管理数字证书的申请、签发、验证和吊销。

技术栈

后端

  • Python 3.8+
  • Flask 2.3.3
  • Flask-SQLAlchemy数据库ORM
  • PyMySQLMySQL驱动
  • cryptography证书操作
  • PyJWTToken认证
  • bcrypt密码加密

前端

  • Vue 3
  • Vue Router 4
  • Element PlusUI组件库
  • AxiosHTTP客户端
  • 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

功能特性

用户功能

  1. 用户注册和登录

    • 用户注册新账号
    • 用户名密码登录
    • Token认证机制
  2. 证书查询

    • 查看所有已颁发的证书
    • 显示证书ID、创建时间、过期时间、状态
    • 查看证书详细信息
  3. 证书下载

    • 下载.cer格式的证书文件
  4. 证书吊销

    • 用户可吊销自己的证书
    • 吊销后的证书将被加入CRL证书吊销列表
  5. 证书注册

    • 填写证书基本信息(国家、省、市、组织、部门、域名、邮箱)
    • 上传CSR文件或自动生成RSA密钥对
    • 提交公钥后等待管理员审核
  6. 证书验证

    • 上传.cer证书文件
    • 验证证书是否由本CA签发
    • 显示证书详细信息

管理员功能

  1. 证书审核

    • 查看待审核的证书申请
    • 同意申请并签发证书
    • 拒绝申请
  2. 证书管理

    • 查看所有证书
    • 吊销证书

安装和运行

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. 创建管理员账号

首次运行需要创建管理员账号,可以通过以下方式:

  1. 使用MySQL命令行创建
INSERT INTO users (username, password, authority, created_at, updated_at) 
VALUES ('admin', '<bcrypt加密后的密码>', 1, NOW(), NOW());
  1. 或先注册普通账号然后在数据库中修改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 - 吊销证书

注意事项

  1. CA根证书首次运行时会自动生成CA根证书和私钥存储在backend/ca/目录下。请妥善保管CA私钥。

  2. 私钥安全:系统不会存储用户的私钥,用户需自行保存生成的私钥。

  3. 证书格式系统使用PEM格式的X.509证书。

  4. 生产环境:部署到生产环境前,请:

    • 修改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进行路由管理