一、什么是NTLM协议
NTLM协议是一种网络认证协议,该协议是微软针对LAN Manager Challenge/Reponse(简称LM)验证机制容易被破解的问题,提出的Windows NT挑战/响应验证机制(简称NTLM),NTLM协议用于Window相关应用的身份认证。
MTLM分NTLM v1和NTLM v2两个版本,两个版本协议的区别在于挑战码和加密算法不同。NTLM v1的挑战码有8位,NTLM v2的挑战码有16位;NTLM v1的主要加密算法是DES,NTLM v2的主要加密算法是MD5。以最新的NTLM v2为例,其认证的基本流程如下。
二、通过抓包看NTLM认证流程
常规的身份认证请求通常为Post请求,NTLM的认证请求为get请求。本文以配置管理软件TFS登录为例说明NTLM的认证流程,TFS登录从打开登录页面到登录完成包含3个get请求,使用Fiddler抓包内容如下。
1)打开登录页面时,客户端向服务端发送get请求,服务端返回的http状态码为401,并返回支持的WWW-Authenticate认证头给客户端。
2)客户端受到服务器的响应后,得知其支持NTLM认证协议后,发送一个新的get请求,请求的头部增加了“Authorization: Negotiate”相关字段,字段中包含了用户身份信息经Base64编码后的字符串。这串文本信息会被传递到服务端安全认证的相关接口,生成挑战码,并返回到客户端,此时服务端返回的状态码仍为401。
3)客户端使用其密码散列加密服务端返回的挑战码得到另一个散列值,并再次发起get请求到服务端,请求头中含有经Base64编码的散列值,服务端接受到请求后,将服务端生成的散列值与客户端发来的散列值进行对比,如值相等,则认证通过,返回200的状态码。
三、NTLM认证压测实战
Jmeter中没有专门支持NTLM协议的取样器,但可通过添加HTTP Header Manager或HTTP Authorization Manager的方式来实现NTLM认证,但由于添加Http Header Manager需要了解Authorization头的详细构造过程,并需借助Beanshell PreProcessor等组件生成Authorization头,实际操作比较复杂。因此,通常通过添加HTTP Authorization Manager来编写NTML协议认证脚本并进行压测。
1.HTTP Authorization Manager
HTTP Authorization Manager如下图所示。
Base URL:需要使用认证页面的URL,可不填
Username:应用登录的用户名,必填
Password:用户登录用户的密码,必填
Domainm:身份认证页面所在的域,必填
Realm:Realm字符串,可不填
Mechanism:Jmeter的http授权管理器提供的认证机制,Jmeter5.1中认证机制包括BASIC_DIGEST,BASIC,DIGEST,KERBEROS四种,必填。
2.压力测试步骤
1)添加HTTP请求
实际测试中,无需添加两次get请求,只需要添加一次get请求即可完成认证。
2)添加并设置HTTP Authorization Manager
TFS登录的测试中,需注意用户名填写时不能带域名,域名需单独在Domain栏填写,Mechanism选DIGEST。此外,不同的应用需要根据服务端HTTP的授权认证机制选择不同的Mechanism值,脚本调试时需要进行实测,如Tomcat相关的应用通常选BASIC_DIGEST。
3)运行并查看结果
版权声明:本文出自51Testing会员投稿,51Testing软件测试网及相关内容提供者拥有内容的全部版权,未经明确的书面许可,任何人或单位不得对本网站内容复制、转载或进行镜像,否则将追究法律责任。