HTTP认证
有很多认证方式,但在开始握手时,都基于401Unauthorized响应
Windows认证
认证方式
Negotiate
NTLM(NT LAN Manger)
比较老,主要应用于用于Windows NT 和 Windows 2000 Server(or Later) 工作组环境。
NTLM要传送用户的密码,但是密码经过处理后派生出一个8字节的key加密质询码,也是比较安全的。
在Kerberos之前,Windows主要采用NTLM。在AD域环境中,如果需要认证Windows NT系统,也必须采用NTLM。
cntlm.exe 相当于一个代理,其实就是帮你的请求完成NTLM认证过程。
Kerberos
比较新,主要应用于Windows 2000 Server(or Later) 域(Domain)环境。
Kerberos较之NTLM更高效、更安全,同时认证过程也相对复杂。
Kerberos验证不在网络上传递用户密码,只用传送一个用户验证票。
在允许的环境下,Kerberos是首选的认证方式。集成 Windows 身份验证Kerberos的验证方式是 Intranet 环境中最好的身份验证方案。
Kerberos这个名字来源于希腊神话,是冥界守护神兽的名字。Kerberos是一个三头怪兽,之所以用它来命名一种完全认证协议,是因为整个认证过程涉及到三方:客户端、服务端和KDC(Key Distribution Center) 。
在Windows域环境中,KDC的角色由DC(Domain Controller)来担当。
服务端要求windows认证时,浏览器第一次弹出窗口让输账号密码时,还没走Kerberos协议,这时输入账号密码点Sign in才走。
协议过程/报文
AS-REQ请求
向KDC请求进行认证,包含cname(邮箱地址),realm(域),addresses(主机名)等信息(输入的账号密码呢?)。
KRB Error: KRB5KDC_ERR_PREAUTH_REQUIRED响应
KRB Error: KRB5KDC_ERR_PREAUTH_FAILED响应
可以在Wireshark中,用kerberos进行协议过滤,一般每条记录会显示具体的协议及版本号,比如KRB5。
认证方式的选择
客户端以ip地址访问服务器不管客户端跟服务器是否在域、也不管客户端是否以域帐号登陆,只要客户端以ip地址访问服务器,那么客户端就会选择NTLM方式验证,并且不会直接发送客户端登录用户的用户名和密码给服务器,而是会弹出一个对话框要求用户输入用户名和口令,然后发送到服务端验证。
您可以避免在使用 IP 地址或名称中包含句点 的企业内部网服务器上出现这种提示,方法是,在 Internet Explorer 的“本地 Intranet”设置中,列出包含 IP 地址的服务器,或是列出包含句点的服务器名称。可以通过依次单击“工具”、“Internet 选项”、“本地 Intranet”、“站点”、“高级”来访问“本地 Intranet”设置部分。然后在“将该网站添加到区域中”输入 http://127.0.0.1 或其他相关站点的 URL。
如果服务器和客户端的机器都在域中,同时登陆用户又是以域用户登录,那么IE选择Kerberos验证方式。
其他情况IE都选择采用NTLM验证方式,并首先尝试把登录客户端用户的用户名和密码传送给服务器验证。
如果验证通过了,被直接授权访问;
如果验证没通过,客户端弹出对话框要求输入用户名和密码,然后再传送到服务端验证,直到验证通过。
组策略
组策略(Group Policy)是Microsoft Windows系统管理员为用户和计算机定义并控制程序、网络资源及操作系统行为的主要工具。通过使用组策略可以设置各种软件、计算机和用户策略。
* 使用组策略可以给同组的计算机或用户强加一套统一的标准,如用户的桌面环境,计算机启动,关机注销等所执行的脚本文件、软件分发、安全设置等。
组策略是一种管理员限制用户和限制计算机使用界面,使用功能的一种工具(管理注册表的系统应用),使用gpedit.msc打开,但Win10家庭版被禁用了
Local Security Policy管理器
Local Group Policy Editor管理器
可以修改一些组策略配置
Computer Configuration
Software Settings
Windows Settings
Scripts (Startup/Shutdown)
Deployed Printers
Security Settings
Account Policies
Password Policy
Account Lockout Policy
Local Policies
Audit Policy
User Rights Assignment
Security Options
Public Key Policies
Policy-based QoS
Administrative Templates
User Configuration
Software Settings
Windows Settings
Scripts (Logon/Logoff)
Deployed Printers
Security Settings
Policy-based QoS
Administrative Templates
浏览器行为
自动完成Windows认证。
如果浏览器集成了公司的AD,那么IE,Edge,Chrome都可以自动用当前登陆的Windows账号完成Windows认证,而不需要用户参与手动输入账号密码(这个表单/弹窗是浏览器弹出的,前端代码无法控制)。
Firefox好像不行。
好像还需要勾选Internet Options->Security->Internet/Local Intranet->Custom level…->User Authentication->Logon->Automatic logon with current user name and password。(还要看当地的IT策略,有可能没权限改)
** Internet Options->Security下面有4个zone,分别是Internet,Local internet,Trusted sites和Restrict sites。相当于把想要访问的地址分了4组,可以为每组内的地址设置安全策略,比如到Custom level…下去设置是否自动登陆。**
对于Local Intranet范围内的自动登陆设置,好像在Internet Options->Security->Local Intranet->Sites中列出的域名,以及列出的4个规则中勾选的项自动认为是intranet的地址,才在这个范围内,才能自动完成Windows认证。或者使用组策略(怎么弄?)。