资源下载地址:https://download.csdn.net/download/sheziqiong/85629902
实现一个简单的 CA 系统,它包含以下功能:

  • 证书生成:用户提供 Certificate Signing Request (CSR)和 公钥后,系统会自动为用户生成证书并通过邮箱发放,支持 用于 SSL 和代码签名的两类证书。
  • 证书吊销:用户发起证书吊销请求后,系统会为其更新 Certificate Revocation List (CRL),但考虑系统负荷,用户的吊销请求会被暂时记录,然后以天为单位更新,客户端可以通过 CRL Distribution Point(CRL 分发点:本系统分发点为:CRL Distribution Point)获取最新的 CRL 列表。www.biyezuopin.vip
  • 证书审核:用户的证书请求需要由管理员审核后才能颁发,因此我们写了一个简单的管理员审核功能。
  • 密钥对生成:基于 Vue 的 jsrsasign 插件,我们支持客户端本地生成 RSA 公私密钥对。
  • 用户认证:包括登录登出注册鉴权等常用操作,使用 Token 实现。
  • 代码签名:除了 CA 系统自生功能外,本项目还提供了一个简单的代码签名工具,使用 Java 编写,用来验证项目成果。

最终成果

接口文档

API 文档

为了统一前后端请求,所有请求皆使用 POST

CSR 文件上传

接口:/api/ca/file

文件标识:CSR_FILE

返回:该接口会返回通过 CSR 解析出的用户公钥及个人信息

{"header":{"code":200,"msg":"ok"},"country":"CN","province":"ShanXi","locality":"TaiYuan","organization":"中北大学","common_name":"junebao.top","email_address":"","organizational_unit":"IT","public_key":"-----BEGIN RSA PUBLIC KEY-----\nMIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEArj/g1UgvJAEnXxlDFHU6\naMwaaZ7BP4zXXWLnfw5kiVTjMPL4kS21do82bygUg4tCPM3pnDt5BpibGwsAZhQ8\nNH527z0Is2yHUT8S/RWT7t7AAJ06NdsEzdyaKAzVHa3xfq6zjVHc11nn0eLB0M0G\nahteIZebHjNhMX3dyVbvUx9e0iAjPDxbCvficbBDhQ1fzZbUoxmS175ENDuoNRY1\nory8+fFAnRhwTJn12mhB/U+QaHiBIfzhC7exMffcUJYK8WYqt0W0+3oS47gyiCt7\nlEyhzQ9UoJVA7O5zsmB39xPLXHIsRLkuAZBIB9YLibZOse5gRCVgd6OYJTyhHbGl\nRwIDAQAB\n-----END RSA PUBLIC KEY-----\n"}

功能设计

系统流程

数据库设计

