日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問(wèn) 生活随笔!

生活随笔

當(dāng)前位置: 首頁(yè) > 运维知识 > windows >内容正文

windows

基于Java和Python实现简单的CA认证系统

發(fā)布時(shí)間:2023/12/9 windows 39 豆豆
生活随笔 收集整理的這篇文章主要介紹了 基于Java和Python实现简单的CA认证系统 小編覺(jué)得挺不錯(cuò)的,現(xiàn)在分享給大家,幫大家做個(gè)參考.

資源下載地址:https://download.csdn.net/download/sheziqiong/85629902
實(shí)現(xiàn)一個(gè)簡(jiǎn)單的 CA 系統(tǒng),它包含以下功能:

  • 證書(shū)生成:用戶提供 Certificate Signing Request (CSR)和 公鑰后,系統(tǒng)會(huì)自動(dòng)為用戶生成證書(shū)并通過(guò)郵箱發(fā)放,支持 用于 SSL 和代碼簽名的兩類證書(shū)。
  • 證書(shū)吊銷(xiāo):用戶發(fā)起證書(shū)吊銷(xiāo)請(qǐng)求后,系統(tǒng)會(huì)為其更新 Certificate Revocation List (CRL),但考慮系統(tǒng)負(fù)荷,用戶的吊銷(xiāo)請(qǐng)求會(huì)被暫時(shí)記錄,然后以天為單位更新,客戶端可以通過(guò) CRL Distribution Point(CRL 分發(fā)點(diǎn):本系統(tǒng)分發(fā)點(diǎn)為:CRL Distribution Point)獲取最新的 CRL 列表。www.biyezuopin.vip
  • 證書(shū)審核:用戶的證書(shū)請(qǐng)求需要由管理員審核后才能頒發(fā),因此我們寫(xiě)了一個(gè)簡(jiǎn)單的管理員審核功能。
  • 密鑰對(duì)生成:基于 Vue 的 jsrsasign 插件,我們支持客戶端本地生成 RSA 公私密鑰對(duì)。
  • 用戶認(rèn)證:包括登錄登出注冊(cè)鑒權(quán)等常用操作,使用 Token 實(shí)現(xiàn)。
  • 代碼簽名:除了 CA 系統(tǒng)自生功能外,本項(xiàng)目還提供了一個(gè)簡(jiǎn)單的代碼簽名工具,使用 Java 編寫(xiě),用來(lái)驗(yàn)證項(xiàng)目成果。

最終成果

接口文檔

API 文檔

為了統(tǒng)一前后端請(qǐng)求,所有請(qǐng)求皆使用 POST

CSR 文件上傳

接口:/api/ca/file

文件標(biāo)識(shí):CSR_FILE

返回:該接口會(huì)返回通過(guò) CSR 解析出的用戶公鑰及個(gè)人信息

{"header":{"code":200,"msg":"ok"},"country":"CN","province":"ShanXi","locality":"TaiYuan","organization":"中北大學(xué)","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"}

功能設(shè)計(jì)

系統(tǒng)流程

數(shù)據(jù)庫(kù)設(shè)計(jì)

CREATE TABLE `ca_requests` (`id` int unsigned NOT NULL AUTO_INCREMENT,`created_at` datetime DEFAULT NULL COMMENT '字段創(chuàng)建時(shí)間',`updated_at` datetime DEFAULT NULL COMMENT '更新時(shí)間',`deleted_at` datetime DEFAULT NULL COMMENT '刪除時(shí)間',`user_id` int NOT NULL COMMENT '申請(qǐng)證書(shū)的用戶ID',`state` int unsigned NOT NULL COMMENT '證書(shū)狀態(tài)(1:待審核, 2: 審核通過(guò), 3:審核未通過(guò))',`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 '國(guó)家',`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 '地區(qū)',`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 '部門(mén)',`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 '證書(shū)擁有者ID',`state` int unsigned NOT NULL COMMENT '狀態(tài)(1 代表在使用中,2代表已撤銷(xiāo)或過(guò)期)',`request_id` int NOT NULL COMMENT '證書(shū)請(qǐng)求ID',`expire_time` bigint NOT NULL COMMENT '過(guò)期時(shí)間戳',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 '證書(shū)ID',`input_time` bigint NOT NULL COMMENT '加入時(shí)間戳',PRIMARY KEY (`id`),KEY `idx_crls_deleted_at` (`deleted_at`) ) ENGINE=InnoDB AUTO_INCREMENT=17 DEFAULT CHARSET=utf8 COMMENT='證書(shū)吊銷(xiāo)列表'; 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 '權(quán)限,1表示系統(tǒng)管理員',PRIMARY KEY (`id`),UNIQUE KEY `username` (`username`),KEY `idx_users_deleted_at` (`deleted_at`) ) ENGINE=InnoDB AUTO_INCREMENT=62 DEFAULT CHARSET=utf8;

