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其国密证书生成的步骤是一样的。参数都有些一样。所以二者之间没有太多的应用上的不同。但是有些细节还是需要仔细的去分析和判别,小心混淆。
在这里插入图片描述

发布了104 篇原创文章 · 获赞 12 · 访问量 11万+

猜你喜欢

转载自blog.csdn.net/fpcc/article/details/103506852
今日推荐