簡體   English   中英

使用 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>     

我試過的:

  1. 我得到的證書是 Encrypt.p12、Sign.p12、Test_Enc.crt、Test_sign.crt。 我雙擊了所有這些證書並安裝了所有這些證書。 但這對我沒有幫助。

  2. 根據實施指南,它說對公司的 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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM