随着国产商用密码算法领域的发展,国密协议在各行业的应用也愈发广泛。国密算法在TLS协议中的应用是目前国密算法普及度最高的场景,目前市面已有多种国密浏览器,支持国密算法的TLS协议。国密SSL协议以SM3算法作为哈希算法,SM2算法作为密钥协商以及加解密算法,具备极高的安全性。本文主要利用开源的gmssl,构建国密CA,签发国密证书,以及使用签发的证书进行简单的国密SSL通信测试。
在进行证书签发之前,首先准备配置好gmssl的配置文件,由于gmssl是openssl的一个国产化的分支,因此配置文件与openssl的配置规则基本相同。图1为本文使用的配置文件示例,主要是指定了证书及密钥生成路径、默认的hash算法以及签发的证书的密钥用途等相关信息。其中国密SSL协议与标准TLS协议最大的不同是,国密SSL协议需要配置双证书,其中一张证书用于签名操作,一张证书用于加密操作。
按照配置文件建好对应的目录结构后,即可进行证书的颁发,具体的颁发过程主要包含以下几步:
1、生成CA根证书所需私钥,指定生成私钥算法为sm2以及长度256位
生成的私钥信息如下图所示:
2、生成签发CA证书的证书请求,指定证书主题等信息
生成的证书请求信息如下图所示:
3、自签发CA根证书
生成的根证书如下图所示:
通过以上三步,我们就建立好了一个可以签发证书的CA。接下来即可使用该CA为通信测试的双方:服务器以及客户端,签发证书。
国密SSL协议是双证书机制,因此需要签发签名证书与加密证书,具体的签发流程如下:
1、创建服务器签名和加密密钥
生成的私钥文件与ca私钥文件类似。
2、创建服务器证书请求
3、签发服务器双证书
签名证书:密钥用途为数字签名。
加密证书:密钥用途为加解密。
通过以上三个步骤,即准备完成服务器所需密钥及证书,接下来签发客户端双证书的流程与上类似,在此不做赘述。
通过上面的过程,目前已具备测试国密SSL协议的根证书,服务器客户端证书及私钥,接下来可以借助gmssl的s_server与s_client组件进行通信测试。
通信测试需要开启两个终端,一个作为服务器,另一个作为客户端。
首先开启服务器端,进入监听状态,其中 -gmtls参数指定通信协议类型,-key参数指定通信所需签名私钥,-cert参数指定签名证书,-dkey参数指定通信所需加密私钥,-dcert参数指定加密证书 -CAfile指定根证书 -verify参数证明开启双向认证,双向认证即为在通信过程中不仅客户端需要验证服务器身份,服务器也要验证客户端身份,保证双方可信。
下一步打开客户端进行连接。
连接后服务器日志如下所示证明已有客户端成功连接,并通过SM2-WITH-SMS4-SM3算法套件协商成功。
客户端日志如下所示:证明握手成功,验证通过,同时协商出主密钥。
接下来,服务器与客户端即可加密通信传输报文,通过下图表示通信测试成功。
以上即为国密CA的创建,国密证书签发以及国密SSL协议通信测试的完整流程,通信过程中使用的SM2-WITH-SMS4-SM3算法套件,GMTLS协议版本为1.1。
作者:卢俊凯
来源:51Testing软件测试网原创