以Matrix的Blog为例,截取其中的认证过程进行分析(注意,本文中使用的cookie值已经被处理过,呵呵,别想干坏事握)
测试环境:
域:mydomain.com
域主机:davidturing.mydomain.com
域用户:davidturing@mydomain.com
代理服务器:proxyserver.mydomain.com
1) 登陆Windows域(mydomain.com),用户名为davidturing
2) 打开IE窗口,URL=http://www.matrix.org.cn/blog/cas/,由于公司使用了ProxyServer,员工必须通过ProxyServer才能上网。
于是,IE Client就向Proxyserver请求访问Matrix Blog。
3) Proxy认证使用了NTLM,对IE Client进行认证。
于是,IE(Client)就和ProxyServer(Server)执行下面的三次握手的认证过程。
1: C --> S GET ...
2: C <-- S 401 Unauthorized
WWW-Authenticate: NTLM
3: C --> S GET ...
Authorization: NTLM
4: C <-- S 401 Unauthorized
WWW-Authenticate: NTLM
5: C --> S GET ...
Authorization: NTLM
6: C <-- S 200 Ok
需要指出,NTLM只是两种Windows认证方式中的一种,Kerberos是另外一种,而且更有名,我会为Kerberos认证再写一篇Blog:)
4) 握手的过程被我Sniffer了下来,如下文所示:
/******************
Client->ProxyServer:
******************/
GET http://www.matrix.org.cn/blog/cas HTTP/1.0
Accept: image/gif, image/x-xbitmap, image/jpeg, image/pjpeg, application/vnd.ms-excel, application/vnd.ms-powerpoint, application/msword, application/x-shockwave-flash, */*
Accept-Language: zh-cn,en;q=0.8,zh;q=0.5,zh-tw;q=0.3
Cookie: user=cas%3A%3AAq3HtCAsqNlhY%3A%3A1; matrix_user_cookie=Y2FzfDgzMzM4MURELTk17UStMUU4MS05OTJDLTJERDM4RERGNkUyRg==
User-Agent: Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.0; Maxthon; .NET CLR 2.0.50215)
Host: www.matrix.org.cn
Proxy-Connection: Keep-Alive
{分析:注意,这是一个很简单的HTTP GET请求,无非是想请求www.matrix.org.cn /blog/cas这张页面}
/******************
ProxyServer-> Client:
******************/
HTTP/1.1 407 Proxy Authentication Required ( The ISA Server requires authorization to fulfill the request. Access to the Web Proxy service is denied. )
Via:1.1 PROXYSERVER
Proxy-Authenticate: NTLM
Proxy-Authenticate: Kerberos
Proxy-Authenticate: Negotiate
Connection: Keep-Alive
Proxy-Connection: Keep-Alive
Pragma: no-cache
Cache-Control: no-cache
Content-Type: text/html
Content-Length: 2372
......返回给客户端的HTTP实体,提示页面内容被省略......
{分析:接着,ProxyServer要求我提供认证信息,注意,HTTP 407代码的含义是类似于401,表示客户必须先经过代理服务器的授权。我们还可以看到,Proxy-Authenticate字段里面包含了NTLM,Kerberos,表明可以通过客户端来Negotiate再决定使用两者中的一种}
/******************
Client->ProxyServer:
******************/
GET http://www.matrix.org.cn/blog/cas HTTP/1.0
Accept: image/gif, image/x-xbitmap, image/jpeg, image/pjpeg, application/vnd.ms-excel, application/vnd.ms-powerpoint, application/msword, application/x-shockwave-flash, */*
Accept-Language: zh-cn,en;q=0.8,zh;q=0.5,zh-tw;q=0.3
Cookie: user=cas%3A%3AAq3HtCAsqNlhY%3A%3A1; matrix_user_cookie=Y2FzfDgzMzM4MURELTk17UStMUU4MS05OTJDLTJERDM4RERGNkUyRg==
User-Agent: Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.0; Maxthon; .NET CLR 2.0.50215)
Host: www.matrix.org.cn
Proxy-Connection: Keep-Alive
Proxy-Authorization: NTLM TlRMTVNTUAABAAAAB4IAogAAAAAAAAAAAA
AAAAAAAAAFAJMIAAAAD2==
{分析:
这里,客户端将自己的NTLM代码发送给服务器,里面包含了一些自己的域帐号发送给ProxyServer,ProxyServer就可以知道用户是谁,然后去域服务器取出用户的域密码,加密一个随机字符串去Challenge用户(见下文)。
在NTLM中,这是三次握手的"第一手"(Type1 Message),目的是Client告诉Server两样东西:
hoststring:即client的主机名(比如davidturing)
domainstring:即client在域中的名(比如davidturing.mydomain.com)
Proxy-Authorization的信息结构如下
0 1 2 3
+-------+-------+-------+-------+
0: | 'N' | 'T' | 'L' | 'M' |
+-------+-------+-------+-------+
4: | 'S' | 'S' | 'P' | 0 |
+-------+-------+-------+-------+
8: | 1 | 0 | 0 | 0 |
+-------+-------+-------+-------+
12: | 0x03 | 0xb2 | 0 | 0 |
+-------+-------+-------+-------+
16: | domain length | domain length |
+-------+-------+-------+-------+
20: | domain offset | 0 | 0 |
+-------+-------+-------+-------+
24: | host length | host length |
+-------+-------+-------+-------+
28: | host offset | 0 | 0 |
+-------+-------+-------+-------+
32: | host string |
+ +
. .
. .
+ +-----------------+
| | domain string |
+-------------+ +
. .
. .
[如果数据图显示的太丑,可以参考:
http://www.innovation.ch/java/ntlm.html
]
由于截取的信息经过BASE64处理,所以,你不可能肉眼从Proxy-Authorization值中判断出主机名和主机域名:)
}
/******************
ProxyServer-> Client:
******************/
HTTP/1.1 407 Proxy Authentication Required ( ¾Ü¾ø•ÃÎÊ¡£ )
Via:1.1 PROXYSERVER
Proxy-Authenticate:
NTLM TlRMTVNTUAACAAAAGAAYADgAAAAFgoGikmfj
JzhsTW0AAAAAAAAAAIoAigBQAAAABQCTCAAA
AA9IAE4ASQBTAEkALgBDAE8ATQAuAEMATgAC
ABgASABOAEkAUwBJAC4AQwBPAE0ALgBDAE4A
AQAWAFAAUgBPAFgAWQBTAEUAUgBWAEUAUgA
EABgAaABuAGkAcwBpAC4AYwBvAG0ALgBjAG4A
AwAwAHAAcgBvAHgAeQBzAGUAcgB2AGUAcgAuA
GgAbgBpAHMAaQAuAGMAbwBtAC4AYwBuAAAAA
AA=
Connection: Keep-Alive
Proxy-Connection: Keep-Alive
Pragma: no-cache
Cache-Control: no-cache
Content-Type: text/html
Content-Length: 0
{分析:这个步骤中,ProxyServer回应我的IE一个Proxy-Authorization,其值就是上面那段很长的字符,这是一个authcode,目的是Chanllenge客户端(IE)。Chanllenge是对客户端的一种身份挑战,好比方,你说你是张三,OK,服务器用张三的密码加密一段咚咚,你能告诉服务器这段咚咚是什么,服务器就相信你了。
这条type-2 Message是的三次握手的第二握。
0 1 2 3
+-------+-------+-------+-------+
0: | 'N' | 'T' | 'L' | 'M' |
+-------+-------+-------+-------+
4: | 'S' | 'S' | 'P' | 0 |
+-------+-------+-------+-------+
8: | 2 | 0 | 0 | 0 |
+-------+-------+-------+-------+
12: | 0 | 0 | 0 | 0 |
+-------+-------+-------+-------+
16: | message len | 0 | 0 |
+-------+-------+-------+-------+
20: | 0x01 | 0x82 | 0 | 0 |
+-------+-------+-------+-------+
24: | |
+ server nonce |
28: | |
+-------+-------+-------+-------+
32: | 0 | 0 | 0 | 0 |
+-------+-------+-------+-------+
36: | 0 | 0 | 0 | 0 |
+-------+-------+-------+-------+
里面包含了server nounce值,这个值就是Challenge了。我们需要
根据这个8字节的随机数构造type-3 message。
}
/******************
Client->ProxyServer:
******************/
GET http://www.matrix.org.cn/blog/cas HTTP/1.0
Accept: image/gif, image/x-xbitmap, image/jpeg, image/pjpeg, application/vnd.ms-excel, application/vnd.ms-powerpoint, application/msword, application/x-shockwave-flash, */*
Accept-Language: zh-cn,en;q=0.8,zh;q=0.5,zh-tw;q=0.3
Proxy-Authorization:
NTLM TlRMTVNTUAADAAAAGAAYAJIAAAAYABgAqgA
AABgAGABIAAAAGAAYAGAAAAAaABoAeAAAA
AAAAADCAAAABYKAogUAkwgAAAAPaABuAGk
AcwBpAC4AYwBvAG0ALgBjAG4AaAB1AGEAbg
BnAHoAaABhAG8AcQBpAG4ASABVAEEATgBHA
FoASABBAE8AUQBJAE4AMQCGRQ1i+bZleAs2A
kgEXS/CfJ3oOrsi6prctAW2HyADaWwbNqmpO1
Eptq7yJUh4SXd=
User-Agent: Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.0; Maxthon; .NET CLR 2.0.50215)
Host: www.matrix.org.cn
Proxy-Connection: Keep-Alive
Cookie: user=cas%3A%3AAq3HtCAsqNlhY%3A%3A1; matrix_user_cookie=Y2FzfDgzMzM4MURELTk17UStMUU4MS05OTJDLTJERDM4RERGNkUyRg==
{分析:OK,这里就是IE客户端响应ProxyServer的Chanllenge,上面的NTLM=TIRMT….就是Challenge回应码,如果这段代码正确,ProxyServer就承认用户的身份,就可以让他到访问外网资源。
分析一下这个type-3 Message,它的结构如下:
0 1 2 3
+-------+-------+-------+-------+
0: | 'N' | 'T' | 'L' | 'M' |
+-------+-------+-------+-------+
4: | 'S' | 'S' | 'P' | 0 |
+-------+-------+-------+-------+
8: | 3 | 0 | 0 | 0 |
+-------+-------+-------+-------+
12: | LM-resp len | LM-Resp len |
+-------+-------+-------+-------+
16: | LM-resp off | 0 | 0 |
+-------+-------+-------+-------+
20: | NT-resp len | NT-Resp len |
+-------+-------+-------+-------+
24: | NT-resp off | 0 | 0 |
+-------+-------+-------+-------+
28: | domain length | domain length |
+-------+-------+-------+-------+
32: | domain offset | 0 | 0 |
+-------+-------+-------+-------+
36: | user length | user length |
+-------+-------+-------+-------+
40: | user offset | 0 | 0 |
+-------+-------+-------+-------+
44: | host length | host length |
+-------+-------+-------+-------+
48: | host offset | 0 | 0 |
+-------+-------+-------+-------+
52: | 0 | 0 | 0 | 0 |
+-------+-------+-------+-------+
56: | message len | 0 | 0 |
+-------+-------+-------+-------+
60: | 0x01 | 0x82 | 0 | 0 |
+-------+-------+-------+-------+
64: | domain string |
+ +
. .
. .
+ +-------------------+
| | user string |
+-----------+ +
. .
. .
+ +-------------+
| | host string |
+-----------------+ +
. .
. .
+ +---------------------------+
| | LanManager-response |
+---+ +
. .
. .
+ +------------------+
| | NT-response |
+------------+ +
. .
. .
+-------+-------+-------+-------+
domain string: 主机域名(如davidturing.mydomain.com)
user string:用户名(davidturing)
LanManager-response: 类DES的散列处理
NT-response:MD4散列处理
详情可参考:
http://samba.kn.vutbr.cz/samba/docs/man/Samba-Developers-Guide/pwencrypt.html
}
/******************
ProxyServer-> Client:
******************/
HTTP/1.1 301 Moved Permanently
Via: 1.1 PROXYSERVER
Connection: Keep-Alive
Proxy-Connection: Keep-Alive
Content-Length: 158
Date: Wed, 21 Sep 2005 03:44:57 GMT
Location: http://www.matrix.org.cn/blog//cas/
Content-Type: text/html
Server: Microsoft-IIS/6.0
Object Moved
This document may be found here
{分析:很明显,ProxyServer已经承认了我的身份,并让我访问Matrix了。这里有一个小插曲,Matrix做了重定向(熟悉HTTP协议的人应该知道HTTP 301表示move permanetly,即客户请求的文档在其他地方,新的URL在Location头中给出,浏览器应该自动地访问新的URL。)比如,如果我们直接访问http://www.matrix.org.cn/blog//cas/,服务器会IE重定向到http://61.142.81.140:9703/blog/cas/,你在页面上不会察觉到这一点。Chris估计是想做备份吧?Blog这东西经常出问题。}
到此,我们已经通过了Proxy认证了,下面的通讯的Traffic我就不想说了,反正就是先取HTML网页,再取网页的Style.css,有一个先后顺序,大家不必关心了。
/******************
Client->ProxyServer:
******************/
GET http://www.matrix.org.cn/blog//cas/ HTTP/1.0
Accept: image/gif, image/x-xbitmap, image/jpeg, image/pjpeg, application/vnd.ms-excel, application/vnd.ms-powerpoint, application/msword, application/x-shockwave-flash, */*
Accept-Language: zh-cn,en;q=0.8,zh;q=0.5,zh-tw;q=0.3
If-Modified-Since: Mon, 19 Sep 2005 03:19:14 GMT
User-Agent: Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.0; Maxthon; .NET CLR 2.0.50215)
Host: www.matrix.org.cn
Proxy-Connection: Keep-Alive
If-None-Match: "ea7c9ee9c8bcc51:10a4"
Cookie: user=cas%3A%3AAq3HtCAsqNlhY%3A%3A1; matrix_user_cookie=Y2FzfDgzMzM4MURELTk17UStMUU4MS05OTJDLTJERDM4RERGNkUyRg==
/******************
ProxyServer-> Client:
******************/
HTTP/1.1 200 OK
Via: 1.1 PROXYSERVER
Connection: Keep-Alive
Proxy-Connection: Keep-Alive
Content-Length: 36149
Date: Wed, 21 Sep 2005 03:44:57 GMT
Content-Location: http://www.matrix.org.cn/blog//cas/index.html
Content-Type: text/html
Server: Microsoft-IIS/6.0
Last-Modified: Tue, 20 Sep 2005 14:29:13 GMT
Accept-Ranges: bytes
ETag: "4a5cbacefbdc51:10ce"
....页面内容被省略.........
/******************
Client->ProxyServer:
******************/
GET http://www.matrix.org.cn/blog/cas/styles-site.css HTTP/1.0
Accept: */*
Referer: http://www.matrix.org.cn/blog//cas/
Accept-Language: zh-cn,en;q=0.8,zh;q=0.5,zh-tw;q=0.3
Proxy-Connection: Keep-Alive
If-Modified-Since: Sat, 13 Aug 2005 13:23:57 GMT
If-None-Match: "3cea6142aa0c51:10a4"
User-Agent: Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.0; Maxthon; .NET CLR 2.0.50215)
Host: www.matrix.org.cn
Cookie: user=cas%3A%3AAq3HtCAsqNlhY%3A%3A1; matrix_user_cookie=Y2FzfDgzMzM4MURELTk17UStMUU4MS05OTJDLTJERDM4RERGNkUyRg==
/******************
ProxyServer-> Client:
******************/
HTTP/1.1 200 OK
Via: 1.1 PROXYSERVER
Connection: Keep-Alive
Proxy-Connection: Keep-Alive
Content-Length: 5379
Date: Wed, 21 Sep 2005 03:44:57 GMT
Content-Type: text/css
Server: Microsoft-IIS/6.0
Last-Modified: Sat, 13 Aug 2005 13:23:57 GMT
Accept-Ranges: bytes
ETag: "3cea6142aa0c51:10ce"
body {
margin:0px 0px 20px 0px;
background:#FFF;
}
A { color: #003366; text-decoration: underline; }
A:link { color: #003366; text-decoration: underline; }
.....styles-site.css内容被省略 .....
padding-right:15px;
padding-top:5px;
padding-bottom:5px;
}
分享到:
相关推荐
NTLM认证是一种挑战/响应认证机制,允许客户端和服务器端之间的通信基于用户的Windows域账户进行身份验证。 从提供的文件内容来看,实现获取Windows登录用户名的操作大致可以分为以下步骤: 1. 使用`session_start...
4. 设置代理身份验证:如果代理服务器需要身份验证,可能需要使用`HttpAddRequestHeaders`函数添加相应的授权头信息,如基本认证或NTLM认证。 5. 发送HTTP请求:调用`HttpSendRequest`函数发送请求到服务器。在这个...
- **定义**: Kerberos是一种基于“票证”的认证协议,广泛应用于大数据领域。 - **结构**: 包括KDC(密钥分发中心)、AS(身份验证服务)、TGS(票据授权服务)以及Account Database(账户数据库)等组成部分。 - **...
4. **NTLM支持**:它支持NT LAN Manager身份验证,实现单一登录功能。 5. **SOAP层功能**:Web服务是基于ASP.NET的,由IIS托管,使用HTTP协议。它支持SSL连接以确保安全性,同时提供基于角色的授权。 创建SAP Web...
2. 认证与授权:Apache提供多种认证机制,如Basic、Digest和NTLM,以及基于文件、数据库或外部程序的授权策略,确保只有授权用户能访问特定资源。 3. 防火墙和入侵检测:配合防火墙规则和入侵检测系统,可以提高...
此外,Apache还支持基本认证、摘要认证、NTLM认证等多种身份验证机制,以及访问控制列表(ACL)和防火墙规则,确保了服务器的访问安全。 在性能优化上,Apache 2.4引入了新的MPM(多进程模块),如Event MPM,它...
在实际应用中,这样的组合可能用于实现安全的、基于查询结果的权限管理,比如根据用户的查询结果来决定他们能访问哪些资源。 对于CAS服务器来说,理解SPNEGO的支持意味着你需要了解Kerberos和NTLM身份验证的工作...
- `--auth-type=ATYPE`: 设置HTTP认证类型(基本、摘要或NTLM)。 - `--auth-cred=ACRED`: 提供HTTP认证凭据(用户名:密码)。 - `--auth-cert=ACERT`: 使用HTTP认证证书。 - `--proxy=PROXY`: 通过HTTP代理连接...
此外,还有更强的认证机制,如Basic、Digest和NTLM,以及强化的权限控制。 4. **URL重写**:通过`mod_rewrite`模块,Apache v2.2可以实现URL重写,这在SEO优化和创建友好的URL结构方面非常有用。 5. **MIME类型...
`curl` 支持多种认证机制,包括HTTP基本认证、NTLM、digest等。可以使用`-u`或`--user`参数提供用户名和密码。 9. **代理支持** 如果需要通过代理访问网络,可以使用`-x`或`--proxy`参数设置代理服务器。 10. **...
1. 虚拟主机:Apache 2.2支持基于IP、域名或端口的虚拟主机,这使得一台服务器可以托管多个独立的网站。 2. 访问控制:通过设置Allow、Deny和Order指令,可以控制哪些IP地址或网络段可以访问服务器。 3. 日志管理...
5. **Authentication and Proxy Support**:HttpClient 4.1.1 支持多种认证机制,如Basic、Digest、NTLM等,同时也支持通过代理服务器进行通信,这使得它能在各种网络环境中正常工作。 6. **Redirect Handling**:...
- mod_auth模块提供基本、摘要、NTLM和Digest等多种认证方式。 5. **日志记录**: - Apache2.0可以生成访问日志和错误日志,通过`CustomLog`和`ErrorLog`指令自定义日志位置和格式。 - `LogFormat`允许创建...
2. **用户认证**:Apache提供了多种身份验证机制,如Basic、Digest和NTLM,允许服务器控制哪些用户可以访问特定的资源。它还支持通过.htaccess文件进行授权,使得网站管理员可以在目录级别设置访问控制。 3. **模块...
13. **安全性认证**:Apache 2.0支持多种身份验证机制,如Basic、Digest、NTLM等,可以通过mod_authn系列模块进行配置,确保只有授权用户可以访问受保护的资源。 14. **SSL/TLS加密**:Apache 2.0通过mod_ssl模块...
WCAT的一个独特之处在于它支持各种认证机制,如NTLM和SSL,以及HTTP/1.0和HTTP/1.1版本的协议,使其成为全面测试Web服务器的理想选择。 ### 4. fwptt fwptt是另一款用于Web应用性能测试的工具,它不仅能够测试静态...
6. Basic, Digest, NTLMv1, NTLMv2, NTLM2 Session, SNPNEGO/Kerberos认证方案。 7. 插件式的自定义认证方案。 8. 便携可靠的套接字工厂使它更容易的使用第三方解决方案。 9. 连接管理器支持多线程应用。支持设置...