接收一个性能测试任务,各类缘由须要使用linux agent产生压力。诡异的事发生了,一样脚本windows回放成功,使用linux agent报以下错误,脚本回放失败。linux
Action.c(33): Error -27778: SSL protocol error when attempting to connect with host "xxx.xxx.xxx"
各类查找缘由:nginx
方法1:lr设置以下,无效由于只在windows生效linux根本不起做用web
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.”,依然无效windows
方法4:怀疑 nginx ssl配置问题,乱加了一通依然无效安全
ssl_protocols TLSv1 TLSv1.1 TLSv1.2;
一通乱搞已经半天过了去,没办法只能放弃直接压力80,好在需求压力不大nginx不是问题。bash
今天突然有时间继续解决,竟然让我蒙对了。服务器
第一步:经过 fiddler + postman 转lr脚本的方式,看看是否是我写的脚本有问题。问题依然存在。socket
第二步:使用 tcpdump 抓包因为本人不会使用tcpdump看报文,没办法只能安装 wireshark 类工具查看。悲剧又开始了凭着老经验自认为win10上装不上wireshark,在win7虚拟机上安装,各类vc库报错。没办法在win10上安装了一下,竟然成功了。tcp
第三步:开始抓包,先用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;