一、开发环境搭建
开发环境要求:WIN7操作系统,XP下情自行用虚拟机模拟WIN7环境
1)安装Windows Tookit开发包, 安装完成后打开Image Configuration Editor 如果左侧distribution share为空,请先导入PACKAGE,File-Import-Inport Package.
二、创建一个WES 7(Windows Embedded Standard 7简称,以下同)的Image
首先在左侧选择我们所需要的组件,
注意:
1)如果想把硬件驱动程序打包,请先将其转化为INF文件。
2)有些组件是互斥的,即:只能2选1
3)启用磁盘保护功能EWF请参考:http://blog.csdn.net/meiyuli/article/details/7645856
三、验证是否添加正确
Validate-Validate Only 系统会检查是否正确选择了组件,下方会有错误提示。如果缺少依赖组件,请选择Validate-Add Required Package
四、生成Image
最后从TOOL-Create Media-Create IBW Image from answer File
本文链接
什么是CDN这里就不多说了。请看前面的CDN博文。今天再次讲下CDN,如题。主要是后者——CDN的网络架构 。这里拿Client正常访问WEB服务器来做个比较,看下正常访问过程:
1) 用户向浏览器提供要访问的域名;
2) 通过一连串的DNS解释得到此域名对应的IP地址;
3) 浏览器使用所得到的IP地址,域名的服务主机发出数据访问请求;
4) 浏览器根据域名主机返回的数据显示网页的内容。
通过以上四个步骤,浏览器完成从用户处接收用户要访问的域名到从域名服务主机处获取数据的整个过程。CDN网络是在用户和服务器之间增加Cache层,如何将用户的请求引导到Cache上获得源服务器的数据,主要是通过接管DNS实现,下面让我们看看访问使用CDN缓存后的网站的过程:
1) 用户向浏览器提供要访问的域名;
2) 浏览器调用域名解析库对域名进行解析,由于CDN对域名解析过程进行了调整,所以解析函数库一般得到的是该域名对应的CNAME记录,为了得到实际IP地址,浏览器需要再次对获得的CNAME域名进行解析以得到实际的IP地址;在此过程中,使用的全局负载均衡DNS解析,如根据地理位置信息解析对应的IP地址,使得用户能就近访问。
3) 此次解析得到CDN缓存服务器的IP地址,浏览器在得到实际的IP地址以后,向缓存服务器发出访问请求;
4) 缓存服务器根据浏览器提供的要访问的域名,通过Cache内部专用DNS解析得到此域名的实际IP地址,再由缓存服务器向此实际IP地址提交访问请求;
5) 缓存服务器从实际IP地址得得到内容以后,一方面在本地进行保存,以备以后使用,二方面把获取的数据返回给客户端,完成数据服务过程;
6) 客户端得到由缓存服务器返回的数据以后显示出来并完成整个浏览的数据请求过程。
通过以上的分析我们可以得到,为了实现既要对普通用户透明(即加入缓存以后用户客户端无需进行任何设置,直接使用被加速网站原有的域名即可访问),又要在为指定的网站提供加速服务的同时降低对ICP的影响,只要修改整个访问过程中的域名解析部分,以实现透明的加速服务,下面是CDN网络实现的具体操作过程。
1) 作为ICP,只需要把域名解释权交给CDN运营商,其他方面不需要进行任何的修改;操作时,ICP修改自己域名的解析记录,一般用cname方式指向CDN网络Cache服务器的地址。
2) 作为CDN运营商,首先需要为ICP的域名提供公开的解析,为了实现sortlist,一般是把ICP的域名解释结果指向一个CNAME记录;
3) 当需要进行sorlist时,CDN运营商可以利用DNS对CNAME指向的域名解析过程进行特殊处理,使DNS服务器在接收到客户端请求时可以根据客户端的IP地址,返回相同域名的不同IP地址;
4) 由于从cname获得的IP地址,并且带有hostname信息,请求到达Cache之后,Cache必须知道源服务器的IP地址,所以在CDN运营商内部维护一个内部DNS服务器,用于解释用户所访问的域名的真实IP地址;
5) 在维护内部DNS服务器时,还需要维护一台授权服务器,控制哪些域名可以进行缓存,而哪些又不进行缓存,以免发生开放代理的情况。
CDN网络架构:
本文链接
问题简介
KRB_AP_ERR_MODIFIED是一种常见的 Kerberos 认证失败消息。意思是在服务器上客户端发送加密的 Kerberos 身份验证数据没有被正确解密。当 Kerberos客户端为某服务请求票据时,通过SPN标识该服务,KDC授予客户端通过服务密钥加密的服务票据。通常情况下是与SPN匹配的AD帐户的密码。
有些时候KDC可能会生成一个通过错误的账号信息加密的服务票据。当客户端提供该票据到服务端认证时,该服务不能解密,身份验证失败,报错KRB_AP_ERR_MODIFED。
换句话说,因为KDC发出票证使用A帐户的密码进行加密,但在服务方尝试用B帐户的密码解密。
通常情况下造成这种问题有这么几种原因,
- 重复的SPN
- 错误的DNS设置
- 不同的域中的两台计算机具有相同名称
- 客户端请求了错误的SPN
- IIS(内核/用户模式身份验证)设置错误
问题调试
数据收集工具
- 注册表
- KList (Windows2008及以上自带)
- ipconfig
- Network Monitor
数据收集步骤
- 在客户端计算机上启用 Kerberos日志。如何启用 Kerberos 事件日志记录
- 用管理员权限打开命令控制台,运行"klist purge"清除缓存的Kerberos票据。
- 运行"ipconfig /flushdns"要清除DNS缓存。
- 客户端和web服务器上的运行Network Monitor。
- 重现该问题。
- Network Monitor抓包
定位Kerberos错误
通过展开IIS返回的HTTP响应标头中的Authenticate字段,可以找到Kerberos身份验证错误的原因。
ProtocolVersion: HTTP/1.1
StatusCode: 401, Unauthorized
Reason: Unauthorized
…
- WWWAuthenticate: Negotiate …
- Authenticate: Negotiate
oWwwaqADCgEBomMEYWBfBgkqhkiG9xIBAgIDAH5QME6gAwIBBaEDAgEepBEYDzIwMTExMDE0MDUxMDE0WqUFAgMG362mAwIBKakKGwhURVN
ULkNPTaoXMBWgAwIBAaEOMAwbCmNvbnRvc29zdmM=
WhiteSpace:
- NegotiateAuthorization:
Scheme: Negotiate
- GssAPI: 0x1
- NegotiationToken:
- ChoiceTag:
- NegTokenResp:
- ResponseToken: 0x1
- KerberosToken: 0x1
- KerberosInitToken:
…
- InnerContextToken: 0x1
- KerberosToken: 0x1
TokId: Krb5Error (0x300)
- Error: KRB_ERROR (30)
….
+ ErrorCode: KRB_AP_ERR_MODIFIED (41)
+ Realm: TEST.COM
+ Sname: contososvc
Date: Fri, 14 Oct 2011 05:10:14 GMT
ContentLength: 341
如果通过Wireshark抓包错误更明显。
从客户端系统事件日志,可以看到以下事件。
Source: Microsoft-Windows-Security-Kerberos
Date: 10/13/2011 10:10:05 PM
Event ID: 4
Task Category: None
Level: Error
Keywords: Classic
User: N/A
Computer: IIS02.test.com
Description:
The Kerberos client received a KRB_AP_ERR_MODIFIED error from the server contososvc. The target name used was HTTP/iis01.test.com. This indicates that the target server failed to decrypt the ticket provided by the client. This can occur when the target server principal name (SPN) is registered on an account other than the account the target service is using. Please ensure that the target SPN is registered on, and only registered on, the account used by the server. This error can also happen when the target service is using a different password for the target service account than what the Kerberos Key Distribution Center (KDC) has for the target service account. Please ensure that the service on the server and the KDC are both updated to use the current password. If the server name is not fully qualified, and the target domain (TEST.COM) is different from the client domain (TEST.COM), check if there are identically named server accounts in these two domains, or use the fully-qualified name to identify the server.
根据该日志信息,SPN为HTTP/iis01.test.com,用来解密的账号为contososvc,发生Kerberos认证错误的原因时加密票据的账号不是contososvc。
造成该问题可能的情况如下,
第一种情况:重复的 SPN
重复的SPN是说相同的SPN注册在至少两个帐户上。例如,对两个帐户注册SPN:A和B。KDC可能用A帐户的密码加密服务票据,当在服务端身份验证时,该服务可能实际是账户B,通过账户B信息解密就会报错.
通过setspn工具检测重复SPN
Windows 2008及以上版本的系统,本身提供setspn可以用来检测重复SPN。
除了HTTP/SPN,也要检查Host/SPN。如果HTTP/SPN不存在HOST/SPN将作为默认SPN。错误的HOST/SPN同样会导致Kerberos认证失败。
以下是setspn的关于Windows Server 2008 SP2提供示例输出。
通过ldifde查找重复SPN
Windows 2003 和 XP,我们可以使用ldifde工具搜索重复SPN。以下是HTTP/contoso的示例。
SPN是目录林范围(forrest-wide)的对象,它必须在整个域内唯一。对于复杂的环境中,使用按照命令要搜索整个森林,像这样:
Ldifde -s GCName -t 3268 -f d:\spn.ldf -d "dc=test, dc=com" –l ServicePrincipleName –r "(ServicePrincipalName=HTTP/contoso)"
此外,我们可以使用通配符搜索:
Ldifde -s GCName -t 3268 –f d:\spn.ldf -d "dc=test, dc=com" -l servicePrincipalName -r (servicePrincipalName=*contoso*)
第二种情况:客户端发送错的SPN请求票据
定位问题
这种情况与客户端行为相关。如果Web站点使用CNAME资源记录在域名系统(DNS)中,将出现此问题。
例如,DNS 设置如下所示:
Contoso CNAME iis01.test.com
iis01.test.com A 10.0.5.2
使用IE浏览器访问 Web 站点时,IE浏览器使用服务器的主机名(IIS01)而不是CNAME(Contoso)与服务器联系。身份验证可能会失败,报错KRB_AP_ERR_MODIFIED。
HTTP/Contoso.test.com test\contososvc
HOST/IIS01.test.com test\iis01(machine account)
Network Monitor跟踪失败请求
IE 发送请求到http://contoso,发送contoso的DNS查询。
+ Udp: SrcPort = 64506, DstPort = DNS(53), Length = 42
- Dns: QueryId = 0x4BB1, QUERY (Standard query), Query for contoso.test.com of type Host Addr on class Internet
Contoso的DNS响应
+ Udp: SrcPort = DNS(53), DstPort = 64506, Length = 78
- Dns: QueryId = 0x4BB1, QUERY (Standard query), Response - Success, 49, 0
QueryI