Есть ли способ применения SSL-сертификата сервера в ASP. NET Конечной точке приложения Core 3.1? - PullRequest
0 голосов
/ 23 февраля 2020

У меня настроен Nginx на моем Ubuntu VPS. Сертификат отлично работает на интерфейсных конечных точках (*. html), но у меня возникают проблемы с получением данных из моего ASP. NET Core API из любого клиентского приложения. Например, при попытке извлечь данные с помощью следующего python кода:

import requests
import json
data = {"somevariable" : "someData"}
url='https://myDNS:myPort/myEndpoint'
r = requests.post(url, json=data)

возвращается следующее сообщение об ошибке:

SSLCertVerificationError (1, проверка сертификата [SSL: CERTIFICATE_VERIFY_FAILED] подтверждена не удалось: невозможно получить сертификат локального эмитента (_ssl. c: 1108) '))

Моя цель - связаться с ASP. NET конечными точками, используя Nginx сгенерированный сертификат ( HTTPS) с любого клиента. Я попробовал следующие документы, но ни одна из них не решила мою проблему.

В приложении включена поддержка SSL и Program.cs выглядит следующим образом:

public class Program
    {
        public static void Main(string[] args)
        {
            CreateHostBuilder(args).Build().Run();
        }

        public static IHostBuilder CreateHostBuilder(string[] args) =>
            Host.CreateDefaultBuilder(args)
                .ConfigureWebHostDefaults(webBuilder =>
                {
                    //webBuilder.UseUrls("http://0.0.0.0:5001");
                    webBuilder.UseStartup<Startup>();
                    webBuilder.UseKestrel(options =>
                    {
                        options.Listen(IPAddress.Loopback, 5000); //Should listen on https://MyDNS:5000/
                    });
                });
    }

Я также использую HttpsRedirection на тот же порт в моем Startup.cs, как показано ниже:

public void Configure(IApplicationBuilder app, IWebHostEnvironment env)
        {
            app.UseHttpsRedirection();
            //.... rest of configuration
        }
 public void ConfigureServices(IServiceCollection services)
        {
            //...
            services.AddHttpsRedirection(options =>
            {
                options.RedirectStatusCode = StatusCodes.Status307TemporaryRedirect;
                options.HttpsPort = 5000;
            });
            //...
      }

Я был бы очень благодарен за любой ответ.

1 Ответ

0 голосов
/ 26 февраля 2020

Я думаю, что это проблема конфигурации nginex. попробуйте изменить конфигурацию так:

server 
{ 
    listen 443 ssl; 
    server_name api.vojtechpetrasek.com; 

    location / {

      proxy_set_header        Host $host;
      proxy_set_header        X-Real-IP $remote_addr;
      proxy_set_header        X-Forwarded-For $proxy_add_x_forwarded_for;
      proxy_set_header        X-Forwarded-Proto $scheme;

      # Fix the “It appears that your reverse proxy set up is broken" error.
      proxy_pass          http://localhost:5000;
      proxy_read_timeout  90;

      proxy_redirect      http://localhost:5000 https://api.vojtechpetrasek.com;
    }

#.... managed by Certbot 
} 

Ваше приложение asp. net должно работать на http://localhost: 5000
(на linux. "ссылки http://localhost: 5000 ")

хороший учебник https://www.digitalocean.com/community/tutorials/how-to-configure-nginx-with-ssl-as-a-reverse-proxy-for-jenkins

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...