Служба приложений ASP.Net Core прослушивает только порт 5000 в Ubuntu - PullRequest
0 голосов
/ 07 сентября 2018

Я пытаюсь разместить приложение ASP.Net Core MVC (перенаправление https включено) на сервере Ubuntu, используя Nginx в качестве обратного прокси-сервера. Я создал и установил локальный сертификат SSL с использованием OpenSSL. Когда я запускаю свое приложение, используя dotnet CLI, оно слушает оба http://localhost:5000 & https://localhost:5001,, и я могу получить к нему доступ через Интернет с помощью https (запросы http перенаправляются на https от Nginx).

Проблема в том, что когда я пытаюсь запустить службу как сервис, она только прослушивает http://localhost:5000.

Вот файл * .service:

[Unit]
Description=Test ASP.Net core web application service.

[Service]
WorkingDirectory=/home/ubuntu/MyAppFolder
ExecStart=/usr/bin/dotnet/home/ubuntu/MyAppFolder/MyApplication.dll
Restart=always
# Restart service after 10 seconds if the dotnet service crashes:
RestartSec=10
SyslogIdentifier=MyApplication
User=www-data
Environment=ASPNETCORE_ENVIRONMENT=Development
Environment=DOTNET_PRINT_TELEMETRY_MESSAGE=false
Environment=ASPNETCORE_HTTPS_PORT=5001
Environment=ASPNETCORE_URLS=http://localhost:5000;https://localhost:5001

[Install]
WantedBy=multi-user.target

Сведения о среде : ASP.Net Core 2.1.1, ASP.Net Core SDK 2.1.3, Nginx 1.14, Ubuntu 16.04

1 Ответ

0 голосов
/ 19 сентября 2018

Наконец я понял проблему. Проблема заключается в том, что ssl-сертификат разработчика устанавливается вместе с dotnet SDK с именем localhost. В случае Ubuntu сертификат находится по адресу / home / {имя пользователя} /.dotnet/corefx/cryptography/x509stores/my

Kestrel просто ищет в домашнем каталоге исполняемого пользователя, который не существует для «www-данных», следовательно, он не может найти сертификат разработки. Из-за чего он не привязывается к порту https по умолчанию.

Чтобы заставить его работать, я сначала преобразовал свой существующий сертификат в формате PEM ( .crt) в PKCS12 ( .pkf), используя OpenSSL. Ниже приведена команда.

sudo openssl pkcs12 -export -out certificate.pfx -inkey privateKey.key -in certificate.crt -certfile more.crt

Затем мне нужно было указать этот сертификат на сервере Kestrel, используя файл appsettings.json. Ниже показано, как файл выглядит сейчас:

{
  "ConnectionStrings": {
    "PostgresConnection": "Host=localhost; Database=postgres; Username=postgres; Password=xyz123"
  },
  "Logging": {
    "IncludeScopes": false,
    "LogLevel": {
      "Default": "Warning"
    }
  },

  "Kestrel": {
    "Endpoints": {
      "HTTPS": {
        "Url": "https://localhost:5001",
        "Certificate": {
          "Path": "/etc/ssl/certs/<certificate.pfx>",
          "Password": "xyz123"
        }
      }
    }
  }
}

Затем вам нужно добавить пользователя www-data в группу ssl-certs. ниже командная строка:

sudo usermod -aG ssl-cert www-data
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...