4

I have an ASP.NET Core 2.1 Web API project that is serving data from an SQL Server database. I checked 'Configure for HTTPS' option while I was creating the API project in Visual Studio.

I need to access this API from a React Native project, and I have tried using the Fetch API for it. The method I am using works when I make REST requests to different APIs but it is not working for my own API project. When I make a simple GET request to the API, I receive a Network request failed error on my mobile device, while on the API end, following error stack is encountered:

dbug: HttpsConnectionAdapter[1]
      Failed to authenticate HTTPS connection.
System.Security.Authentication.AuthenticationException: Authentication failed, see inner exception. ---> System.ComponentModel.Win32Exception: An unknown error occurred while processing the certificate
   --- End of inner exception stack trace ---
   at System.Net.Security.SslState.StartSendAuthResetSignal(ProtocolToken message, AsyncProtocolRequest asyncRequest, ExceptionDispatchInfo exception)
   at System.Net.Security.SslState.CheckCompletionBeforeNextReceive(ProtocolToken message, AsyncProtocolRequest asyncRequest)
   at System.Net.Security.SslState.StartSendBlob(Byte[] incoming, Int32 count, AsyncProtocolRequest asyncRequest)
   at System.Net.Security.SslState.ProcessReceivedBlob(Byte[] buffer, Int32 count, AsyncProtocolRequest asyncRequest)
   at System.Net.Security.SslState.StartReadFrame(Byte[] buffer, Int32 readBytes, AsyncProtocolRequest asyncRequest)
   at System.Net.Security.SslState.PartialFrameCallback(AsyncProtocolRequest asyncRequest)
--- End of stack trace from previous location where exception was thrown ---
   at System.Net.Security.SslState.ThrowIfExceptional()
   at System.Net.Security.SslState.InternalEndProcessAuthentication(LazyAsyncResult lazyResult)
   at System.Net.Security.SslState.EndProcessAuthentication(IAsyncResult result)
   at System.Net.Security.SslStream.EndAuthenticateAsServer(IAsyncResult asyncResult)
   at System.Net.Security.SslStream.<>c.<AuthenticateAsServerAsync>b__51_1(IAsyncResult iar)
   at System.Threading.Tasks.TaskFactory`1.FromAsyncCoreLogic(IAsyncResult iar, Func`2 endFunction, Action`1 endAction, Task`1 promise, Boolean requiresSynchronization)
--- End of stack trace from previous location where exception was thrown ---
   at Microsoft.AspNetCore.Server.Kestrel.Https.Internal.HttpsConnectionAdapter.InnerOnConnectionAsync(ConnectionAdapterContext context)

However, the request works fine when I make it using Postman, and following is the result:

info: Microsoft.AspNetCore.Hosting.Internal.WebHost[1]
      Request starting HTTP/1.1 GET https://localhost:5001/api/values application/json
info: Microsoft.AspNetCore.Authentication.JwtBearer.JwtBearerHandler[2]
      Successfully validated the token.
info: Microsoft.EntityFrameworkCore.Infrastructure[10403]
      Entity Framework Core 2.1.1-rtm-30846 initialized 'DataContext' using provider 'Microsoft.EntityFrameworkCore.SqlServer' with options: None
info: Microsoft.EntityFrameworkCore.Database.Command[20101]
      Executed DbCommand (62ms) [Parameters=[@__get_Item_0='?' (DbType = Int32)], CommandType='Text', CommandTimeout='30']
      SELECT TOP(1) [e].[id], [e].[pw], [e].[pws], [e].[em]
      FROM [ul] AS [e]
      WHERE [e].[id] = @__get_Item_0
info: Microsoft.AspNetCore.Mvc.Internal.ControllerActionInvoker[1]
      Route matched with {action = "Get", controller = "Values"}. Executing action Api.Controllers.ValuesController.Get (Api)
info: Microsoft.AspNetCore.Authorization.DefaultAuthorizationService[1]
      Authorization was successful.
info: Microsoft.AspNetCore.Mvc.Internal.ControllerActionInvoker[1]
      Executing action method Api.Controllers.ValuesController.Get (Api) - Validation state: Valid
info: Microsoft.AspNetCore.Mvc.Internal.ControllerActionInvoker[2]
      Executed action method Api.Controllers.ValuesController.Get (Api), returned result Microsoft.AspNetCore.Mvc.ObjectResult in 0.4905ms.
