挑战有多种类型,问题的答案取决于您所谈论的挑战类型。每个挑战都有一个保护空间,它基本上告诉你正在应对什么类型的挑战。
要回答您对最常见保护空间的问题:
- 基于密码的基本身份验证 (
NSURLAuthenticationMethodHTTPBasic
):您传递的凭据以明文形式发送到服务器 (HTTP) 或由会话密钥 (HTTPS) 加密。
- 摘要式身份验证 (
NSURLAuthenticationMethodHTTPDigest
):您传递的凭证使用服务器提供的随机数进行加密哈希处理,并且只有生成的哈希令牌通过网络发送。
- NTLM 身份验证 (
NSURLAuthenticationMethodNTLM
):您传递的凭证使用服务器发送的随机数进行加密散列,并且只有生成的散列令牌通过网络发送。
- 客户端证书认证(
NSURLAuthenticationMethodClientCertificate
):证书发送到服务器,但不发送私钥数据。客户端使用私钥对之前的 TLS 握手数据进行签名,作为让服务器验证客户端确实拥有与该证书关联的私钥的一种方式。
- 服务器证书验证(
NSURLAuthenticationMethodServerTrust
_与服务器交谈时信任该证书)。
上面的列表涵盖了最常见的保护空间。Kerberos 是它自己的动物,我完全不知道它是如何工作的。还有“表单”保护空间,它只是自定义身份验证的占位符,您可以在应用程序代码的各个部分使用它,但实际上并没有以任何有意义的方式支持。
值得注意的是,如果攻击者可以更改传输中的数据,Basic、Digest 和 NTLM 身份验证不会提供针对中间人攻击的保护,因为提供的身份验证令牌不会以任何方式依赖于请求的其余部分. 因此,这些真的只适合在加密通道 (HTTPS) 上使用。