接收一個性能測試任務,各類緣由須要使用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;