基於gmssl實現國密證書籤發驗證

本次實現的系統爲 Linux環境,在Windows下的 gmssl 安裝應該也差不多,所以環境影響不大。

1.根CA的生成

系統建立CA時,需要先在離線狀態下建立一個根CA。根CA所需要的文件夾有certs(證書文件夾)、crl(吊銷數據文件夾)、newcerts(新生成的證書文件夾)、private(私有數據文件夾)。同時還需要在本地生成數據記錄文件index.txt,用以記錄對證書的操作,需要初始化設定序列號。

執行的初始化操作如下:

mkdir certs clr newcerts private
touch index.txt
echo “01” > serial

 隨後,便可以生成根 CA 的 sm2 公私鑰對,使用命令如下,生成的密鑰文件爲 root-cakey.pem

gmssl ecparam -genkey -name sm2p256v1 -out private/root-cakey.pem

然後,生成根 CA 的證書請求。使用的算法爲 sm3 簽名算法,生成的證書請求爲 root-cacsr.pem.

gmssl req -new -sm3 -key private/root-cakey.pem -out root-cacsr.pem

最後讓根 CA 對自己的證書請求進行自簽名生成證書文件,生成的證書有效期爲365天,證書文件名稱爲 root-cacert.pem。

gmssl req -x509 -sm3 -days 365 -key private/root-cakey.pem -out root-cacert.pem

生成的根CA證書信息如下,我們可以看到該證書的公私鑰爲SM2算法生成,對證書的簽名算法採用SM3。證書的發佈者和證書主體信息一致,說明該證書是由自簽名生成。

       到此,根CA建立完成,可爲二級CA的證書進行簽發。

2. 二級 CA 的生成

二級CA生成SM2公私鑰的命令爲,使用的算法爲sm2。生成的密鑰文件爲sub-cakey.pem。

gmssl ecparam -genkey -name sm2p256v1 -out private/sub-cakey.pem

生成證書請求的命令爲,使用的簽名算法爲sm3。生成的證書請求爲sub-cacsr.pem。

gmssl req -batch -new -sm3 -key private/sub-cakey.pem -out sub-cacsr.pem 

根CA生成二級CA證書命令如下,使用sm3算法。生成的二級CA證書名稱爲sub-cacert.pem。

gmssl ca -md sm3 -extensions v3_ca -in sub-cacsr.pem -out newcerts/sub-cacert.pem -days 365 -cert root-cacert.pem -keyfile ./private/root-cakey.pem

生成的二級CA證書如下圖所示,可以看到證書的發佈者信息與根CA信息一致,說明該證書由根CA簽發。同時該證書主體信息與我們管理界面輸入的信息一致。

        自此,一個二級CA的初始化已經完成。

3.用戶證書的簽發

用戶私鑰對生成:

gmssl ecparam -genkey -name sm2p256v1 -out thirdkey.pem

用戶證書請求生成:

gmssl req -new -sm3 -key thirdkey.pem -out thirdcsr.pem

隨後二級CA簽發用戶證書請求:

gmssl ca -batch -md sm3 -extensions v3_ca -in thirdcsr.pem -out thirdcert.pem -days 365 -cert sub-cacert.pem -keyfile private/sub-cakey.pem

生成的用戶證書如下:

4. 證書吊銷

吊銷用戶證書如下,所示:

openssl ca -keyfile ./private/sub-cakey.pem -cert ./sub-cacert.pem -revoke thirdcert.pem

吊銷之後的index.txt的內容變化如下圖所示,可以看到證書的狀態從已經驗證狀態“V”轉換到已經吊銷狀態“R”。

發佈了35 篇原創文章 · 獲贊 6 · 訪問量 2萬+
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章