CREATE TABLE `ca_requests` (`id` int unsigned NOT NULL AUTO_INCREMENT,`created_at` datetime DEFAULT NULL COMMENT '字段创建时间',`updated_at` datetime DEFAULT NULL COMMENT '更新时间',`deleted_at` datetime DEFAULT NULL COMMENT '删除时间',`user_id` int NOT NULL COMMENT '申请证书的用户ID',`state` int unsigned NOT NULL COMMENT '证书状态(1:待审核, 2: 审核通过, 3:审核未通过)',`public_key` text CHARACTER SET utf8 COLLATE utf8_general_ci NOT NULL COMMENT '公钥',`country` varchar(20) CHARACTER SET utf8 COLLATE utf8_general_ci DEFAULT NULL COMMENT '国家',`province` varchar(255) CHARACTER SET utf8 COLLATE utf8_general_ci DEFAULT NULL COMMENT '州市',`locality` varchar(255) CHARACTER SET utf8 COLLATE utf8_general_ci DEFAULT NULL COMMENT '地区',`organization` varchar(255) CHARACTER SET utf8 COLLATE utf8_general_ci DEFAULT NULL COMMENT '组织',`organization_unit_name` varchar(255) CHARACTER SET utf8 COLLATE utf8_general_ci DEFAULT NULL COMMENT '部门',`common_name` varchar(255) CHARACTER SET utf8 COLLATE utf8_general_ci DEFAULT NULL COMMENT '姓名',`email_address` varchar(255) CHARACTER SET utf8 COLLATE utf8_general_ci NOT NULL COMMENT '邮箱',PRIMARY KEY (`id`),KEY `idx_ca_requests_deleted_at` (`deleted_at`)
) ENGINE=InnoDB AUTO_INCREMENT=46 DEFAULT CHARSET=utf8;
CREATE TABLE `certificates` (`id` int unsigned NOT NULL AUTO_INCREMENT,`created_at` datetime DEFAULT NULL,`updated_at` datetime DEFAULT NULL,`deleted_at` datetime DEFAULT NULL,`user_id` int NOT NULL COMMENT '证书拥有者ID',`state` int unsigned NOT NULL COMMENT '状态(1 代表在使用中,2代表已撤销或过期)',`request_id` int NOT NULL COMMENT '证书请求ID',`expire_time` bigint NOT NULL COMMENT '过期时间戳',PRIMARY KEY (`id`),KEY `idx_certificates_deleted_at` (`deleted_at`)
) ENGINE=InnoDB AUTO_INCREMENT=39 DEFAULT CHARSET=utf8;
CREATE TABLE `crls` (`id` int unsigned NOT NULL AUTO_INCREMENT,`created_at` datetime DEFAULT NULL,`updated_at` datetime DEFAULT NULL,`deleted_at` datetime DEFAULT NULL,`certificate_id` int NOT NULL COMMENT '证书ID',`input_time` bigint NOT NULL COMMENT '加入时间戳',PRIMARY KEY (`id`),KEY `idx_crls_deleted_at` (`deleted_at`)
) ENGINE=InnoDB AUTO_INCREMENT=17 DEFAULT CHARSET=utf8 COMMENT='证书吊销列表';
CREATE TABLE `user_tokens` (`id` int unsigned NOT NULL AUTO_INCREMENT,`created_at` datetime DEFAULT NULL,`updated_at` datetime DEFAULT NULL ON UPDATE CURRENT_TIMESTAMP,`deleted_at` datetime DEFAULT NULL,`user_id` int NOT NULL,`token` varchar(64) NOT NULL,`expire_time` bigint NOT NULL,PRIMARY KEY (`id`),KEY `idx_user_tokens_deleted_at` (`deleted_at`)
) ENGINE=InnoDB AUTO_INCREMENT=81 DEFAULT CHARSET=utf8;
CREATE TABLE `users` (`id` int unsigned NOT NULL AUTO_INCREMENT,`created_at` datetime DEFAULT NULL,`updated_at` datetime DEFAULT NULL,`deleted_at` datetime DEFAULT NULL,`username` varchar(16) NOT NULL,`password` varchar(255) NOT NULL,`email` varchar(255) DEFAULT NULL,`authority` int DEFAULT NULL COMMENT '权限,1表示系统管理员',PRIMARY KEY (`id`),UNIQUE KEY `username` (`username`),KEY `idx_users_deleted_at` (`deleted_at`)
) ENGINE=InnoDB AUTO_INCREMENT=62 DEFAULT CHARSET=utf8;

背景知识

PKI

加密算法

对称加密:3DES

3DES(或称为 Triple DES)是三重数据加密算法(TDEA,Triple Data Encryption Algorithm)块密码的通称。它相当于是对每个数据块应用三次 DES 加密算法。由于计算机运算能力的增强,原版 DES 密码的密钥长度变得容易被暴力破解;3DES 即是设计用来提供一种相对简单的方法,即通过增加 DES 的密钥长度来避免类似的攻击,而不是设计一种全新的块密码算法。

  • DES

非对称加密 RSA

  • RSA

哈希算法

MD5

SHA256

X.509

X.509 是密码学里公钥证书的格式标准。X509 证书己应用在包括 TLS/SSL 在内的众多

Internet 协议里,同时它也用在很多非在线应用场景里,比如电子签名服务。X509 证书里含有公钥、身份信息(比如网络主机名,组织的名称或个体名称等)和签名信息(可以是证书签发机构 CA 的签名,也可以是自签名)。对于一份经由可信的证书签发机构签名或者可以通过其它方式验证的证书,证书的拥有者就可以用证书及相应的私钥来创建安全的通信,对文档进行数字签名.另外除了证书本身功能,Ⅹ509 还附带了证书吊销列表和用于从最终对证书进行签名的证书签发机构直到最终可信点为止的证书合法性验证算法。

在 X.509 里,组织机构通过发起证书签名请求(CSR)来得到一份签名的证书。首先需要生成一对钥匙对,然后用其中的私钥对 CSR 进行签名,并安全地保存私钥。CSR 进而包含有请求发起者的身份信息、用来对此请求进行验真的的公钥以及所请求证书专有名称。CSR 里还可能带有 CA 要求的其它有关身份证明的信息。然后 CA 对这个专有名称发布一份证书,并绑定一个公钥. 组织机构可以把受信的根证书分发给所有的成员,这样就可以使用公司的 PKI 系统了。