info: Microsoft.AspNetCore.Mvc.Infrastructure.ObjectResultExecutor[1]
      Executing ObjectResult, writing value of type 'System.String[]'.
info: Microsoft.AspNetCore.Mvc.Internal.ControllerActionInvoker[2]
      Executed action Api.Controllers.ValuesController.Get (Api) in 30.7297ms
info: Microsoft.AspNetCore.Hosting.Internal.WebHost[2]
  Request finished in 125.3707ms 200 application/json; charset=utf-8

Additional info:

When I run the API project, following dialogue box appears:

Would you like to trust the ASP.NET Core SSL certificate

Clicking Yes results in:

Access Control List (ACL) structure is invalid

What is the reason for this error and how should I go about solving this issue?

Uzair A.
  • 1,586
  • 2
  • 14
  • 30

3 Answers3

3

According to this MSDN blog you can install the certificate manually.

  1. Open a blank Microsoft Management Console by clicking Start, then Run, entering "mmc" and clicking OK:
  2. Click File, and then click Add/Remove Snap-in:
  3. When the Add or Remove Snap-ins dialog box is displayed, click Certificates, and then click Add:
  4. When the Certificates Snap-ins dialog box is displayed, click Computer account, and then click Next:
  5. Click Local computer, and then click Finish:
  6. Click OK to close the Add or Remove Snap-ins dialog box:
  7. In the Console Root, expand Certificates (Local Computer), then expand Personal, and then click Certificates:
  8. Select the certificate with the following attributes: Issued to = "localhost", Issued by = "localhost", Friendly Name = "IIS Express Development Certificate"
  9. Click Action, then click All Tasks, and then click Export:
  10. When the Certificate Export Wizard is displayed, click Next:
  11. Click No, do not export the private key, and then click Next:
  12. Click DER encoded binary X.509 (.CER), and then click Next:
  13. Enter the path for exported certificate, e.g. "c:\users\robert\desktop\iisexpress.cer", and then click Next:
  14. Click Finish to export the certificate:
  15. Click OK when the Certificate Export Wizard displays a dialog box informing you that the export was successful:
  16. In the Console Root, expand Certificates (Local Computer), then expand Trusted Root Certification Authorities, and then click Certificates:
  17. Click Action, then click All Tasks, and then click Import:
  18. When the Certificate Import Wizard is displayed, click Next:
  19. Enter the path to your exported certificate, e.g. "c:\users\robert\desktop\iisexpress.cer", and then click Next:
  20. Ensure that Place all certificates in the following store is checked and verify that the selected Certificate store is set to Trusted Root Certification Authorities, and then click click Next:
  21. Click Finish to import the certificate:
  22. Click OK when the Certificate Import Wizard displays a dialog box informing you that the import was successful:
  23. You IIS Express certificate should now be displayed in the listed of Trusted Root Certification Authorities as "localhost":
ProgrammingLlama
  • 36,677
  • 7
  • 67
  • 86
  • I don't see any 'Install Certificate' option. Internet Explorer only gives the options 'Close this tab' or 'Go on to the web page'. – Uzair A. Aug 29 '18 at 07:52
  • @Uzair It seems Microsoft have improved things again. I think the second method ought to work (edited my question to include it), although I haven't tried it myself. – ProgrammingLlama Aug 29 '18 at 08:01
1

this my solution

dotnet dev-certs https
dotnet dev-certs https --trust
  • 1
    Please explain what your solution does and how it helps. – BDL Jul 03 '20 at 11:25
  • @rodrigo.rodriguez is correct `dotnet dev-certs https --trust` will trust the certificate installed by .NET Core: "Installing the .NET Core SDK installs the ASP.NET Core HTTPS development certificate to the local user certificate store. The certificate has been installed, but it's not trusted. To trust the certificate, perform the one-time step to run the dotnet dev-certs tool" https://learn.microsoft.com/en-us/aspnet/core/security/enforcing-ssl?view=aspnetcore-3.1&tabs=visual-studio#trust-the-aspnet-core-https-development-certificate-on-windows-and-macos – Metalogic Oct 30 '20 at 00:31
0

this solution solved problem https://stackoverflow.com/a/59539907/8722913

dotnet dev-certs https --clean

dotnet dev-certs https --trust

Mohamad Elnaqeeb
  • 541
  • 4
  • 13