Windows server 2008 Active Directory: 2k8beta.com
IIS 7 on Windows server 2008 R2: kerbtree.2k8beta.com (是 2k8beta.com 的域成员服务器)
从 Start > Administrative Tools > Internet Information Service (IIS) manager 打开 IIS 管理器,打开所需要管理的网站的 Authentication 页面:
默认情况下,网站都是只开启了匿名认证(Anonymous Authentication),现在关闭匿名认证,并开启 Windows Authentication:
选中 Windows Authentication,点击窗口右侧的 Providers 链接,在弹出的对话框中确认 Negotiate 在 NTLM 之前。Negotiate 身份认证提供者会首先尝试使用 Kerberos 认证方式,如果认证失败,就会使用 NTLM认证。
接下来要为用户所要访问的网站注册服务主体名(SPN)。如果该 IIS 网站只会使用它所在的服务器的名称访问(如:http://server-name 或 http://server-name.domain.com),那么就不需要创建额外的 SPN,因为在 AD 中该 SPN 已经注册到了服务器的账号下。如果网站的地址与服务器的主机名不相同,或者你在构建一个使用负载均衡的 webfarm,那么你就需要创建额外的 SPN 到服务或用户账户下。
假如我用有个 webfarm,这时我们最好创建一个独立的 AD 账户,然后将 SPN 绑定到该账户下。然后 Web 站点对应的应用程序池(Application Pool)就可以使用该 AD 账户启动。现在,我们在 2k8beta.com 的域控制器中添加一个用户(用户名随意),例如 iis_tree,假设 Web 站点将会使用如下方式访问:
http://kerbtree
http://kerbtree.2k8beta.com
那么我们可以通过如下命令设置 SPN:
setspn /s HTTP/kerbtree 2k8beta\iis_tree
setspn /s HTTP/kerbtree.2k8beta.com 2k8beta\iis_tree
这样,当用户访问这些站点时,我们就已经允许 2k8beta\iis_tree 这个账户来解密 Kerberos 票据(tickets),并认证会话。可以使用 setspn /l iis_tree 命令来查看该账号下注册的 SPN。如果相同的 SPN 被域中不同的 entries 在使用,那么 Kerberos 就不能正确的工作。可以使用 setspn -x 来检测域中是否有相同的 SPN
在 IIS 管理器中,选择你的 Web 站点使用的应用程序池 (Application Pool),本实验中,我们使用 DefaultAppPool,点击窗口右侧的 Advanced Settings 链接,在弹出的窗口中修改 Identity 使用 Custom account,并填写 2k8beta\iis_tree 用户及其密码:
然后再回到 IIS 管理器,选中你的站点,然后打开配置编辑器 Configuration Editor:
在下拉框中选择: system.webServer > security > authentication > windowsAuthentication:
然后将 useAppPoolCredentials 的值设置为 True:
这样我们就允许 IIS 使用域账户来解密从客户端发送来的票据,接下来我们在命令行运行 iisreset 将 IIS 服务重启(可能需要以 run as administrator 的方式运行),配置完毕:
现在可以测试 Kerberos 配置了,用域账户登录到一台客户端,打开 IE 或 Chrome 访问, http://kerbtree.2k8beta.com,通常你会发现并没有透明认证成功,而是弹出了输入用户名和密码的对话框。因为在IE 中还要进行设置,要将网站加入信任列表,同时还要在 Custom level 中开启: Automatic logon with current user name and password 选项(可能需要使用 run as administrator 方式来运行IE 进行设置):
再次尝试认证,如果还是没有成功的话,建议将 Local Intranet 下的 Custom level > Automatic logon with current user name and password 也开启,应该就可以认证成功。
对于 Firefox 浏览器,可以进行如下设置:打开 Firefox,在地址栏中输入 about:config,在 search 框中输入 negotiate,在列出的选项中,双击 network.negotiate-auth.trusted-uris,将其值改为 .2k8beta.com 或 .com 即可: