fabric使用國官的openssl和GmSSL環境安裝

一、介紹

在國密算法系列中,開源的代碼裏,Openssl和GmSSL是比較爲大家熟悉的開源庫。當然,Openssl只是在1.1.1後纔開始支持。而且支持的不是套件系列而只是算法系列。在目前流行的Linux操作系統中,前者基本都已經是默認安裝了,但是普遍的版本比較低。所以要想使用國密算法,需要升級一下。而後者則是北大一個實驗室做的一個開源的國密算法庫(它有相當一部分是依賴於Opensssl的)。

二、Openssl的安裝使用

一般來說,需要從Github上下載合適的最新版本來使用,目前最新的版本是1.1.1。下面的安裝步驟可根據實際的系統環境取捨,此處以CentOS爲例:
1、安裝需要的依賴環境

sudo yum install libtool perl-core zlib-devel -y

2、下載指定的包

curl -O -L https://github.com/openssl/openssl/archive/OpenSSL_1_1_0g.tar.gz
tar -zxvf OpenSSL_1_1_0g.tar.gz
cd openssl

上下這兩種方式都可以,只要合適的版本即可

wget https://github.com/openssl/openssl/archive/OpenSSL_1_1_1-stable.zip
unzip OpenSSL_1_1_1-stable.zip
cd openssl

3、編譯安裝

sudo ./config --prefix=/usr/local/openssl --openssldir=/usr/local/openssl shared zlib
sudo make
sudo make test  #這步可以省略
sudo make install

上下兩種方式對應上面兩種方式,其實沒有本質區別

./config --prefix=/usr/local/openssl // 指定安裝路徑
make && make install

4、配置版本
在上述編譯完成後,使用openssl version -a會發現版本仍然是老版本,這裏有兩種方式升級到新版本,推薦第一種:

mv /usr/bin/openssl /usr/bin/openssl.old
mv /usr/lib64/openssl /usr/lib64/openssl.old
mv /usr/lib64/libssl.so /usr/lib64/libssl.so.old
ln -s /usr/local/openssl/bin/openssl /usr/bin/openssl
ln -s /usr/local/openssl/include/openssl /usr/include/openssl
ln -s /usr/local/openssl/lib/libssl.so /usr/lib64/libssl.so
sudo vim /etc/ld.so.conf.d/xx.conf

增加:

/usr/local/openssl/lib

保存後:

sudo ldconfig

也可以使用第二種方式:

sudo vim /etc/profile.d/openssl.sh

增加:

pathmunge /usr/local/openssl/bin
sudo vim /etc/ld.so.conf.d/xx.conf

增加:

/usr/local/openssl/lib

保存後:

sudo ldconfig

好果在安裝完成後,執行openssl version ,報找不到某個庫,sudo ldconfig一下即可。然後就可以看到新版本了。

5、應用其生成國密證書
第一種:簡單測試

cd out/bin  #此處--prefix=./out

一級證書

./openssl ecparam -out sm2.key -name SM2 -genkey
./openssl req -config ../ssl/openssl.cnf -key sm2.key -new -out sm2.req
./openssl x509 -req -in sm2.req -signkey sm2.key -out sm2.pem

簽發Server證書

./openssl ecparam -out sm2_site.key -name SM2 -genkey
./openssl req -config ../ssl/openssl.cnf -key sm2_site.key -new -out sm2_site.req
./openssl x509 -req -in sm2_site.req -CA sm2.pem -CAkey sm2.key  -out sm2_site.pem -CAcreateserial

第二種,全生成使用:
生成根證書(一級證書):

  1. 生成根證書的私鑰
$ openssl genrsa -out /home/xxx/ca.key   #此處路徑根據實際情況,如果在當前目錄下,可以直接生成ca.key
  1. 生成根證書申請,其後綴一般爲csr。
$ openssl req -new -key /home/xxx/ca.key -out /home/xxx/ca.csr
  1. 簽發證書,名稱爲ca.crt。
openssl x509 -req -days 3650 -in /home/xxx/ca.csr -signkey /home/xxx/ca.key -out /home/xxx/ca.crt
  1. 創建證書序列號
echo "01" > /home/xxx/serial。
  1. 創建證書庫。
touch /home/xxx/index.txt
  1. 創建證書回收列表保存失效的證書,此步聚不影響後面命令
openssl ca -gencrl -out /home/xxx/ca.crl -crldays 7

上述即完成了根證書,不過注意,此證書是不受瀏覽器信任的。
生成服務證書
1)證書的私鑰

openssl genrsa -out /home/xxx/server.key

2)申請文件

openssl req -new -key /home/xxx/server.key -out /home/xxx/server.csr

3)根證書籤發服務器身份驗證證書

openssl ca -in /home/xxx/server.csr -cert /home/xxx/ca.crt -keyfile /home/xxx/ca.key -out /home/xxx/server.crt

4)生成瀏覽器格式pfx:

openssl pkcs12 -export -clcerts -in /home/xxx/server.crt -inkey /home/xxx/server.key -out /home/xxx/users/server.pfx

生成客戶端證書:
1)生成私鑰

openssl genrsa -des3 -out /home/xxx/users/users.key 1024

2)生成證書請求文件

openssl req -new -key /home/xxx/users/users.key -out /home/xxx/users/users.csr

