接收一个性能测试任务,各种原因需要使用linux agent产生压力。诡异的事发生了,同样脚本windows回放成功,使用linux agent报如下错误,脚本回放失败。
Action.c(33): Error -27778: SSL protocol error when attempting to connect with host "xxx.xxx.xxx"
各种查找原因:
方法1:lr设置如下,无效因为只在windows生效linux根本不起作用
runtime setting -> Internet protocol->perference 选中 WinINet replay instead of sockets
方法2:在脚本添加如下内容,无效因为此命令只是告诉lr使用ssl版本
web_set_sockets_option("SSL_VERSION","TLS");
方法3:根据错误提示修改各种ssl版本,F1后根据文档修改“The SSL version preferences 2, 3, 2 and 3, TLS.”,依然无效
方法4:怀疑 nginx ssl配置问题,乱加了一通依然无效
ssl_protocols TLSv1 TLSv1.1 TLSv1.2;
一通乱搞已经半天过了去,没办法只能放弃直接压力80,好在需求压力不大nginx不是问题。
今天忽然有时间继续解决,居然让我蒙对了。
第一步:通过 fiddler + postman 转lr脚本的方式,看看是不是我写的脚本有问题。问题依然存在。
第二步:使用 tcpdump 抓包由于本人不会使用tcpdump看报文,没办法只能安装 wireshark 类工具查看。悲剧又开始了凭着老经验自认为win10上装不上wireshark,在win7虚拟机上安装,各种vc库报错。没办法在win10上安装了一下,居然成功了。
第三步:开始抓包,先用windows产生压力抓个包,再用linux产生压力抓个包。
windows没问题的包
linux上有问题包,可以看出hello后服务器报错了,提示“TLSv1 Record Layer: Alert (Level: Fatal, Description: Handshake Failure)”这个提示没啥用,还是不知道啥错误。
第四步:没办法只能看握手报文了
windows没问题的
linux上有问题的报文,可以看除两个唯一的区别就是选用的加密算法不同
第五步:既然问题找到了那解决就简单了。可以有两个方式 a)在 nginx 中配置然他支持加密算法。b)在linux agent上配置让他用和windows一样的加密算法
第六步:在nginx 服务器上,将原来的
ssl_ciphers AESGCM:ALL:!DH:!EXPORT:!RC4:+HIGH:!MEDIUM:!LOW:!aNULL:!eNULL;
改为如下内容,再使用linux agent回访成功,这种改法还是有问题,第一改后的加密算法有安全漏洞,第二两个算法对性能测试结论会有影响。今天累了改天有时间再看吧。
ssl_ciphers ALL:!ADH:!EXPORT56:RC4+RSA:+HIGH:+MEDIUM:+LOW:+SSLv2:+EXP;