• 12
  • 12
分享
  • 国密证书签发及国密SSL协议通信测试——软件测试圈
  • 曼倩诙谐 2021-05-19 10:16:49 字数 1351 阅读 2021 收藏 12

  随着国产商用密码算法领域的发展,国密协议在各行业的应用也愈发广泛。国密算法在TLS协议中的应用是目前国密算法普及度最高的场景,目前市面已有多种国密浏览器,支持国密算法的TLS协议。国密SSL协议以SM3算法作为哈希算法,SM2算法作为密钥协商以及加解密算法,具备极高的安全性。本文主要利用开源的gmssl,构建国密CA,签发国密证书,以及使用签发的证书进行简单的国密SSL通信测试。

  在进行证书签发之前,首先准备配置好gmssl的配置文件,由于gmssl是openssl的一个国产化的分支,因此配置文件与openssl的配置规则基本相同。图1为本文使用的配置文件示例,主要是指定了证书及密钥生成路径、默认的hash算法以及签发的证书的密钥用途等相关信息。其中国密SSL协议与标准TLS协议最大的不同是,国密SSL协议需要配置双证书,其中一张证书用于签名操作,一张证书用于加密操作。

图片 1.png

图片 4.png

图片 5.png

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

  1、生成CA根证书所需私钥,指定生成私钥算法为sm2以及长度256位

图片 7.png

  生成的私钥信息如下图所示:

图片 8.png

  2、生成签发CA证书的证书请求,指定证书主题等信息

图片 9.png

  生成的证书请求信息如下图所示:

图片 10.png

  3、自签发CA根证书

图片 11.png

  生成的根证书如下图所示:

图片 13.png

图片 14.png

  通过以上三步,我们就建立好了一个可以签发证书的CA。接下来即可使用该CA为通信测试的双方:服务器以及客户端,签发证书。

  国密SSL协议是双证书机制,因此需要签发签名证书与加密证书,具体的签发流程如下:

  1、创建服务器签名和加密密钥

图片 16.png

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

  2、创建服务器证书请求

图片 17.png

  3、签发服务器双证书

  签名证书:密钥用途为数字签名。

图片 18.png

  加密证书:密钥用途为加解密。

图片 19.png

  通过以上三个步骤,即准备完成服务器所需密钥及证书,接下来签发客户端双证书的流程与上类似,在此不做赘述。

  通过上面的过程,目前已具备测试国密SSL协议的根证书,服务器客户端证书及私钥,接下来可以借助gmssl的s_server与s_client组件进行通信测试。

  通信测试需要开启两个终端,一个作为服务器,另一个作为客户端。

  首先开启服务器端,进入监听状态,其中 -gmtls参数指定通信协议类型,-key参数指定通信所需签名私钥,-cert参数指定签名证书,-dkey参数指定通信所需加密私钥,-dcert参数指定加密证书 -CAfile指定根证书 -verify参数证明开启双向认证,双向认证即为在通信过程中不仅客户端需要验证服务器身份,服务器也要验证客户端身份,保证双方可信。

图片 20.png

  下一步打开客户端进行连接。

  连接后服务器日志如下所示证明已有客户端成功连接,并通过SM2-WITH-SMS4-SM3算法套件协商成功。

图片 21.png

  客户端日志如下所示:证明握手成功,验证通过,同时协商出主密钥。

图片 23.png

  接下来,服务器与客户端即可加密通信传输报文,通过下图表示通信测试成功。

图片 24.png

图片 25.png

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


作者:卢俊凯   

来源:51Testing软件测试网原创

  • 【留下美好印记】
    赞赏支持
登录 后发表评论
+ 关注

热门文章

    最新讲堂

      • 推荐阅读
      • 换一换
          • 软件测试耗费时间和资源是事实。可以从不同的角度观察软件的测试。可以根据我们测试的内容来划分。例如,项目中的每个可交付成果,如需求、设计、代码、文档、用户界面等,都应该进行测试。此外,我们可能会根据用户和功能要求或规范对代码进行测试,即黑盒测试。在此级别,我们将代码作为黑盒进行测试,以确保程序预期的所有服务都存在、按预期工作且没有问题。我们可能还需要测试代码的结构,即白盒测试。测试也可以根据测试中的子阶段或活动来划分,例如,测试用例生成和设计,测试用例执行和验证,建立测试数据库等。测试确保开发的软件最终没有错误。但是,任何过程都不能保证开发的软件 100% 没有错误。尽管手动测试存在各类的问题,...
            0 0 925
            分享
          •   一、jmeter为什么要做分布式压测  jmeter本身的局限性  一台压力机的 Jmeter 支持的线程数受限于 Jmeter 其本身的机制和硬件配置(内存、CPU等)是有限的  由于 Jmeter 是 Java 应用,对 CPU 和内存的消耗较大,在需要模拟大量并发用户数时,单机很容易出现 JAVA 内存溢出的错误,导致测试脚本本身就有瓶颈  JVM 堆内存的局限性  Java 应用的 jvm 堆内存 heap 受压力机硬件限制,虽然我们可以调整堆内存大小  cmd 启用 Jmeter GUI 时,也会有提示  increase Java Hea...
            0 0 741
            分享
          •   似乎这个问题看起来应该挺简单的,但是根据我所遇到的问题,有时候遇到的问题看起来是后端缺陷,但其实是前端缺陷。  有时候遇到的问题,看起来是前端缺陷,但却是后端缺陷。  问题  【项目管理】下车金融项目增加产品,提交成功后,再进入页面发现没有增加的产品。  原因分析  新增产品后,再次进入产品信息页面没有展示新增产品问题的可能原因有:  问题排查  F12,查看增加产品点击【提交】后,是否有触发接口。如果没有触发接口,查看控制台是否有异常。没有触发接口,可以判断为前端缺陷。  如果触发了接口,查看日志是否有异常。  在我们不熟悉日志的情况下,我们有可能留意不到没有抛出异常的日志。  留意不到...
            0 0 899
            分享
          • 作为测试人员,日常最频繁的活动便是对修改进行验证,不管是新功能增加还是bug修改都会动代码,有的代码修改不单单只影响当前功能,为了确保验证全面,不会出现遗留问题,在测试之前,需要对修改进行评估,确认修改范围。修改范围可通过如下两种方式判断:1、产品的需求原型文档其实产品需求文档属于明面上的一些可圈可点的,可以获得依据的地方,他可以明确告诉你修改哪些页面和哪些功能,只需要按照需求原型把测试点细化即可。2、转测文件中,开发给出的测试建议在版本转测的时候,开发也应该在转测文件中指出修改影响的范围和测试建议,测试人员需要把这些涉及点纳入测试设计中,如果还有不明白的地方需要及时找对应的开发人员进行沟通,...
            1 1 12009
            分享
          •   断言介绍与使用  性能测试中较少用到断言。断言会增加脚本执行时间,但是接口测试中断言是必备的。什么是断言?其实就是功能测试中常说的预期结果和实际结果是否相等。  响应断言  ·JSON Assertion  · Size Assertion  · JSR223 Assertion  · XPath Assertion  · Compare Assertion  断言持续时间  · HTML Assertion  · MD5Hex断言  · SMIME Assertion  XML断言  · XML Schema...
            0 0 1780
            分享
      • 51testing软件测试圈微信