![](/img/trans.png)
[英]"The remote certificate is invalid according to the validation procedure" using HttpClient
[英]Client certificate is invalid with using HttpClient
我需要使用客戶端證書將數據發布到遠程服務器。 問題是我收到一條消息,說客戶端證書無效。 請參閱下面的返回消息
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 請求應該使用“輸入”的參數名稱來指定有效負載值。 所以我嘗試的是在內容前面添加“Input=”。 在我的情況下是 'ReqContent = "Input=" + ''ReqContent;'
所以我做錯了什么或我應該做但我沒有做的任何事情?
以下是我的代碼。
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;
}
我遇到了同樣的問題,因為響應中的 HTML 與上面所附的完全相同。
問題實際上是服務器不接受客戶端證書。 所以需要做的是在服務器上“注冊”你的客戶端證書。
我從響應中又得到了一個標頭,它表明我要連接到哪個服務器:
server: WebSEAL/7.0.0.35 (Build 180731)
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.