客户端IE申请页面
GET /auth/portal/tidal HTTP/1.1
Accept: */*
Accept-Language: zh-cn
Accept-Encoding: gzip, deflate
User-Agent: Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.2; SV1; .NET CLR 1.1.4322; InfoPath.1; .NET CLR 2.0.50727; MAXTHON 2.0)
Host: domain195
Connection: Keep-Alive
服务端返回无授权回应
HTTP/1.1 401 Unauthorized
Content-Type: text/html
Server: Resion/3.1.6
WWW-Authenticate: Negotiate
Date: Sat, 10 Oct 2009 17:27:18 GMT
客户端选择Kerberos验证,发送验证票到服务端
客户端在域中,并且以域账户登录,所以客户端IE选择使用Kerberos身份验证,发送与用户的验证票到服务端。
GET /iisstart.htm HTTP/1.1
Accept: */*
Accept-Language: zh-cn
UA-CPU: x86
Accept-Encoding: gzip, deflate
User-Agent: Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.2; SV1; .NET CLR 1.1.4322; InfoPath.1; .NET CLR 2.0.50727; MAXTHON 2.0)
Host: domain195
Connection: Keep-Alive
Authorization: Negotiate YIIEzQYGKwYBBQUCoIIEwTCCBL2gJDAiBgkqhkiC9xIBAgIGCSqGSIb3EgECAgYKKwYBBAGCNwICCqKCBJMEggSPYIIEiwYJKoZIhvcSAQICAQBuggR6MIIEdqADAgEFoQMCAQ6iBwMFACAAAACjggOiYYIDnjCCA5qgAwIBBaEOGwxTWkJUSS5HT1YuQ06iFzAVoAMCAQKhDjAMGwRIVFRQGwRsb2dzo4IDaDCCA2SgAwIBF6EDAgEMooIDVgSCA1IeN8fZeLtzkw+5H8HOKmM8zgDOVL5GmeXoS8dMgE20RtI14EVWWZLn2j0AMXTqMOA550Grsadh89vZ89+6vprkVL0v49FM+gxHFCmZSOvLTIawBqXvLU6w1Pni8PN1pbhOKCRVON6+5XH4MN8Rfuqpyy1A/2gfeQIfLMMHs73yohp7h7QJP29b61jm0vj1xE0jEP7EupHlr225vrrVCnktTksbyqi88kIZlCB84J1gTqYoNeOycn4Qzvv8x6z1AsCfo2SBSwo1tj38BK2Fbu+BRXw26RrebGWPkILYwqED7bSR+RlDdokEhjubbyaWcnIjiSXZaN5kQqZQqms3iqhUrZpX7RaaV5BsMOgJs7LwYmc3uM5v7YqljwFD3T44XfpAiS3xlyirP3modOR1l+hV2xdIIFusXtRzY7rTkmEb2F3dGjTiMXySrc0GGhe3TrIeH9nB/2Udo/Z9m0ifXC0EU2fFogefmDc322vHhhv9gEYccG44Q/cnWx8gY9GfWCRihlaefGK+DmCvm+515UFYeIcG5KafXBQw3KX7MjI4/4hlAh3mQNn9p3nX0ePy1G1RRV2SToN7eg1PkaaYXDeC6MSIwCb53MfebzpyN0LKzmPZ6GneLYbyBIpANzPNoXz/LADA1h/l8F098ti1fThPVkUgoehgy1iyovTXyqJg6rojI0juIH7fKfc/UpfO+eLMhsquhH1KNjkCTD2CkdUfcsEU7B15j15p1OyGeg5/tEbRE67+NAWkfLSPp5R3tzGqjAh39w8n/8EWot9DBlHwk+qJp3rMFJZIvNtmXuvqnUW1NGpO1GIf78PBixyFwrJSo5syTfCiWIcw9YQ7MyvuyynAmsXeaI5+OP/GfmGpnvt5kMznu5q/nNf7LMV8n6x2+lmNlcPJiWr+KckPM9Nvntw2h/bl2qGnHDdOqNYI2N0VxzIm8wY6dWS3NIwlGl/usMjjebaELFP6rdHjpVG6pziJYjrBrws5DbqCxJ1EOeQdBiT8l1O6OUQqdOBVZH6/bj5MkLghWv0edHG8TJ4OGa69nMHDwTBOyuyRbTr5uWWFnESdyAGGbfGlJjuvSSzxgZViMSB2j8Ulk8x8MCqrupEK2i0UR6HrMNMJIDJsVcXTpIG6MIG3oAMCAReiga8EgazteAbcguseBpQnHeJihLFO78PfjI2Qop+MkH9jCOrvO9cQns1GzOKByoAbeP307QQq4zbaDF3EJlOC//4k4A6W4dc4k5lNeOgwR4LEvbIQKpdlljFiW8XUb+IgovsOlZEG0qFQgZY0I35I4Uvk/2dDkz06DGiDsQ0IENrRIMT4/7xgMSmkzspO2ojSbG5aKlbjK203QxMlkEoxb8WpJFZQggUqrLAr0q2graET
服务端验证通过,返回资源
HTTP/1.1 200 OK
Server: Resion/3.1.6
WWW-Authenticate: Negotiate oYGgMIGdoAMKAQChCwYJKoZIgvcSAQICooGIBIGFYIGCBgkqhkiG9xIBAgICAG9zMHGgAwIBBaEDAgEPomUwY6ADAgEXolwEWrdYWb37ROEMMnP/4vTBwSe9hVe4XklXCWqFKG16d53aBUiTEem+lrFE8ycBgSln3zme63lKfSn9UHoNTlT100T86wxllsyrrMe437ElPcxI4pgcv9rNKU9aKg==
Location http://domain195/auth/portal/tidal/
Content-Type text/html
Content-Length 73
Date: Sat, 10 Oct 2009 17:27:18 GMT
不管客户端跟服务器是否在域、也不管客户端是否以域帐号登陆,只要客户端以ip地址访问服务器,那么客户端就会选择NTLM方式验证,并且不会直接发送客户端登录用户的用户名和密码给服务器,而是会弹出一个对话框要求用户输入用户名和口令,然后发送到服务端验证。
集成 Windows 身份验证Kerberos的验证方式是 Intranet 环境中最好的身份验证方案,在这种用户拥有 Windows 域帐户,Kerberos验证不在网络上传递用户密码,只用传送一个用户验证票。NTLM要传送用户的密码,但是密码经过处理后派生出一个8字节的key加密质询码,也是比较安全的。
1. 在 Active Directory 服务器中,为运行的主机创建一个用户帐户(选择“新建”>“用户”,而不是“新建”>“计算机”)。
在创建该用户帐户时,应使用计算机的简单名称。例如,如果主机名为 domain195.hq.ctc.com,则在 Active Directory 中创建一个名为 domain195的用户。
请记录下创建用户帐户时定义的密码。在步骤 3 中将需要使用此密码。请勿选择“用户必须在下次登录时更改密码”选项,或任何其他密码选项。
此用户帐户的加密类型必须是 DES 并且必须要求进行 Kerberos 预身份验证。
在左窗格的“用户”树中,用鼠标右键单击该用户帐户的名称,然后选择“属性”。
选择“帐户”选项卡,并选中“为此帐户使用 DES 加密类型”框。确保未选中其他框,尤其不要选中“不要求进行 Kerberos 预身份验证”。
设置加密类型可能会损坏密码。因此,应重置用户密码,方法是用鼠标右键单击该用户帐户的名称,选择“重设密码”,然后重新输入之前指定的同一密码。
3. 使用 setspn 实用工具为步骤 1 中创建的用户帐户创建服务委托人名称 (SPN)。请输入下列命令:
setspn -a host/domain195.hq.ctc.com domain195 |
setspn –L account name
这是一个重要步骤。如果将同一服务链接到 Active Directory 服务器中的另一帐户,则客户端将不会向服务器发送 Kerberos 票据。
ktpass -princ host/[email protected] -pass password -mapuser domain195 -out c:\temp\domain195.keytab
6. 创建 keytab 文件。在 Windows 上,ktab 实用工具管理密钥表中的委托人名称和密钥对,并允许您列出、添加、更新或删除委托人名称和密钥对。在 UNIX 上,最好使用 ktpass 实用工具。
Windows:
在运行 WebLogic Server 的主机上运行 ktab 实用工具来创建 keytab 文件:
|
ktab -k domain195.keytab -a HTTP/[email protected] |
7. 可以通过ktab -l -k domain195.keytab, 来看看里面究竟有针对什么Service的Key
创建JAAS登录文件
JAAS 登录文件指明安全框架使用 Kerberos 身份验证并定义 Kerberos 标识信息的 keytab 文件的位置。该文件的位置在java.security.auth.login.config 启动参数中指定.
tidalsoft.webconsole.server {
com.sun.security.auth.module.Krb5LoginModule
required
debug=true
doNotPrompt=true
storeKey=true
useKeyTab=true
keyTab="/work/domain195.keytab"
principal="HTTP/[email protected]";
};
-Djava.security.krb5.realm=HQ.CTC.COM
-Djava.security.krb5.kdc=10.3.43.111
-Djava.security.auth.login.config=login.config
-Djavax.security.auth.useSubjectCredsOnly=false
-Dweblogic.security.enableNegotiate=true
· java.security.krb5.realm 定义运行 Active Directory 服务器的 Microsoft 域。
· java.security.krb5.kdc 定义运行 Active Directory 服务器的主机名。
· java.security.auth.login.config 定义 Kerberos 登录信息的位置。
· javax.security.auth.useSubjectCredsOnly 指定可以使用主题凭据之外的身份验证机制。
相关技术总结
JAAS
GSS-API