lsekfe 发表于 2021-4-20 11:00:04

国密证书签发及国密SSL协议通信测试

随着国产商用密码算法领域的发展,国密协议在各行业的应用也愈发广泛。国密算法在TLS协议中的应用是目前国密算法普及度最高的场景,目前市面已有多种国密浏览器,支持国密算法的TLS协议。国密SSL协议以SM3算法作为哈希算法,SM2算法作为密钥协商以及加解密算法,具备极高的安全性。本文主要利用开源的gmssl,构建国密CA,签发国密证书,以及使用签发的证书进行简单的国密SSL通信测试。
  在进行证书签发之前,首先准备配置好gmssl的配置文件,由于gmssl是openssl的一个国产化的分支,因此配置文件与openssl的配置规则基本相同。图1为本文使用的配置文件示例,主要是指定了证书及密钥生成路径、默认的hash算法以及签发的证书的密钥用途等相关信息。其中国密SSL协议与标准TLS协议最大的不同是,国密SSL协议需要配置双证书,其中一张证书用于签名操作,一张证书用于加密操作。
http://www.51testing.com/attachments/2021/04/15326825_2021041917123012Wpq.png
http://www.51testing.com/attachments/2021/04/15326825_202104191712391xHJU.png
http://www.51testing.com/attachments/2021/04/15326825_202104191712431n05d.png

  按照配置文件建好对应的目录结构后,即可进行证书的颁发,具体的颁发过程主要包含以下几步:

  1、生成CA根证书所需私钥,指定生成私钥算法为sm2以及长度256位
http://www.51testing.com/attachments/2021/04/15326825_202104191713241ybt1.png

  生成的私钥信息如下图所示:
http://www.51testing.com/attachments/2021/04/15326825_202104191713361UpsA.png

  2、生成签发CA证书的证书请求,指定证书主题等信息
http://www.51testing.com/attachments/2021/04/15326825_202104191714111KfRw.png

  生成的证书请求信息如下图所示:
http://www.51testing.com/attachments/2021/04/15326825_202104191714261EmEt.png

  3、自签发CA根证书
http://www.51testing.com/attachments/2021/04/15326825_202104191717261iO0u.png

  生成的根证书如下图所示:
http://www.51testing.com/attachments/2021/04/15326825_202104191717411cqFt.png
http://www.51testing.com/attachments/2021/04/15326825_202104191718031LnPa.png

  通过以上三步,我们就建立好了一个可以签发证书的CA。接下来即可使用该CA为通信测试的双方:服务器以及客户端,签发证书。
  国密SSL协议是双证书机制,因此需要签发签名证书与加密证书,具体的签发流程如下:

  1、创建服务器签名和加密密钥
http://www.51testing.com/attachments/2021/04/15326825_202104191722051X2ce.png

  生成的私钥文件与ca私钥文件类似。

  2、创建服务器证书请求
http://www.51testing.com/attachments/2021/04/15326825_20210419172251164gq.png

  3、签发服务器双证书
  签名证书:密钥用途为数字签名。
http://www.51testing.com/attachments/2021/04/15326825_2021041917245817R9w.png

  加密证书:密钥用途为加解密。
http://www.51testing.com/attachments/2021/04/15326825_202104191725341cgnk.png

  通过以上三个步骤,即准备完成服务器所需密钥及证书,接下来签发客户端双证书的流程与上类似,在此不做赘述。
  通过上面的过程,目前已具备测试国密SSL协议的根证书,服务器客户端证书及私钥,接下来可以借助gmssl的s_server与s_client组件进行通信测试。
  通信测试需要开启两个终端,一个作为服务器,另一个作为客户端。
  首先开启服务器端,进入监听状态,其中 -gmtls参数指定通信协议类型,-key参数指定通信所需签名私钥,-cert参数指定签名证书,-dkey参数指定通信所需加密私钥,-dcert参数指定加密证书 -CAfile指定根证书 -verify参数证明开启双向认证,双向认证即为在通信过程中不仅客户端需要验证服务器身份,服务器也要验证客户端身份,保证双方可信。
http://www.51testing.com/attachments/2021/04/15326825_202104191726481jeJx.png

  下一步打开客户端进行连接。
  连接后服务器日志如下所示证明已有客户端成功连接,并通过SM2-WITH-SMS4-SM3算法套件协商成功。
http://www.51testing.com/attachments/2021/04/15326825_202104191727031iBgy.png

  客户端日志如下所示:证明握手成功,验证通过,同时协商出主密钥。
http://www.51testing.com/attachments/2021/04/15326825_202104191728301J2UO.png

  接下来,服务器与客户端即可加密通信传输报文,通过下图表示通信测试成功。
http://www.51testing.com/attachments/2021/04/15326825_202104191729001VT7u.png
http://www.51testing.com/attachments/2021/04/15326825_202104191729051Ja63.png

  以上即为国密CA的创建,国密证书签发以及国密SSL协议通信测试的完整流程,通信过程中使用的SM2-WITH-SMS4-SM3算法套件,GMTLS协议版本为1.1。
页: [1]
查看完整版本: 国密证书签发及国密SSL协议通信测试