我需要使用客户端证书将数据发布到远程服务器。问题是我收到一条消息称客户端证书无效。请参阅下面的返回消息
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>
我尝试了什么:
我获得的证书是Encrypt.p12,Sign.p12,Test_Enc.crt,Test_sign.crt。我双击所有这些证书并安装所有这些。但它对我没有帮助。
根据工具指南,它说公司的HTTP请求应该使用参数名称&#39;输入&#39;指定有效负载值。所以我尝试添加&#34;输入=&#34;在内容面前。在我的情况下是&#39; ReqContent =&#34;输入=&#34; +&#39;&#39; ReqContent;&#39;
所以我做错了什么或者我应该做什么,但我没有做过?
以下是我的代码。
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;
}
答案 0 :(得分:1)
我遇到了与HTML相同的问题,其响应与上面所附的完全相同。
问题实际上是服务器未接受客户端证书。因此,需要做的是在服务器上“注册”您的客户端证书。
我从响应中获得了另外一个标头,它指示我要连接的服务器:
server: WebSEAL/7.0.0.35 (Build 180731)