3)簽發證書

openssl ca -in /home/xxx/users/users.csr -cert /home/xxx/ca.crt -keyfile /home/xxx/users/users.crt

4)生成pfx格式

openssl pkcs12 -export -clcerts -in /home/xxx/users/users.crt -inkey /home/xxx/users/users.key -out /home/xxx/users/users.pfx

注意:在實際的web服務器上使用客戶端證書,切記一定要在web服務器上通過根證書對客戶端進行驗證。

6、錯誤
在生成證書時有兩類錯誤:
1)生級證書和下級證書的組織名等不一致,導致生成失敗。修改成一致重新生成即可。
2)生成客戶端證書時最後一步,報更新失敗。failed to update database,TXT_DB error number 2。
修改方法是將生成證書過程中的“common name”改成不同的即可。當然還有其它方法,比如刪除index文件,生新建立等。

三、GmSSL的安裝使用

1、初步安裝走過的彎路
無論是在官網還是在網上好多的資料中,都是採用官網或者官網擴展的形式來安裝的。安裝方法見:
http://gmssl.org/docs/quickstart.html
結果就是總是報兩個錯誤:
1)error: while loading shared libraries: libssl.so.1.1: cannot open shared object file: No such file or directory
2)gmssl: relocation error: gmssl: symbol PBEPARAM_it, version OPENSSL_1_1_0d not defined in file libcrypto.so.1.1 with link time reference
網上有很多解決方法,但使用後都不能解決實際問題。
參看:https://www.cnblogs.com/wangzihong0213/p/10856875.html
直到後來在網上看到一個帖子:
https://blog.csdn.net/weixin_42037232/article/details/86661958

2、成功的方法

git clone https://github.com/guanzhi/GmSSL.git
cd GmSSL
sudo ./config --prefix=/usr/local/openssl --openssldir=/usr/local/openssl shared zlib
sudo make
sudo make install
gmssl version

其實從這裏也可以看出來,上述安裝不成功的,可能還是庫的依賴沒有找到,而如果這樣指定後,則直接找到指定版本就沒有問題了。

3、國密證書的生成
1)修改配置文件:

$ vi   /usr/local/sslopenssl.cnf
[ ca ]
default_ca      = CA_default            # The default ca section
[ CA_default ] #dir     = ./demoCA      # Where everything is kept
dir     = /home/xxx/demoCA  #此處修改

2)創建相關的目錄和文件

$ mkdir -p  /home/xxx/demoCA
$ cd /home/xxx/demoCA
$ mkdir certs crl newcerts private
$ touch index.txt    #索引文件
$ echo "01" > serial #序列號文件

3)創建根證書
生成私鑰:

$ gmssl ecparam -genkey -name sm2p256v1 -text -out Root.key -config  /usr/local/ssl/openssl.cnf

生成簽名請求:

$ gmssl req -new -key Root.key -out Root.req -subj /C=CN/ST=Gg\ Zhu/L=GZ/O=Root/OU=Root\ Sign/CN=RootCA/[email protected]
-config /usr/local/ssl/openssl.cnf

生成證書:

$ gmssl x509 -req -days 3650 -sm3 -in Root.req -signkey Root.key -out RootCA.crt
$ cp RootCA.crt demoCA/
$ cp Root.key demoCA/private/

4)創建二級(中間)證書
生成私鑰:

$ gmssl ecparam -genkey -name sm2p256v1 -text -out second.key -config  /usr/local/ssl/openssl.cnf

生成客戶請求:

$ gmssl req -new -key second.key -out second.req -subj /C=CN/ST=Gg\ Zhou/L=GZ/O=second/OU=second\ Sign/CN=secondCA/[email protected]  -config  /usr/local/ssl/openssl.cnf

生成證書:

$ gmssl x509 -req -sm3 -days 3650 -CA  RootCA.crt -CAkey demoCA/private/Root.key -CAcreateserial -in second.req -out secondCA.crt

證書驗證:

$ gmssl verify -CAfile RootCA.crt secondCA.crt
$ cp secondCA.crt demoCA/
$ cp second.key demoCA/private/

轉換成pfx:

$ gmssl pkcs12 -export  -inkey second.key -in secondCA.crt -out result.pfx -passin  pass:123 -passout pass:123

5)生成服務器證書
生成私鑰:

gmssl ecparam -genkey -name sm2p256v1 -text -out Server.key -config /usr/local/ssl/openssl.cnf

證書請求生成:

$ gmssl req -new -key Server.key -out Server.csr -subj /C=CN/ST=Gg\ Zhou/L=GZ/O=Server/OU=Server\ Sign/CN=ServerCA/[email protected] -config /usr/local/ssl/openssl.cnf

簽發證書:

$ gmssl x509 -req -sm3 -days 3650 -CA RootCA.crt -CAkey demoCA/private/Root.key -CAcreateserial -in Server.csr -out ServerCA.crt

證書驗證:

$ gmssl verify -CAfile RootCA.crt ServerCA.crt

四、總結

通過上述的說明來看,無論是Openssl和GmSSL其國密證書生成的步驟是一樣的。參數都有些一樣。所以二者之間沒有太多的應用上的不同。但是有些細節還是需要仔細的去分析和判別,小心混淆。
在這裏插入圖片描述

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章