博客 / 詳情

返回

# 好用且功能強大的自建CA證書服務器工具:zzxia-openssl-ca-server

中文名:豬豬俠之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 功能

  1. 初始化CA服務器
  2. 一步生成CA服務器私鑰及證書
  3. 一步生成用户私鑰及證書
  4. 分開步驟,分別為用户生成【私鑰、證書請求、證書】
  5. 為第三方證書請求頒發證書
  6. 為證書續期
  7. 吊銷證書
  8. 生成CA證書吊銷列表

1.3 喜歡她,就滿足她:

  1. 【Star】她,讓她看到你是愛她的;
  2. 【Watching】她,時刻感知她的動態;
  3. 【Fork】她,為她增加新功能,修Bug,讓她更加卡哇伊;
  4. 【Issue】她,告訴她有哪些小脾氣,她會改的,手動小綿羊;
  5. 【打賞】她,為她買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

  1. 運行./0-init_ca.sh -y進行初始化
  2. 基於./my_conf/env.sh--CA.sample創建./my_conf/env.sh--CACA的環境變量文件
  3. 運行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 一步為用户生成私鑰、證書請求、證書

程序流程圖:
graph LR;
0(CA私鑰)
1(證書相關名稱)
1-->4(證書相關名稱.key)
1-->2(env.sh--證書相關名稱)
2-->3(openssl.cnf--證書相關名稱)
3-->5(證書相關名稱.csr)
4-->5
5-->6(證書相關名稱.crt)
3-->6
0-->6
幫助:
$ ./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 分步驟為用户生成私鑰、證書請求、證書

  1. 生成私鑰:
程序流程圖:
graph LR;
1(證書相關名稱)
1-->4(證書相關名稱.key)
幫助:
$ ./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
  1. 生成證書請求:
程序流程圖:
graph LR;
1(證書相關名稱)
1-->2(env.sh--證書相關名稱)
2-->3(openssl.cnf--證書相關名稱)
3-->5(證書相關名稱.csr)
1-->4(證書相關名稱.key)
4-->5
幫助:
$ ./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
  1. 頒發證書(證書第一次頒發、證書續期重新頒發):
程序流程圖:
graph LR;
0(CA私鑰)
1(證書相關名稱)
1-->3(openssl.cnf--證書相關名稱)
1-->5(證書相關名稱.csr)
5-->6(證書相關名稱.crt)
3-->6
0-->6

或者:

graph LR;
0(CA私鑰)
1(證書相關名稱)
1-->3(openssl.cnf--證書相關名稱)
5(來自外部.csr)-->3
5-->6(證書相關名稱.crt)
3-->6
0-->6
幫助:
$ ./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!

user avatar
0 位用戶收藏了這個故事!

發佈 評論

Some HTML is okay.