带有SSL的ASP.NET C#页面和来自智能卡的Mutual Auth

时间:2015-01-28 19:15:43

标签: c# asp.net ssl certificate smartcard

我想为具有智能卡身份验证的用户创建登录页面并重定向到第三方服务。我已经在java和它的工作中验证了(但不知道如何)。

我的Https页面必须使用Request.ClientCertificate读取证书 在我需要为第三方服务创建webrequest(Soap Envelope)之后。 当我在本地IIS Express上执行此代码时,所有工作(证书的私钥存在) 当我在远程IIS上发布此代码不起作用时,我收到的消息是 "需要授权" (证书的私钥不存在)

此代码使用:

public HttpWebRequest CreateWebRequest(string url)
{

Uri uri = new Uri(url);
HttpWebRequest webRequest = (HttpWebRequest)WebRequest.Create(uri);
System.Net.ServicePointManager.ServerCertificateValidationCallback += mIgnoreBadCertificates;
webRequest.Proxy = null;
webRequest.Headers.Add("SOAP:Action");
webRequest.KeepAlive = true;
webRequest.ProtocolVersion = HttpVersion.Version10;
webRequest.Headers.Add("X-WASP-User", DataOnCertifcate);
webRequest.ContentType = "text/xml;charset=\"utf-8\"";
webRequest.Accept = "text/xml";
webRequest.Method = "POST";
webRequest.AuthenticationLevel = AuthenticationLevel.MutualAuthRequired;
if (Request.ClientCertificate != null)
{
     webRequest.ClientCertificates.Clear();
     webRequest.ClientCertificates.Add(Request.ClientCertificate);
}
return webRequest;

}

ServicePointManager.ServerCertificateValidationCallback = new System.Net.Security.RemoteCertificateValidationCallback(AcceptAllCertifications);
HttpWebRequest request = CreateWebRequest(Url);

using (Stream stream = request.GetRequestStream())
{
     envelope.Save(stream);
}
//ServicePointManager.SecurityProtocol = SecurityProtocolType.Ssl3;
IAsyncResult asyncResult = request.BeginGetResponse(null, null);
asyncResult.AsyncWaitHandle.WaitOne();

string soapResult = "";
using (WebResponse webResponse = request.EndGetResponse(asyncResult))
using (StreamReader rd = new StreamReader(webResponse.GetResponseStream()))
{
    soapResult = rd.ReadToEnd();
}

1)在IIS上启用了SSL 2)当我访问我的https页面时,浏览器会显示一个证书列表。 3)我选择存在于智能卡中的证书,并且我正确地插入了Pin 4)我的https测试页面,显示正确的证书和公钥信息,但没有私钥信息(在远程服务器上,同时在本地服务器上工作) 5)我收到此错误

401需要授权

需要授权

此服务器无法验证您是否有权访问所请求的文档。您提供了错误的凭据(例如,密码错误),或者您的浏览器不了解如何提供所需的凭据。


服务器名称的Apache / 2.2.3(Red Hat)服务器港口443

我该如何解决这个问题?

0 个答案:

没有答案