NTLM认证方案 -- RFC4599解读

Negotiate / NTLM – RFC4599

The WWW-Authenticate Response Header

  • server 接收请求
  • acceptable Authorization header 未发送
  • server 响应 "401 Unauthorized"状态码 和 "WWW-Authenticate:"头
challenge = "Negotiate" auth-data
auth-data = 1#( [gssapi-data] )

gssapi-data
gss_accept_security_context 返回给 client 一个 token 时,指令包含 base64 编码的 initialContextToken
这在 server 的初始响应中不存在

200 :成功,"WWW-Authenticate"响应头 包含 身份验证的最后一步
gss_init_security_context 处理 gssapi-data ,确定安全状态
| 成功,应用可用此响应 否则,根据认证状态采取适当行动

The Authorization Request Header

  • client 收到响应
    • 响应包含 server 发的 "WWW-Authenticate"header
  • 重试 HTTP 请求,传递 HTTP "Authorization"header
credentials = "Negotiate" auth-data2
auth-data2 = 1#( gssapi-data )

gssapi-data
指令包含base64 编码的 initialContextToken

2xx :成功
其他代码:身份认证失败
401 :携带 “Negotiate” 和 gssapi-data 的 "WWW-Authenticate"头,继续请求
client 可使用携带初始 token 的 "Authorization"header 向 server 发起连接,以绕过 401

案例分析:

  • client 发起 GET 请求,URI: “http://www.nowhere.org/dir/index.html”
C: GET dir/index.html
  • client 未发送认证头,server 响应:
S: HTTP/1.1 401 Unauthorized
S: WWW-Authenticate: Negotiate
  • client 获取证书 :使用 SPNEGO GSSAPI 机制生成 GSSAPI 信息
  • 发起新请求,包括如下认证头:
C: GET dir/index.html
C: Authorization: Negotiate a87421000492aa874209af8bc028
  • server 解码 gssapi-data,传递给 SPNEGO GSSAPI 机制( gss_accept_security_context 函数)
    • 不完整:server 响应 401,及含 gssapi-dataWWW-Authenticate header (循环)

      S: HTTP/1.1 401 Unauthorized
      S: WWW-Authenticate: Negotiate 749efa7b23409c20b92356
      
      • client 解码 gssapi-data,传递给 Gss_Init_security_context ,返回新 gssapi-data 给 server

        C: GET dir/index.html
        C: Authorization: Negotiate 89a8742aa8729a8b028
        
    • 完整:向 client 提供最后的认证数据(多个数据由 WWW-Authenticate 携带)

      S: HTTP/1.1 200 Success
      S: WWW-Authenticate: Negotiate ade0234568a4209af8bc0280289eca
      
      • client 解码 gssapi-data,传递给 gss_init_security_context

        成功,应用可用此响应

其他注意事项

  • 注:SPNEGO HTTP 认证设施仅提供认证,并不保护 HTTP头 或者 使用过程中身份认证及WWW认证头的数据
  • 其他机制,如TLS可保证机密性,TLS证书的哈希可保证通道连接安全,Kerb-TLS 经修改后可提供身份认证及机密性
  • 此机制不用于HTTP代理的HTTP身份验证。
    • HTTP proxy 应用于 client 和 server 之间时,不同 authenticated clients 与相同 server 之间不可共享连接,否则 server 将失去对安全信息的跟踪
    • 代理需支持 “Proxy-support: Session-Based-Authentication” HTTP header (来自server的“401 Unauthorized”响应)
  • 注: client 与 server 发送用户数据之前,需完整建立身份认证。gss_init_security_context 的返回值将表明安全信息是否完整,完整才可发数据。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值