国密SSL协议之性能测试
1 背景
国密SSL在实际上线和使用过程中,性能就是一个必须面对的问题。
国密SSL和标准SSL相比,算一个新生事物,没有完善齐备的性能测试工具。
本文针对国密SSL性能测试,描述了相关指标,并提供一些基本的方法和工具,
也做了nginx/tomcat/硬件网关的测试对比。
2 国密SSL性能指标
国密SSL性能指标主要有三个:新建速率(CPS,Connection per second)、加密吞吐(Throughput)、最大并发连接(Max Persistent Connections)
其中CPS和吞吐与性能强相关,最大并发连接和内存大小强相关。
2.1 新建速率CPS
CPS衡量的是国密SSL建立的快慢(主要涉及非对称密码处理),新建指的是以下步骤的总和:
1) 客户端与服务器/网关建立TCP;
2) 客户端与服务器/网关建立国密SSL(不使用会话重用);
3) 客户端从服务器/网关下载一个小页面(不使用HTTP的Keep-Alive),页面大小为64字节或者1K字节;
4) 客户端与服务器/网关关闭国密SSL;
5) 客户端与服务器/网关关闭TCP;
2.2 加密吞吐
加密吞吐衡量的是国密SSL对数据加解密的快慢(主要涉及对称密码处理),通常测试下载一个较大的页面,比如下载1M字节页面。
2.3 最大并发连接
最大并发连接主要看国密SSL服务器/网关能够同时保持多个在线连接,通常可以建立好连接,下载一个小页面,然后做Keep-Alive保持,不断新增加连接,直到增加会出错。
3 国密SSL性能分析
国密SSL,以算法SM2_SM4_SM3为例,主要涉及SM2、SM3、SM4的密码处理。其中新建速率与SM2性能强相关,加密吞吐则与SM3/SM4性能强相关。
另外SM2算法有其自身特点。基本上签名的速度>验签的速度,同时SM2加密速度<SM2解密速度;这个特点正好和RSA反过来,RSA是签名速度远小于验签速度,同时RSA公钥加密的速度远远大于私钥解密的速度。
结合到国密SSL协议,则通常出现一个现象:
1) 单向国密SSL使用SM2算法,客户端比服务器端更消耗性能,因为客户端是SM2加密;
2) 单向标准SSL使用RSA算法,服务器端比客户端更消耗性能,因为客户端是RSA加密;
4 国密SSL性能测试方法
4.1 拓扑
图1 测试拓扑
4.2 硬件测试仪
标准SSL硬件测试仪主要有思博伦的avalanche等,目前不清楚是否支持国密SSL协议,或者支持国密SSL插件。国内硬件测试仪情况不详。
4.3 LoadRunner
LoadRunner是软件测试性能的方法之一。好消息是LoadRunner支持第三方插件,通过第三方插件就能够支持国密SSL协议。
4.4 gmab
Apache ab也可以支持标准SSL协议性能测试,但不支持国密。但ab是有源码的,可以自行增加国密SSL协议支持。
www.gmssl.cn提供一个国密ab的实现,软件名称叫gmab。下载参见:
https://www.gmssl.cn/gmssl/index.jsp?go=down
4.5 gmkb
前面分析到,对于国密SSL而言,客户端的性能消耗要大于服务器/网关端的性能消耗,因此使用LoadRunner和gmab的话,需要多台高性能客户端压力机。
www.gmssl.cn提供一个国密SSL性能测试的“黑”科技软件gmkb,能够通过一个客户端压力机就可以简单评估出服务器/网关的国密SSL的CPS性能。下载参见:
https://www.gmssl.cn/gmssl/index.jsp?go=down
4.6 gmcb
www.gmssl.cn提供一个国密SSL性能测试加密吞吐的软件gmcb,能够通过一个或者多个客户端压力机测试出服务器/网关的国密SSL的加密吞吐性能。下载参见:
https://www.gmssl.cn/gmssl/index.jsp?go=down
5 国密SSL性能测试结果
5.1 Web服务器
通过gmab和gmcb,我们简单测试了www.gmssl.cn的nginx国密SSL性能和tomcat的国密SSL性能。测试的单向国密SSL的性能,服务器为CentoOS7,CPU为Intel(R) Core(TM) i9-9900K CPU @ 3.60GHz,内存为16G,网卡为intel万兆电口。
Nginx国密版本1.8.0,安装下载参见https://www.gmssl.cn/gmssl/index.jsp?go=nginx
国密Nginx性能如下:
新建:3600
吞吐:693MBps
并发:50w
Tomcat国密版本9.0.37,安装下载参见https://www.gmssl.cn/gmssl/index.jsp?go=tomcat
国密Tomcat性能如下:
新建:720
吞吐:240MBps(字节/秒)
并发:8192(内存实际用的很少,tomcat报错,没有继续深入)
5.2 硬件网关
作为对比,我们拿到了北京云钥网络科技有限公司(www.keyaas.com)的硬件国密网关KSG2500的性能数据,KSG2500性能给人印象深刻,毕竟是一款高端专业硬件网关。KGS2500性能:
新建:5w
吞吐:2GBps(字节/秒)
并发:300w
6 国密SSL性能测试小结
本文涉及了国密SSL性能的方方面面,并且给出了www.gmssl.cn的国密nginx和国密tomcat的实测性能数据,也对比了硬件网关KSG2500的性能数据。
- C#温故而知新—闲话.Net
- c# IO&&线程 打造 定时打开指定程序
- 前FDIC主席:比特币政策不应打击加密货币发展
- 任何人都不应该控制区块链供应链
- c# IO操作(带进度的文件复制器,读取文本文件的指定行)
- 高科技来了!玩游戏一样开船的时代来了……
- C++库大全
- 人工智能行业前景预测 全球市场或超2700亿元
- Arxiv网络科学论文摘要14篇
- 工信部:网络强国建设2018年重点工作任务
- 刚刚!张小龙再出重磅!微信小程序掀起新零售红利狂潮!
- 无人驾驶系列——深度学习笔记:Tensorflow的安装-windows系统
- 2018年12大顶级云安全威胁
- 缤果盒子为域名意识打call 六位数秒下bingobox.com
- JavaScript 教程
- JavaScript 编辑工具
- JavaScript 与HTML
- JavaScript 与Java
- JavaScript 数据结构
- JavaScript 基本数据类型
- JavaScript 特殊数据类型
- JavaScript 运算符
- JavaScript typeof 运算符
- JavaScript 表达式
- JavaScript 类型转换
- JavaScript 基本语法
- JavaScript 注释
- Javascript 基本处理流程
- Javascript 选择结构
- Javascript if 语句
- Javascript if 语句的嵌套
- Javascript switch 语句
- Javascript 循环结构
- Javascript 循环结构实例
- Javascript 跳转语句
- Javascript 控制语句总结
- Javascript 函数介绍
- Javascript 函数的定义
- Javascript 函数调用
- Javascript 几种特殊的函数
- JavaScript 内置函数简介
- Javascript eval() 函数
- Javascript isFinite() 函数
- Javascript isNaN() 函数
- parseInt() 与 parseFloat()
- escape() 与 unescape()
- Javascript 字符串介绍
- Javascript length属性
- javascript 字符串函数
- Javascript 日期对象简介
- Javascript 日期对象用途
- Date 对象属性和方法
- Javascript 数组是什么
- Javascript 创建数组
- Javascript 数组赋值与取值
- Javascript 数组属性和方法
- Android 7.0 运行时权限弹窗问题的解决
- Android加密之全盘加密详解
- Android 实现彻底退出自己APP 并杀掉所有相关的进程
- 使用Android开发接入第三方原生SDK实现微信登录
- Android打包篇:Android Studio将代码打包成jar包教程
- Android系统制作自定义签名的例子
- 抖音短视频系统开发,日期加减
- Android开发之InetAddress基础入门简介与源码实例
- Android实现通讯录功能
- 教你用CentOS7下使用mktorrent制作PT种子
- 让 Python 的高阶函数支持链式调用[实用库/轮子]
- 解决了一个 Python Type Hints 的问题,分享一下
- Elasticsearch:flattened 数据类型 (7.3 发行版新功能)
- Android开发准确获取手机IP地址的两种方式
- Android网络请求-sign参数的设置方式