sha*_*oth 8 .net c# iis ssl forms-authentication
我正在尝试实现与此类似的自定义基本身份验证,让我困惑的一件事是领域的概念.例如,我的模块会在回复中插入一些魔术字符串:
void ReplyWithAuthHeader()
{
HttpContext currentContext = HttpContext.Current;
context.Response.StatusCode = 401;
context.Response.AddHeader( "WWW-Authenticate",
String.Format("Basic realm=\"{0}\"", "myname.mycompany.com"));
}
Run Code Online (Sandbox Code Playgroud)
该站点被分配了一个使用makecert实用程序创建的SSL证书,并"发布"到"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;
Run Code Online (Sandbox Code Playgroud)
其中serverUrl
与开始https://
,并且当该请求正在由服务器处理的服务器发送"WWW身份验证"回复,然后将引发异常在客户端与"无法写入数据传输连接:一个建立的连接被中断主机上的软件." 文本.
很明显,SSL协商级别存在一些问题,我无法确定它是什么.我想这可能是涉及领域的事情.
我的问题是 - 什么是领域,它是如何与通过SSL建立连接时颁发SSL证书的一方的名称相关的?
Vic*_*ing 10
要回答你的问题"什么是领域?",来自RFC 2617的一些copypasta :
发出质询的所有身份验证方案都需要域指令(不区分大小写).领域值(区分大小写)与正在访问的服务器的规范根URL(abs_path为空的服务器的absoluteURI;参见[2]的第5.1.2节)一起定义了保护空间.这些领域允许将服务器上受保护的资源划分为一组保护空间,每个保护空间都有自己的身份验证方案和/或授权数据库.领域值是通常由源服务器分配的字符串,其可以具有特定于认证方案的附加语义.请注意,相同的auth方案可能存在多个挑战,但不同的领域.
至于你的问题它与你的SSL证书有什么关系:事实并非如此.我能想到的最容易找出问题的方法就是访问浏览器中的URL.您应该清楚地了解问题(主机名与证书不匹配,不受信任的CA,过期等).
领域表示客户端正在进行身份验证的范围.浏览器将缓存用户名,密码和领域,并为需要对该领域进行身份验证的任何其他服务器响应重新发送凭据.
SSL与HTTP正在发生的事情之间没有任何关系,如果您已经设法协商连接并发送请求并获得响应,则SSL不会是您的问题.您可能只是想写入已关闭的连接.在这个例子中,我将私钥加载到Wireshark中,并仔细查看协议级别(TCP/IP和HTTP)的情况.