6

for the code below, it catches an HttpRequestException/ System.Net.Http.WinHttpException when called

the exception states:

NativeErrorCode 12175 Message "A security error occurred" - e {System.Net.Http.HttpRequestException: An error occurred while sending the request. ---> System.Net.Http.WinHttpException: A security error occurred at System.Runtime.ExceptionServices.ExceptionDispatchInfo.Throw() at System.Runtime.CompilerServices.TaskAwaiter.HandleNonSuccessAndDebuggerNotification(Task task) at System.Runtime.CompilerServices.ConfiguredTaskAwaitable`1.ConfiguredTaskAwaiter.GetResult() at System.Net.Http.WinHttpHandler.<StartRequest>d__105.MoveNext() --- End of inner exception stack trace --- at System.Runtime.ExceptionServices.ExceptionDispatchInfo.Throw() at System.Runtime.CompilerServices.TaskAwaiter.HandleNonSuccessAndDebuggerNotification(Task task) at System.Runtime.CompilerServices.ConfiguredTaskAwaitable`1.ConfiguredTaskAwaiter.GetResult() at System.Net.Http.HttpClient.<FinishSendAsync>d__58.MoveNext() --- End of stack trace from previous location where exception was thrown --- at System.Runtime.ExceptionServices.ExceptionDispatchInfo.Throw() at System.Runtime.CompilerServices.TaskAwaiter.HandleNonSuccessAndDebuggerNotification(Task task) at System.Runtime.CompilerServices.TaskAwaiter`1.GetResult() at Controllers.Controller.<Get>d__0.MoveNext() 

but using Postman on the same endpoint, resource, headers and body, I get a 200 back.

POST /account/ HTTP/1.1 Host: test-org.com X-HTTP-Method-Override: GET Content-Type: application/xml Cache-Control: no-cache Postman-Token: ce565d1a-bfb7-0961-ffd7-d279b90e97c5 <?xml version="1.0" encoding="UTF-8"?> <accountMessage xmlns="http://sdfssd ........ </accountMessage> 

when I do a google search for NativeErrorCode 12175 .NET, i find this: https://msdn.microsoft.com/en-us/library/windows/desktop/aa383770(v=vs.85).aspx

ERROR_WINHTTP_SECURE_FAILURE 12175 One or more errors were found in the Secure Sockets Layer (SSL) certificate sent by the server. To determine what type of error was encountered, check for a WINHTTP_CALLBACK_STATUS_SECURE_FAILURE notification in a status callback function. For more information, see WINHTTP_STATUS_CALLBACK. 

Code that's broken:

// GET: api/Accounts [HttpGet] public async Task<IActionResult> Get() { try { using (var client = new HttpClient()) { try { client.BaseAddress = new Uri("https://test-org.com/"); HttpRequestMessage request = new HttpRequestMessage(HttpMethod.Post, "account"); request.Content = new StringContent("<?xml version=\"1.0\" encoding=\"UTF-8\"?>\r\n<accountMessage xml...</accountMessage>",Encoding.UTF8,"application/xml"); request.Headers.Add("X-HTTP-Method-Override", "GET"); var response = await client.SendAsync(request); response.EnsureSuccessStatusCode(); var stringResponse = await response.Content.ReadAsStringAsync(); var posts = JsonConvert.DeserializeObject<IEnumerable<Post>>(stringResponse); if (posts == null) return NotFound($"Posts were not found"); return Ok(posts); } catch (HttpRequestException e) { Console.WriteLine($"Request exception: {e.Message}"); } } } catch (Exception) { } return BadRequest(); } 
1
  • 1
    Did you check ` WINHTTP_CALLBACK_STATUS_SECURE_FAILURE`? What kind of certificate are you using? Commented Apr 8, 2017 at 18:08

1 Answer 1

20

I talked with the owner of the server/service. They are providing a brand new service, and the service is currently using a self-signed certificate. Until the server/service is using a real certificate that can be verified via a certificate authority, Im going to bypass certificate verification in my code:

 using (var httpClientHandler = new HttpClientHandler()) { httpClientHandler.ServerCertificateCustomValidationCallback = (message, cert, chain, errors) => { return true; }; using (var client = new HttpClient(httpClientHandler)) { try { client.BaseAddress = new Uri("https://test-org.com/"); 
Sign up to request clarification or add additional context in comments.

2 Comments

Just used it in a ASP.NET Core 2.0 application. Saved my day sir. Thank you very much!
Worked! Thank you! Many answers say to set ServerCertificateValidationCallback which did not work for me at all.

Start asking to get answers

Find the answer to your question by asking.

Ask question

Explore related questions

See similar questions with these tags.