背景知識(shí)

PKI

加密算法

對(duì)稱加密:3DES

3DES(或稱為 Triple DES)是三重?cái)?shù)據(jù)加密算法(TDEA,Triple Data Encryption Algorithm)塊密碼的通稱。它相當(dāng)于是對(duì)每個(gè)數(shù)據(jù)塊應(yīng)用三次 DES 加密算法。由于計(jì)算機(jī)運(yùn)算能力的增強(qiáng),原版 DES 密碼的密鑰長(zhǎng)度變得容易被暴力破解;3DES 即是設(shè)計(jì)用來(lái)提供一種相對(duì)簡(jiǎn)單的方法,即通過(guò)增加 DES 的密鑰長(zhǎng)度來(lái)避免類似的攻擊,而不是設(shè)計(jì)一種全新的塊密碼算法。

  • DES

非對(duì)稱加密 RSA

  • RSA

哈希算法

MD5

SHA256

X.509

X.509 是密碼學(xué)里公鑰證書(shū)的格式標(biāo)準(zhǔn)。X509 證書(shū)己應(yīng)用在包括 TLS/SSL 在內(nèi)的眾多

Internet 協(xié)議里,同時(shí)它也用在很多非在線應(yīng)用場(chǎng)景里,比如電子簽名服務(wù)。X509 證書(shū)里含有公鑰、身份信息(比如網(wǎng)絡(luò)主機(jī)名,組織的名稱或個(gè)體名稱等)和簽名信息(可以是證書(shū)簽發(fā)機(jī)構(gòu) CA 的簽名,也可以是自簽名)。對(duì)于一份經(jīng)由可信的證書(shū)簽發(fā)機(jī)構(gòu)簽名或者可以通過(guò)其它方式驗(yàn)證的證書(shū),證書(shū)的擁有者就可以用證書(shū)及相應(yīng)的私鑰來(lái)創(chuàng)建安全的通信,對(duì)文檔進(jìn)行數(shù)字簽名.另外除了證書(shū)本身功能,Ⅹ509 還附帶了證書(shū)吊銷(xiāo)列表和用于從最終對(duì)證書(shū)進(jìn)行簽名的證書(shū)簽發(fā)機(jī)構(gòu)直到最終可信點(diǎn)為止的證書(shū)合法性驗(yàn)證算法。

在 X.509 里,組織機(jī)構(gòu)通過(guò)發(fā)起證書(shū)簽名請(qǐng)求(CSR)來(lái)得到一份簽名的證書(shū)。首先需要生成一對(duì)鑰匙對(duì),然后用其中的私鑰對(duì) CSR 進(jìn)行簽名,并安全地保存私鑰。CSR 進(jìn)而包含有請(qǐng)求發(fā)起者的身份信息、用來(lái)對(duì)此請(qǐng)求進(jìn)行驗(yàn)真的的公鑰以及所請(qǐng)求證書(shū)專有名稱。CSR 里還可能帶有 CA 要求的其它有關(guān)身份證明的信息。然后 CA 對(duì)這個(gè)專有名稱發(fā)布一份證書(shū),并綁定一個(gè)公鑰. 組織機(jī)構(gòu)可以把受信的根證書(shū)分發(fā)給所有的成員,這樣就可以使用公司的 PKI 系統(tǒng)了。

證書(shū)格式

版本號(hào)(Version Number):規(guī)范的版本號(hào),目前為版本 3,值為 0x2;

序列號(hào)(Serial Number):由 CA 維護(hù)的為它所發(fā)的每個(gè)證書(shū)分配的一的列號(hào),用來(lái)追蹤和撤銷(xiāo)證書(shū)。只要擁有簽發(fā)者信息和序列號(hào),就可以唯一標(biāo)識(shí)一個(gè)證書(shū),最大不能過(guò) 20 個(gè)字節(jié);

