什么是IIS身份验证中的“领域”,它与SSL证书参数有什么关系?

问题描述:

我试图执行自定义基本身份验证similar to this并且让我困惑的一件事是领域的概念。例如,有一个时刻,当我的模块插入一些神奇的串入回复:什么是IIS身份验证中的“领域”,它与SSL证书参数有什么关系?

void ReplyWithAuthHeader() 
{ 
    HttpContext currentContext = HttpContext.Current; 
    context.Response.StatusCode = 401; 
    context.Response.AddHeader("WWW-Authenticate", 
     String.Format("Basic realm=\"{0}\"", "myname.mycompany.com")); 
} 

该网站被分配makecert实用程序创建的SSL certicicate,并“发出”到“myname.mycompany.com”。呼叫者创建请求:

HttpWebRequest request = (HttpWebRequest)HttpWebRequest.Create(serverUrl); 
CredentialCache cache = new CredentialCache(); 
cache.Add(new Uri(serverUrl), "Basic", new NetworkCredential("UserName", "password")); 
request.Credentials = cache; 

其中serverUrl开始于https://并且当所述请求是由服务器发送了“WWW验证”答复服务器处理,然后一个异常被在客户端侧抛出用“无法将数据写入传输连接:建立的连接被主机中的软件中止。“文本。

很显然,SSL协商级别出了问题,我不能说它是什么。我想这可能是处理这个领域的问题。

我的问题是 - 什么是领域它是如何与通过SSL进行连接时发出SSL证书的一方的名称相关的?

RFC 2617回答你的问题,一些copypasta“什么是江湖?”:

境界指令(不区分大小写)是必需的发出挑战的所有身份验证方案。领域值(区分大小写)结合正在访问的服务器的规范根URL(其abs_path为空的服务器的absoluteURI;请参见[2]的第5.1.2节)定义了保护空间。这些领域允许将服务器上的受保护资源划分为一组保护空间,每个保护空间都有自己的认证方案和/或授权数据库。领域值是一个字符串,通常由原始服务器分配,该字符串可能具有特定于身份验证方案的其他语义。请注意,同一认证方案可能存在多个挑战,但是不同的领域存在多个挑战。

至于你的问题它是如何与你的SSL证书相关的:它不是。通过访问浏览器中的URL,我可以想出最简单的方法来弄清楚发生了什么问题。您应该清楚地描述问题(主机名与证书不匹配,不受信任的CA,过期等)。

该领域指示客户端进行身份验证的范围。浏览器会缓存用户名,密码和领域,并重新发送任何需要对该领域进行身份验证的服务器响应的凭证。

SSL与HTTP之间没有关系,如果您已经设法协商连接并发送请求并获得响应,则SSL不会是您的问题。您可以尝试写入已关闭的连接。在这种情况下,我会将私钥加载到Wireshark中,并仔细查看协议级别发生了什么,包括TCP/IP和HTTP。