C# 使用HttpClient时客户端证书无效
我需要使用客户端证书将数据发布到远程服务器。问题是我收到一条消息说客户端证书无效。请参阅下面的返回消息C# 使用HttpClient时客户端证书无效,c#,httpclient,client-certificates,C#,Httpclient,Client Certificates,我需要使用客户端证书将数据发布到远程服务器。问题是我收到一条消息说客户端证书无效。请参阅下面的返回消息 StatusCode: 200, ReasonPhrase: 'OK', Version: 1.1, Content: System.Net.Http.StreamContent, Headers: { connection: close pragma: no-cache Cache-Control: no-cache
StatusCode: 200, ReasonPhrase: 'OK', Version: 1.1, Content:
System.Net.Http.StreamContent, Headers:
{
connection: close
pragma: no-cache
Cache-Control: no-cache
Date: Thu, 01 Oct 2015 04:05:24 GMT
P3P: CP="NON CUR OTPi OUR NOR UNI"
Content-Length: 505
Content-Type: text/html
}
<!DOCTYPE HTML PUBLIC "-//IETF//DTD HTML//EN">
<!-- Copyright (C) 2000 Tivoli Systems, Inc. -->
<!-- Copyright (C) 1999 IBM Corporation -->
<!-- Copyright (C) 1998 Dascom, Inc. -->
<!-- All Rights Reserved. -->
<HTML>
<HEAD>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-
8">
<TITLE>Certification authentication failed</TITLE>
</HEAD>
<BODY>
An attempt to authenticate with a client certificate failed.
<BR>
A valid client certificate is required to make this connection.
</BODY>
</HTML>
StatusCode:200,原因短语:“确定”,版本:1.1,内容:
System.Net.Http.StreamContent,标题:
{
连接:关闭
pragma:没有缓存
缓存控制:没有缓存
日期:2015年10月1日星期四04:05:24 GMT
P3P:CP=“非当前OTPi我们的NOR UNI”
内容长度:505
内容类型:text/html
}
证书验证失败
尝试使用客户端证书进行身份验证失败。
建立此连接需要有效的客户端证书。
我尝试的是:
public async Task<string> PostRequest(string ReqContent)
{
//ReqContent = "Input=" + ReqContent; this doesn't solve the certificate issue
WebRequestHandler handler = new WebRequestHandler();
X509Certificate2 certificate = null;
certificate = GetX509Certificate(@"C:\Test certificate\Test_sign.crt");
handler.ClientCertificates.Add(certificate);
HttpClient client = new HttpClient(handler);
client.BaseAddress = new Uri("https://www.somecompany.com /cert/invoke/mm.cdds.common.services");
client.DefaultRequestHeaders.Host = "www.somecompany.com";
client.DefaultRequestHeaders.Add("contenttype", "application/xml");
client.DefaultRequestHeaders.Add("Accept-Encoding", "gzip, deflate");
client.DefaultRequestHeaders.Accept.Clear();
client.DefaultRequestHeaders.Accept.Add(new MediaTypeWithQualityHeaderValue("application/xml"));
client.DefaultRequestHeaders.Connection.Clear();
client.DefaultRequestHeaders.Connection.Add("keep-alive");
client.DefaultRequestHeaders.CacheControl = new CacheControlHeaderValue() { NoCache = true };
client.DefaultRequestHeaders.Pragma.Clear();
client.DefaultRequestHeaders.Pragma.Add(new NameValueHeaderValue("no-cache"));
client.DefaultRequestHeaders.UserAgent.Clear();
client.DefaultRequestHeaders.UserAgent.Add(new ProductInfoHeaderValue("Java", "1.6.0_20"));
client.DefaultRequestHeaders.Accept.Add(new MediaTypeWithQualityHeaderValue("text/html"));
HttpContent _content = new StringContent(ReqContent);
_content.Headers.ContentType = new MediaTypeHeaderValue("application/xml");
_content.Headers.ContentType = new MediaTypeHeaderValue("application/x-www-form-urlencoded");
HttpResponseMessage response = await client.PostAsync(client.BaseAddress, _content);
string result = response.Content.ReadAsStringAsync().Result;
textBox2.Text = response + Environment.NewLine + result;
}
公共异步任务PostRequest(字符串请求内容)
{
//ReqContent=“Input=“+ReqContent;这不能解决证书问题
WebRequestHandler=新的WebRequestHandler();
X509Certificate2证书=null;
certificate=GetX509Certificate(@“C:\Test certificate\Test_sign.crt”);
handler.ClientCertificates.Add(证书);
HttpClient=新的HttpClient(处理程序);
client.BaseAddress=新Uri(“https://www.somecompany.com /cert/invoke/mm.cdds.common.services);
client.DefaultRequestHeaders.Host=“www.somecompany.com”;
client.DefaultRequestHeaders.Add(“contenttype”、“application/xml”);
Add(“接受编码”、“gzip、deflate”);
client.DefaultRequestHeaders.Accept.Clear();
client.DefaultRequestHeaders.Accept.Add(新的MediaTypeWithQualityHeaderValue(“应用程序/xml”);
client.DefaultRequestHeaders.Connection.Clear();
client.DefaultRequestHeaders.Connection.Add(“保持活动”);
client.DefaultRequestHeaders.CacheControl=new CacheControlHeaderValue(){NoCache=true};
client.DefaultRequestHeaders.Pragma.Clear();
client.DefaultRequestHeaders.Pragma.Add(新名称ValueHeaderValue(“无缓存”));
client.DefaultRequestHeaders.UserAgent.Clear();
client.DefaultRequestHeaders.UserAgent.Add(新产品InfoHeaderValue(“Java”,“1.6.0_20”));
client.DefaultRequestHeaders.Accept.Add(新的MediaTypeWithQualityHeaderValue(“text/html”);
HttpContent _内容=新的StringContent(ReqContent);
_content.Headers.ContentType=新的MediaTypeHeaderValue(“应用程序/xml”);
_content.Headers.ContentType=新的MediaTypeHeaderValue(“application/x-www-form-urlencoded”);
HttpResponseMessage response=wait client.PostAsync(client.BaseAddress,_content);
字符串结果=response.Content.ReadAsStringAsync().result;
textBox2.Text=response+Environment.NewLine+result;
}
我遇到了同样的问题,因为响应的HTML与上面所附的完全相同
问题实际上是服务器不接受客户端证书。因此,需要做的是在服务器上“注册”客户端证书
我从响应中又得到了一个标头,它指示我连接到的服务器:
服务器:WebSEAL/7.0.0.35(Build 180731)
你好,海龙,非常感谢。我已向服务器端发送请求,请求获取新证书。