证书格式

版本号(Version Number):规范的版本号,目前为版本 3,值为 0x2;

序列号(Serial Number):由 CA 维护的为它所发的每个证书分配的一的列号,用来追踪和撤销证书。只要拥有签发者信息和序列号,就可以唯一标识一个证书,最大不能过 20 个字节;

签名算法(Signature Algorithm):数字签名所采用的算法,如:sha256-with-RSA-Encryptionccdsa-with-SHA2S6;

颁发者(Issuer):发证书单位的标识信息,如 ” C=CN,ST=Beijing, L=Beijing, O=org.example.com,CN=ca.org。example.com ”;

有效期(Validity): 证书的有效期很,包括起止时间。

主体(Subject) : 证书拥有者的标识信息(Distinguished Name),如:" C=CN,ST=Beijing, L=Beijing,CN=person.org.example.com”;

主体的公钥信息(SubJect Public Key Info):所保护的公钥相关的信息:

公钥算法 (Public Key Algorithm)公钥采用的算法;

主体公钥(Subject Unique Identifier):公钥的内容。

颁发者唯一号(Issuer Unique Identifier):代表颁发者的唯一信息,仅 2、3 版本支持,可选;

主体唯一号(Subject Unique Identifier):代表拥有证书实体的唯一信息,仅 2,3 版本支持,可选:

扩展(Extensions,可选): 可选的一些扩展。中可能包括:Subject Key Identifier:实体的秘钥标识符,区分实体的多对秘钥;

Basic Constraints:一指明是否属于 CA;Authority Key Identifier:证书颁发者的公钥标识符;

CRL Distribution Points: 撤销文件的颁发地址;

Key Usage:证书的用途或功能信息。

证书吊销

在公共密钥基础设施(PKI)中, CSR 是证书申请者发送给 CA 机构用于为其签发数字证书的文件,其常见格式为 PKCS#10 和 SPKAC , 一般情况下,他会包含一个用户公钥和必要的用户信息,X.509 标准中,列举了如下列:

申请者在生成证书之前,应该先生成一个密钥对,自己妥善保管私钥,对于 CSR 中的信息,应该使用私钥签名以防止被篡改。因此,一个标准 CSR 包含下面三部分信息:

  1. 认证请求信息:包含主要的申请人信息和公钥
  2. 签名算法标识:
  3. CSR 签名:申请人应该使用自己的私钥对 CSR 信息进行签名,以确保其不被篡改。

本系统允许申请人通过填写表单快速提交个人信息和公钥,同时也允许申请人直接上传 CSR 文件。

本地通过 openSSL 生成 CSR 的方法:

# 生成随机私钥
openssl genrsa -des3 -out server.key 2048
# 使用私钥签发 CSR
openssl req -new -nodes -keyout server.key -out server.csr

模块划分和人员分工

模块 内容
证书请求 1. CSR 文件上传
2. CSR 表单填写
公钥提交
用户证书查询
证书生成 1. 待审核列表
2. 颁发证书
3. 驳回请求
登录注册鉴权 1. 登录
2. 注册
3. 登出
证书吊销 1. 证书吊销请求
2. CRL 分发
代码签名

资源下载地址:https://download.csdn.net/download/sheziqiong/85629902

