中文名:豬豬俠之CA服務器
項目地址:https://gitee.com/zhf_sy/zzxia-openssl-ca-server
這基於openssl的CA證書服務器。你可以用它搭建自己的專屬CA服務器,以方便為用户生成私鑰、證書請求、頒發證書、吊銷證書、證書續期、證書吊銷列表等。它可以生成多種類型的證書,包括且不限於web服務器、代碼、計算機、客户端、信任列表、時間戳、IPSec、Email、智能卡登陸及其他OID證書。只需簡單在配置文件中指定即可,證書完全兼容與Windows、Linux、Android、iOS等PC及手機系統(自簽名不兼容)。項目是產品化的,不用修改代碼就可以管理CA服務器整個生命週期,計劃未來增加web操作頁面,實現用户從網頁端申請、下載、續期等證書操作,以及證書吊銷列表的分發。
[toc]
1 介紹
1.1 背景
由於現在https的盛行,我們經常需要在內網服務器、手機、PC上使用證書(內網域名沒法使用免費的Letsencrypt證書),但多數時候大家只會生成自簽名證書,不會以CA的方式頒發證書,更不會讓用户安裝CA證書,造成用户在使用過程中總是提示不安全,浪費時間且體驗非常糟糕,再者,頒發證書的相關信息從來不保存,不具延續性,不是正經人的做法,哈哈哈哈哈哈哈哈哈!
另外:OpenSSL證書相關知識還是有點複雜的(雖然一般用的很簡單),特別是一些概念,很多人搞不清用途與區別,所以生成較為複雜的證書就會走一些彎路(有別於簡單的自簽名證書),希望這個可以幫到你。也可以幫到我自己,免得要用的時候又得折騰,因為長時間不用,容易遺忘,算是知識的固化吧。
1.2 功能
- 初始化CA服務器
- 一步生成CA服務器私鑰及證書
- 一步生成用户私鑰及證書
- 分開步驟,分別為用户生成【私鑰、證書請求、證書】
- 為第三方證書請求頒發證書
- 為證書續期
- 吊銷證書
- 生成CA證書吊銷列表
1.3 喜歡她,就滿足她:
- 【Star】她,讓她看到你是愛她的;
- 【Watching】她,時刻感知她的動態;
- 【Fork】她,為她增加新功能,修Bug,讓她更加卡哇伊;
- 【Issue】她,告訴她有哪些小脾氣,她會改的,手動小綿羊;
- 【打賞】她,為她買jk;
2 軟件架構
Linux shell
2.1 設計理念
- 用Openssl搭建CA服務器
- 信任環境:在CA服務器上為用户生成私鑰與證書
- 非信任環境:用户自己生成私鑰與證書請求,將證書請求給到CA服務器,CA服務器根據用户提供的證書請求文件為用户生成證書(私鑰一般是需要保密的,把自己假想成了NB的公共證書頒發者了)
2.2 目錄結構
初始化後的目錄結構:
$ tree
.
├── 0-init_ca.sh
├── 1-generate_CA_key_and_crt.sh
├── blog-自建CA及證書頒發-old.md
├── crlnumber
├── function.sh
├── index.txt
├── key_usage.md
├── LICENSE
├── m-1-generate_user_key.sh
├── m-2-generate_user_csr.sh
├── m-3-generate_user_crt.sh
├── m-3in1-generate_user_key-csr-crt.sh
├── m-x-revoke_user_crt.sh
├── m-x-renew_user_crt.sh
├── m-x-generate_CA_crl.sh
├── my_conf
│ ├── env.sh--CA.sample
│ ├── env.sh--model
│ └── env.sh--test.lan
├── README.md
└── serial
1 directory, 17 files
3 安裝教程
克隆到服務器上即可。 需要安裝Linux 軟件包expect。 在ubuntu上測試通過,理論上只要是基於Linux內核都行
4 使用説明
所有腳本都提供了$0 -h|--help參數,查看幫助即可。
4.1 搭建CA
- 運行
./0-init_ca.sh -y進行初始化 - 基於
./my_conf/env.sh--CA.sample創建./my_conf/env.sh--CACA的環境變量文件 - 運行
1-generate_CA_key_and_crt.sh -y以生成CA服務器私鑰與自簽名證書
以上根據自己的信息填寫即可
4.2 日常使用(為用户生成私鑰、證書請求、證書)
運行腳本前,請先查看幫助,幫助中有相關腳本的依賴文件、參數説明及示例! 多數腳本須依賴基於./my_conf/env.sh--model創建的./my_conf/env.sh--證書相關名稱環境變量文件,倉庫中提供了一個示例(test.lan)./my_conf/env.sh--test.lan供參考。
4.2.1 一步為用户生成私鑰、證書請求、證書
程序流程圖:
幫助:
$ ./m-3in1-generate_user_key-csr-crt.sh -h
用途:用於生成用户秘鑰與證書
依賴:
./function.sh
./my_conf/env.sh--${NAME} #--- 此文件須自行基於【./my_conf/env.sh--model】創建
注意:
用法:
./m-3in1-generate_user_key-csr-crt.sh [-h|--help]
./m-3in1-generate_user_key-csr-crt.sh [-n|--name {證書名稱}] <-p|--privatekey-bits {私鑰長度}> <-c|--cert-bits {證書長度}> <-d|--days {證書有效天數}> <-q|--quiet>
參數説明:
$0 : 代表腳本本身
[] : 代表是必選項
<> : 代表是可選項
| : 代表左右選其一
{} : 代表參數值,請替換為具體參數值
% : 代表通配符,非精確值,可以被包含
#
-h|--help 此幫助
-n|--name 指定名稱,用以確定用户證書相關名稱前綴及env、cnf文件名稱後綴。
即:【私鑰、證書請求、證書】的文件名稱前綴:test.com.key、test.com.csr、test.com.crt
【環境變量、配置】文件名的後綴:env.sh--test.com、openssl.cnf--test.com
-p|--privatekey-bits 私鑰長度,默認2048
-c|--cert-bits 證書長度,默認2048
-d|--days 證書有效期,默認365天
-q|--quiet 靜默方式運行
示例:
./m-3in1-generate_user_key-csr-crt.sh -n test.com
#
./m-3in1-generate_user_key-csr-crt.sh -n test.com -d 730
./m-3in1-generate_user_key-csr-crt.sh -n test.com -p 4096
./m-3in1-generate_user_key-csr-crt.sh -n test.com -p 4096 -c 2048 -d 730
./m-3in1-generate_user_key-csr-crt.sh -n test.com -q
4.2.2 分步驟為用户生成私鑰、證書請求、證書
- 生成私鑰:
程序流程圖:
幫助:
$ ./m-1-generate_user_key.sh -h
用途:用於生成用户秘鑰
依賴:
./function.sh
注意:
用法:
./m-1-generate_user_key.sh [-h|--help]
./m-1-generate_user_key.sh [-n|--name {證書相關名稱}] <-p|--privatekey-bits {私鑰長度}> <-q|--quiet>
參數説明:
$0 : 代表腳本本身
[] : 代表是必選項
<> : 代表是可選項
| : 代表左右選其一
{} : 代表參數值,請替換為具體參數值
% : 代表通配符,非精確值,可以被包含
#
-h|--help 此幫助
-n|--name 指定名稱,用以確定用户證書相關名稱前綴及env、cnf文件名稱後綴。
即:【私鑰、證書請求、證書】的文件名稱前綴:test.com.key、test.com.csr、test.com.crt
【環境變量、配置】文件名的後綴:env.sh--test.com、openssl.cnf--test.com
-p|--privatekey-bits 私鑰長度,默認2048
-q|--quiet 靜默方式運行
示例:
./m-1-generate_user_key.sh -n test.com
./m-1-generate_user_key.sh -p 4096 -n test.com
./m-1-generate_user_key.sh -q -n test.com
- 生成證書請求:
程序流程圖:
幫助:
$ ./m-2-generate_user_csr.sh -h
用途:用於生成用户證書請求
依賴:
./function.sh
./my_conf/env.sh--${NAME} #--- 此文件須自行基於【./my_conf/env.sh--model】創建
注意:
用法:
./m-2-generate_user_csr.sh [-h|--help]
./m-2-generate_user_csr.sh [-n|--name {證書相關名稱}] <-q|--quiet>
參數説明:
$0 : 代表腳本本身
[] : 代表是必選項
<> : 代表是可選項
| : 代表左右選其一
{} : 代表參數值,請替換為具體參數值
% : 代表通配符,非精確值,可以被包含
#
-h|--help 此幫助
-n|--name 指定名稱,用以確定用户證書相關名稱前綴及env、cnf文件名稱後綴。
即:【私鑰、證書請求、證書】的文件名稱前綴:test.com.key、test.com.csr、test.com.crt
【環境變量、配置】文件名的後綴:env.sh--test.com、openssl.cnf--test.com
-q|--quiet 靜默方式運行
示例:
./m-2-generate_user_csr.sh -n test.com
./m-2-generate_user_csr.sh -n test.com -q
- 頒發證書(證書第一次頒發、證書續期重新頒發):
程序流程圖:
或者:
幫助:
$ ./m-3-generate_user_crt.sh -h
用途:用於頒發或更新用户證書
依賴:
./function.sh
./my_conf/env.sh--${NAME} #--- 此文件須自行基於【./my_conf/env.sh--model】創建,當使用外部證書請求文件時,無須此配置文件
注意:
用法:
./m-3-generate_user_crt.sh [-h|--help]
./m-3-generate_user_crt.sh [-n|--name {證書相關名稱}] <-c|--cert-bits {證書長度}> <-d|--days {證書有效天數}> <-f|--csr-file {證書請求文件}> <-q|--quiet>
參數説明:
$0 : 代表腳本本身
[] : 代表是必選項
<> : 代表是可選項
| : 代表左右選其一
{} : 代表參數值,請替換為具體參數值
% : 代表通配符,非精確值,可以被包含
#
-h|--help 此幫助
-n|--name 指定名稱,用以確定用户證書相關名稱前綴及env、cnf文件名稱後綴。
即:【私鑰、證書請求、證書】的文件名稱前綴:test.com.key、test.com.csr、test.com.crt
【環境變量、配置】文件名的後綴:env.sh--test.com、openssl.cnf--test.com
-f|--csr-file 指定外部用户證書請求文件。一般只有在用户使用其他工具生成證書請求時使用此項
-c|--cert-bits 證書長度,默認2048
-d|--days 證書有效期,默認365天
-q|--quiet 靜默方式運行
示例:
./m-3-generate_user_crt.sh -n test.com
#
./m-3-generate_user_crt.sh -c 4096 -n test.com
./m-3-generate_user_crt.sh -d 730 -n test.com
./m-3-generate_user_crt.sh -c 4096 -d 730 -n test.com
# 第三方證書請求
./m-3-generate_user_crt.sh -f /path/to/xxx.csr -n xxxxx
./m-3-generate_user_crt.sh -c 4096 -d 730 -f /path/to/xxx.csr -n xxxxx
如果曾經頒發的證書過期了,只需再次運行m-3-generate_user_crt.sh就可以了,為了便於用户理解,增加了個軟連接名稱m-x-renew_user_crt.sh。
4.3 其他使用
4.3.1 更新(renew)用户證書
等同【4.2.2 - 3】為用户生成證書,請參考
4.3.2 吊銷(revoke)用户證書
./m-x-revoke_user_crt.sh
4.3.3 吊銷(revoke)用户證書
./m-x-generate_CA_crl.sh
5 最後
Enjoy!