簽名算法(Signature Algorithm):數(shù)字簽名所采用的算法,如:sha256-with-RSA-Encryptionccdsa-with-SHA2S6;

頒發(fā)者(Issuer):發(fā)證書(shū)單位的標(biāo)識(shí)信息,如 ” C=CN,ST=Beijing, L=Beijing, O=org.example.com,CN=ca.org。example.com ”;

有效期(Validity): 證書(shū)的有效期很,包括起止時(shí)間。

主體(Subject) : 證書(shū)擁有者的標(biāo)識(shí)信息(Distinguished Name),如:" C=CN,ST=Beijing, L=Beijing,CN=person.org.example.com”;

主體的公鑰信息(SubJect Public Key Info):所保護(hù)的公鑰相關(guān)的信息:

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

主體公鑰(Subject Unique Identifier):公鑰的內(nèi)容。

頒發(fā)者唯一號(hào)(Issuer Unique Identifier):代表頒發(fā)者的唯一信息,僅 2、3 版本支持,可選;

主體唯一號(hào)(Subject Unique Identifier):代表?yè)碛凶C書(shū)實(shí)體的唯一信息,僅 2,3 版本支持,可選:

擴(kuò)展(Extensions,可選): 可選的一些擴(kuò)展。中可能包括:Subject Key Identifier:實(shí)體的秘鑰標(biāo)識(shí)符,區(qū)分實(shí)體的多對(duì)秘鑰;

Basic Constraints:一指明是否屬于 CA;Authority Key Identifier:證書(shū)頒發(fā)者的公鑰標(biāo)識(shí)符;

CRL Distribution Points: 撤銷(xiāo)文件的頒發(fā)地址;

Key Usage:證書(shū)的用途或功能信息。

證書(shū)吊銷(xiāo)

在公共密鑰基礎(chǔ)設(shè)施(PKI)中, CSR 是證書(shū)申請(qǐng)者發(fā)送給 CA 機(jī)構(gòu)用于為其簽發(fā)數(shù)字證書(shū)的文件,其常見(jiàn)格式為 PKCS#10 和 SPKAC , 一般情況下,他會(huì)包含一個(gè)用戶公鑰和必要的用戶信息,X.509 標(biāo)準(zhǔn)中,列舉了如下列:

申請(qǐng)者在生成證書(shū)之前,應(yīng)該先生成一個(gè)密鑰對(duì),自己妥善保管私鑰,對(duì)于 CSR 中的信息,應(yīng)該使用私鑰簽名以防止被篡改。因此,一個(gè)標(biāo)準(zhǔn) CSR 包含下面三部分信息:

  • 認(rèn)證請(qǐng)求信息:包含主要的申請(qǐng)人信息和公鑰
  • 簽名算法標(biāo)識(shí):
  • CSR 簽名:申請(qǐng)人應(yīng)該使用自己的私鑰對(duì) CSR 信息進(jìn)行簽名,以確保其不被篡改。
  • 本系統(tǒng)允許申請(qǐng)人通過(guò)填寫(xiě)表單快速提交個(gè)人信息和公鑰,同時(shí)也允許申請(qǐng)人直接上傳 CSR 文件。

    本地通過(guò) openSSL 生成 CSR 的方法:

    # 生成隨機(jī)私鑰 openssl genrsa -des3 -out server.key 2048 # 使用私鑰簽發(fā) CSR openssl req -new -nodes -keyout server.key -out server.csr

    模塊劃分和人員分工

    模塊內(nèi)容
    證書(shū)請(qǐng)求1. CSR 文件上傳
    2. CSR 表單填寫(xiě)
    公鑰提交
    用戶證書(shū)查詢
    證書(shū)生成1. 待審核列表
    2. 頒發(fā)證書(shū)
    3. 駁回請(qǐng)求
    登錄注冊(cè)鑒權(quán)1. 登錄
    2. 注冊(cè)
    3. 登出
    證書(shū)吊銷(xiāo)1. 證書(shū)吊銷(xiāo)請(qǐng)求
    2. CRL 分發(fā)
    代碼簽名

    資源下載地址:https://download.csdn.net/download/sheziqiong/85629902

    總結(jié)

    以上是生活随笔為你收集整理的基于Java和Python实现简单的CA认证系统的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問(wèn)題。

    如果覺(jué)得生活随笔網(wǎng)站內(nèi)容還不錯(cuò),歡迎將生活随笔推薦給好友。