基于Java和Python实现简单的CA认证系统相关推荐

  1. 基于Java毕业设计寻艺画室网站源码+系统+mysql+lw文档+部署软件

    基于Java毕业设计寻艺画室网站源码+系统+mysql+lw文档+部署软件 基于Java毕业设计寻艺画室网站源码+系统+mysql+lw文档+部署软件 本源码技术栈: 项目架构:B/S架构 开发语言: ...

  2. Python 实现简单的客户端认证

    更多编程教程请到:菜鸟教程 https://www.piaodoo.com/ 友情链接: 高州阳光论坛https://www.hnthzk.com/ 人人影视http://www.op-kg.com/ ...

  3. 基于JAVA校园疫情信息管理系统计算机毕业设计源码+系统+数据库+lw文档+部署

    基于JAVA校园疫情信息管理系统计算机毕业设计源码+系统+数据库+lw文档+部署 基于JAVA校园疫情信息管理系统计算机毕业设计源码+系统+数据库+lw文档+部署 本源码技术栈: 项目架构:B/S架构 ...

  4. 基于Java毕业设计学校旧书交易网站源码+系统+mysql+lw文档+部署软件

    基于Java毕业设计学校旧书交易网站源码+系统+mysql+lw文档+部署软件 基于Java毕业设计学校旧书交易网站源码+系统+mysql+lw文档+部署软件 本源码技术栈: 项目架构:B/S架构 开 ...

  5. 基于JAVA旅行指南网站计算机毕业设计源码+系统+mysql数据库+lw文档+部署

    基于JAVA旅行指南网站计算机毕业设计源码+系统+mysql数据库+lw文档+部署 基于JAVA旅行指南网站计算机毕业设计源码+系统+mysql数据库+lw文档+部署 本源码技术栈: 项目架构:B/S ...

  6. 基于JAVA学科竞赛管理系统计算机毕业设计源码+系统+lw文档+部署

    基于JAVA学科竞赛管理系统计算机毕业设计源码+系统+lw文档+部署 基于JAVA学科竞赛管理系统计算机毕业设计源码+系统+lw文档+部署 本源码技术栈: 项目架构:B/S架构 开发语言:Java语言 ...

  7. 基于JAVA员工信息管理系统计算机毕业设计源码+系统+数据库+lw文档+部署

    基于JAVA员工信息管理系统计算机毕业设计源码+系统+数据库+lw文档+部署 基于JAVA员工信息管理系统计算机毕业设计源码+系统+数据库+lw文档+部署 本源码技术栈: 项目架构:B/S架构 开发语 ...

  8. 基于JAVA校园绿化管理系统计算机毕业设计源码+系统+数据库+lw文档+部署

    基于JAVA校园绿化管理系统计算机毕业设计源码+系统+数据库+lw文档+部署 基于JAVA校园绿化管理系统计算机毕业设计源码+系统+数据库+lw文档+部署 本源码技术栈: 项目架构:B/S架构 开发语 ...

  9. 基于JAVA诊所信息管理系统计算机毕业设计源码+系统+lw文档+部署

    基于JAVA诊所信息管理系统计算机毕业设计源码+系统+lw文档+部署 基于JAVA诊所信息管理系统计算机毕业设计源码+系统+lw文档+部署 本源码技术栈: 项目架构:B/S架构 开发语言:Java语言 ...

  10. 基于Java毕业设计校园摄影爱好者交流网站源码+系统+mysql+lw文档+部署软件

    基于Java毕业设计校园摄影爱好者交流网站源码+系统+mysql+lw文档+部署软件 基于Java毕业设计校园摄影爱好者交流网站源码+系统+mysql+lw文档+部署软件 本源码技术栈: 项目架构:B ...

最新文章

  1. C++ vector容器简单解释
  2. 什么是功能性需求和非功能性需求
  3. 没有足够多的数据怎么办?计算机视觉数据增强方法总结
  4. linux命令(8)kill命令
  5. lambda中sorted排序
  6. 作者:石磊,男,北京金信网银金融信息服务有限公司互联网金融行业数据分析师。...
  7. qcustomplot删除一条曲线_被“谭卓”旗袍造型给惊艳,波波头搭配一条酒红色旗袍,华丽高贵...
  8. c语言如何求一个数学表达式的值,浅谈C语言中表达式的求值
  9. 华为轮值董事长郭平:5“机”协同是基础电力,ICT行业应用将像家用电器和工业电气化
  10. scala类型参数的上界和下界
  11. Python软件封装打包
  12. 为什么手机上传图片这么慢 前端_为什么手机上传速度那么慢?
  13. html 链接nofollow,ueditor给超链接默认添加rel=nofollow标签
  14. C++中的peek()函数及其用法
  15. 汽车租赁小项目(java)
  16. [渝粤教育] 西南科技大学 经济型数控系统设计 在线考试复习资料
  17. A Weakly Supervised Convolutional Network for Change Segmentation and Classification
  18. 金融行业的数据分析怎么做?
  19. 《父与子的编程之旅-与小卡特一起学python》第18章
  20. java美元兑换_代码中的美元$

热门文章

  1. IDEA如何设置鼠标滚轮调整代码大小
  2. gradle排除jar依赖
  3. PostgreSQL查询优化器详解之逻辑优化篇
  4. PSP3000破解原理——缓冲区溢出漏洞随谈
  5. 承载童年的游戏机,已停产!但我在 GitHub 找到了它们
  6. Linux 操作系统原理介绍
  7. arcmap中图斑面积代表_arcmap计算面积_ArcMap怎么重计算图斑面积?arcmap使用手册_arcmap计算面积...
  8. fcntl实现对文件加锁功能
  9. 浅谈 fluentd 使用
  10. 2019年中国计算机学会(CCF)推荐国际学术会议和期刊目录-A类