Реализация веб-сервера HTTP.sys в ASP.NET CoreHTTP.sys web server implementation in ASP.NET Core

Авторы: Том Дикстра (Tom Dykstra), Крис Росс (Chris Ross) и Люк Латам (Luke Latham)By Tom Dykstra, Chris Ross, and Luke Latham

HTTP.sys — это веб-сервер для ASP.NET Core, который запускается только в Windows.HTTP.sys is a web server for ASP.NET Core that only runs on Windows. HTTP.sys является альтернативой серверу Kestrel, предлагая некоторые функции, отсутствующие в Kestrel.HTTP.sys is an alternative to Kestrel server and offers some features that Kestrel doesn't provide.

Важно!

HTTP.sys не подходит для использования с IIS или IIS Express из-за несовместимости с модулем ASP.NET Core.HTTP.sys isn't compatible with the ASP.NET Core Module and can't be used with IIS or IIS Express.

HTTP.sys поддерживает следующие функции:HTTP.sys supports the following features:

  • Аутентификация WindowsWindows Authentication
  • Совместное использование портовPort sharing
  • Использование HTTPS с SNIHTTPS with SNI
  • Использование HTTP/2 через TLS (Windows 10 и более поздние версии)HTTP/2 over TLS (Windows 10 or later)
  • Прямая передача файловDirect file transmission
  • Кэширование откликовResponse caching
  • Использование WebSockets (Windows 8 и более поздние версии)WebSockets (Windows 8 or later)

Поддерживаемые версии Windows:Supported Windows versions:

  • Windows 7 и более поздние версииWindows 7 or later
  • Windows Server 2008 R2 и более поздние версииWindows Server 2008 R2 or later

Просмотреть или скачать образец кода (как скачивать)View or download sample code (how to download)

Условия для применения HTTP.sysWhen to use HTTP.sys

HTTP.sys удобно использовать с развертываниями в таких случаях:HTTP.sys is useful for deployments where:

  • когда нужно подключить сервер к Интернету напрямую без использования служб IIS;There's a need to expose the server directly to the Internet without using IIS.

    HTTP.sys взаимодействует с Интернетом напрямую

  • когда для внутренних развертываний нужна функция, отсутствующая в Kestrel, например аутентификация Windows.An internal deployment requires a feature not available in Kestrel, such as Windows Authentication.

    HTTP.sys взаимодействует с внутренней сетью напрямую

HTTP.sys — это проверенная технология, которая защищает от многих типов атак, а также обеспечивает надежность, безопасность и масштабируемость полнофункционального веб-сервера.HTTP.sys is mature technology that protects against many types of attacks and provides the robustness, security, and scalability of a full-featured web server. Сами службы IIS выполняются в качестве HTTP-прослушивателя поверх HTTP.sys.IIS itself runs as an HTTP listener on top of HTTP.sys.

Поддержка HTTP/2HTTP/2 support

Протокол HTTP/2 включен для приложений ASP.NET Core, если выполнены следующие базовые требования:HTTP/2 is enabled for ASP.NET Core apps if the following base requirements are met:

Если установлено подключение HTTP/2, HttpRequest.Protocol возвращает HTTP/2.If an HTTP/2 connection is established, HttpRequest.Protocol reports HTTP/2.

Если установлено подключение HTTP/2, HttpRequest.Protocol возвращает HTTP/1.1.If an HTTP/2 connection is established, HttpRequest.Protocol reports HTTP/1.1.

Протокол HTTP/2 включен по умолчанию.HTTP/2 is enabled by default. Если не удается установить подключение HTTP/2, применяется резервный вариант HTTP/1.1.If an HTTP/2 connection isn't established, the connection falls back to HTTP/1.1. В будущих версиях Windows будут доступны флаги конфигурации HTTP/2, в том числе возможность отключения HTTP/2 с использованием HTTP.sys.In a future release of Windows, HTTP/2 configuration flags will be available, including the ability to disable HTTP/2 with HTTP.sys.

Проверка подлинности в режиме ядра с помощью KerberosKernel mode authentication with Kerberos

HTTP.sys делегирует задачи в проверку подлинности в режиме ядра с помощью протокола проверки подлинности Kerberos.HTTP.sys delegates to kernel mode authentication with the Kerberos authentication protocol. Проверка подлинности в режиме пользователя не поддерживается с Kerberos и HTTP.sys.User mode authentication isn't supported with Kerberos and HTTP.sys. Необходимо использовать учетную запись компьютера для расшифровки маркера/билета Kerberos, полученного из Active Directory и переадресованного клиентом на сервер для проверки подлинности пользователя.The machine account must be used to decrypt the Kerberos token/ticket that's obtained from Active Directory and forwarded by the client to the server to authenticate the user. Зарегистрируйте имя субъекта-службы (SPN) для узла, а не пользователя приложения.Register the Service Principal Name (SPN) for the host, not the user of the app.

Способы применения HTTP.sysHow to use HTTP.sys

Настройка приложения ASP.NET Core для использования HTTP.sysConfigure the ASP.NET Core app to use HTTP.sys

  1. Ссылка на пакет в файле проекта не требуется при использовании метапакета Microsoft.AspNetCore.App (nuget.org) (ASP.NET Core 2.1 или более поздней версии).A package reference in the project file isn't required when using the Microsoft.AspNetCore.App metapackage (nuget.org) (ASP.NET Core 2.1 or later). Если метапакет Microsoft.AspNetCore.App не используется, добавьте ссылку на пакет в файл Microsoft.AspNetCore.Server.HttpSys.When not using the Microsoft.AspNetCore.App metapackage, add a package reference to Microsoft.AspNetCore.Server.HttpSys.

  2. Вызовите метод расширения UseHttpSys при создании узла, указав все необходимые параметры HttpSysOptions.Call the UseHttpSys extension method when building the host, specifying any required HttpSysOptions. В следующем примере для параметров задаются значения по умолчанию:The following example sets options to their default values:

public static IWebHostBuilder CreateWebHostBuilder(string[] args) =>
   WebHost.CreateDefaultBuilder(args)
       .UseStartup<Startup>()
       .UseHttpSys(options =>
       {
           options.AllowSynchronousIO = false;
           options.Authentication.Schemes = AuthenticationSchemes.None;
           options.Authentication.AllowAnonymous = true;
           options.MaxConnections = null;
           options.MaxRequestBodySize = 30000000;
           options.UrlPrefixes.Add("http://localhost:5000");
       });
public static IWebHostBuilder CreateWebHostBuilder(string[] args) =>
    WebHost.CreateDefaultBuilder(args)
        .UseStartup<Startup>()
        .UseHttpSys(options =>
        {
            options.AllowSynchronousIO = true;
            options.Authentication.Schemes = AuthenticationSchemes.None;
            options.Authentication.AllowAnonymous = true;
            options.MaxConnections = null;
            options.MaxRequestBodySize = 30000000;
            options.UrlPrefixes.Add("http://localhost:5000");
        });

Дополнительная настройка HTTP.sys выполняется с помощью параметров реестра.Additional HTTP.sys configuration is handled through registry settings.

Параметры HTTP.sysHTTP.sys options

СвойствоProperty ОписаниеDescription Значение по умолчаниюDefault
AllowSynchronousIOAllowSynchronousIO Указывает, разрешен ли синхронные операции ввода-вывода для HttpContext.Request.Body и HttpContext.Response.Body.Control whether synchronous input/output is allowed for the HttpContext.Request.Body and HttpContext.Response.Body. false
Authentication.AllowAnonymousAuthentication.AllowAnonymous Разрешает анонимные запросы.Allow anonymous requests. true
Authentication.SchemesAuthentication.Schemes Указывает разрешенные схемы аутентификации.Specify the allowed authentication schemes. Может быть изменен в любое время до удаления прослушивателя.May be modified at any time prior to disposing the listener. Предоставляет значения, полученные при перечислении AuthenticationSchemes: Basic, Kerberos, Negotiate, None и NTLM.Values are provided by the AuthenticationSchemes enum: Basic, Kerberos, Negotiate, None, and NTLM. None
EnableResponseCachingEnableResponseCaching Выполняет попытку кэшировать режим ядра для ответов с допустимыми заголовками.Attempt kernel-mode caching for responses with eligible headers. Ответ не может включать заголовки Set-Cookie, Vary или Pragma.The response may not include Set-Cookie, Vary, or Pragma headers. Он должен включать заголовок Cache-Control со значением public, а также значение shared-max-age или max-age заголовок Expires.It must include a Cache-Control header that's public and either a shared-max-age or max-age value, or an Expires header. true
MaxAccepts Максимальное число одновременных попыток.The maximum number of concurrent accepts. 5 × Environment.
ProcessorCount
5 × Environment.
ProcessorCount
MaxConnections Максимальное число попыток установить одновременное подключение.The maximum number of concurrent connections to accept. Использует -1 для бесконечных циклов.Use -1 for infinite. Использует null для работы с параметром реестра на уровне компьютера.Use null to use the registry's machine-wide setting. null
Без ограничений.(unlimited)
MaxRequestBodySize См. раздел MaxRequestBodySize.See the MaxRequestBodySize section. 30 000 000 байт.30000000 bytes
(~28,6 МБ).(~28.6 MB)
RequestQueueLimit Максимально допустимое число запросов в очереди.The maximum number of requests that can be queued. 1000.1000
ThrowWriteExceptions Указывает, следует ли вызывать исключение или завершать работу нормально, когда запись текста ответа завершается ошибкой из-за отключения клиента.Indicate if response body writes that fail due to client disconnects should throw exceptions or complete normally. false
Нормальное завершение.(complete normally)
Timeouts Предоставляет конфигурацию TimeoutManager HTTP.sys, которую также можно настроить в реестре.Expose the HTTP.sys TimeoutManager configuration, which may also be configured in the registry. Дополнительные сведения о каждом параметре, включая значения по умолчанию, см. здесь:Follow the API links to learn more about each setting, including default values:
UrlPrefixes Указывает UrlPrefixCollection для регистрации с использованием HTTP.sys.Specify the UrlPrefixCollection to register with HTTP.sys. Удобнее всего использовать параметр UrlPrefixCollection.Add, который добавляет префикс к коллекции.The most useful is UrlPrefixCollection.Add, which is used to add a prefix to the collection. Могут быть изменены в любое время до удаления прослушивателя.These may be modified at any time prior to disposing the listener.
Свойство.Property ОписаниеDescription Значение по умолчаниюDefault
AllowSynchronousIOAllowSynchronousIO Указывает, разрешен ли синхронные операции ввода-вывода для HttpContext.Request.Body и HttpContext.Response.Body.Control whether synchronous input/output is allowed for the HttpContext.Request.Body and HttpContext.Response.Body. true
Authentication.AllowAnonymousAuthentication.AllowAnonymous Разрешает анонимные запросы.Allow anonymous requests. true
Authentication.SchemesAuthentication.Schemes Указывает разрешенные схемы аутентификации.Specify the allowed authentication schemes. Может быть изменен в любое время до удаления прослушивателя.May be modified at any time prior to disposing the listener. Предоставляет значения, полученные при перечислении AuthenticationSchemes: Basic, Kerberos, Negotiate, None и NTLM.Values are provided by the AuthenticationSchemes enum: Basic, Kerberos, Negotiate, None, and NTLM. None
EnableResponseCachingEnableResponseCaching Выполняет попытку кэшировать режим ядра для ответов с допустимыми заголовками.Attempt kernel-mode caching for responses with eligible headers. Ответ не может включать заголовки Set-Cookie, Vary или Pragma.The response may not include Set-Cookie, Vary, or Pragma headers. Он должен включать заголовок Cache-Control со значением public, а также значение shared-max-age или max-age заголовок Expires.It must include a Cache-Control header that's public and either a shared-max-age or max-age value, or an Expires header. true
MaxAccepts Максимальное число одновременных попыток.The maximum number of concurrent accepts. 5 × Environment.
ProcessorCount
5 × Environment.
ProcessorCount
MaxConnections Максимальное число попыток установить одновременное подключение.The maximum number of concurrent connections to accept. Использует -1 для бесконечных циклов.Use -1 for infinite. Использует null для работы с параметром реестра на уровне компьютера.Use null to use the registry's machine-wide setting. null
Без ограничений.(unlimited)
MaxRequestBodySize См. раздел MaxRequestBodySize.See the MaxRequestBodySize section. 30 000 000 байт.30000000 bytes
(~28,6 МБ).(~28.6 MB)
RequestQueueLimit Максимально допустимое число запросов в очереди.The maximum number of requests that can be queued. 1000.1000
ThrowWriteExceptions Указывает, следует ли вызывать исключение или завершать работу нормально, когда запись текста ответа завершается ошибкой из-за отключения клиента.Indicate if response body writes that fail due to client disconnects should throw exceptions or complete normally. false
Нормальное завершение.(complete normally)
Timeouts Предоставляет конфигурацию TimeoutManager HTTP.sys, которую также можно настроить в реестре.Expose the HTTP.sys TimeoutManager configuration, which may also be configured in the registry. Дополнительные сведения о каждом параметре, включая значения по умолчанию, см. здесь:Follow the API links to learn more about each setting, including default values:
UrlPrefixes Указывает UrlPrefixCollection для регистрации с использованием HTTP.sys.Specify the UrlPrefixCollection to register with HTTP.sys. Удобнее всего использовать параметр UrlPrefixCollection.Add, который добавляет префикс к коллекции.The most useful is UrlPrefixCollection.Add, which is used to add a prefix to the collection. Могут быть изменены в любое время до удаления прослушивателя.These may be modified at any time prior to disposing the listener.

MaxRequestBodySizeMaxRequestBodySize

Максимально допустимый размер текста запроса в байтах.The maximum allowed size of any request body in bytes. Если задано значение null, размер максимального запроса не ограничен.When set to null, the maximum request body size is unlimited. Это ограничение не оказывает влияния на обновленные подключения, которые не имеют ограничений.This limit has no effect on upgraded connections, which are always unlimited.

Чтобы переопределить это ограничение в приложении ASP.NET Core MVC для IActionResult, рекомендуется использовать атрибут RequestSizeLimitAttribute в методе действия:The recommended method to override the limit in an ASP.NET Core MVC app for a single IActionResult is to use the RequestSizeLimitAttribute attribute on an action method:

[RequestSizeLimit(100000000)]
public IActionResult MyActionMethod()

При попытке приложения настроить ограничение для запроса после того, как приложение начало считывать запрос, возникает исключение.An exception is thrown if the app attempts to configure the limit on a request after the app has started reading the request. Свойство IsReadOnly указывает на то, что свойство MaxRequestBodySize находится в состоянии только для чтения и настраивать ограничение слишком поздно.An IsReadOnly property can be used to indicate if the MaxRequestBodySize property is in a read-only state, meaning it's too late to configure the limit.

Если приложение должно переопределять MaxRequestBodySize по запросу, используйте IHttpMaxRequestBodySizeFeature:If the app should override MaxRequestBodySize per-request, use the IHttpMaxRequestBodySizeFeature:

public void Configure(IApplicationBuilder app, IHostingEnvironment env, 
    ILogger<Startup> logger, IServer server)
{
    app.Use(async (context, next) =>
    {
        context.Features.Get<IHttpMaxRequestBodySizeFeature>()
            .MaxRequestBodySize = 10 * 1024;

        var serverAddressesFeature = 
            app.ServerFeatures.Get<IServerAddressesFeature>();
        var addresses = string.Join(", ", serverAddressesFeature?.Addresses);

        logger.LogInformation($"Addresses: {addresses}");

        await next.Invoke();
    });

    if (env.IsDevelopment())
    {
        app.UseDeveloperExceptionPage();
    }
    else
    {
        app.UseExceptionHandler("/Error");
        app.UseHsts();
    }

    // Enable HTTPS Redirection Middleware when hosting the app securely.
    //app.UseHttpsRedirection();
    app.UseStaticFiles();
    app.UseCookiePolicy();
    app.UseMvc();
}
  1. При использовании Visual Studio убедитесь, что приложение не настроено для запуска IIS или IIS Express.If using Visual Studio, make sure the app isn't configured to run IIS or IIS Express.

    В Visual Studio профиль запуска по умолчанию использует IIS Express.In Visual Studio, the default launch profile is for IIS Express. Чтобы запустить проект как консольное приложение, измените выбранный профиль вручную, как показано на следующем снимке экрана.To run the project as a console app, manually change the selected profile, as shown in the following screen shot:

    Выбор профиля консольного приложения

Настройка Windows ServerConfigure Windows Server

  1. Определите, какие порты нужно открыть для приложения, и используйте брандмауэр Windows или командлет PowerShell New-NetFirewallRule, чтобы открыть порты брандмауэра для доступа трафика к HTTP.sys.Determine the ports to open for the app and use Windows Firewall or the New-NetFirewallRule PowerShell cmdlet to open firewall ports to allow traffic to reach HTTP.sys. В следующих командах и конфигурации приложения используется порт 443.In the following commands and app configuration, port 443 is used.

  2. При развертывании на виртуальных машинах Azure откройте эти порты в группе безопасности сети.When deploying to an Azure VM, open the ports in the Network Security Group. В следующих командах и конфигурации приложения используется порт 443.In the following commands and app configuration, port 443 is used.

  3. При необходимости получите и установите сертификаты X.509.Obtain and install X.509 certificates, if required.

    В Windows создайте самозаверяющие сертификаты с помощью командлета PowerShell New-SelfSignedCertificate.On Windows, create self-signed certificates using the New-SelfSignedCertificate PowerShell cmdlet. Примеры, которые не поддерживаются, см. в разделе UpdateIISExpressSSLForChrome.ps1.For an unsupported example, see UpdateIISExpressSSLForChrome.ps1.

    Установите самозаверяющие или подписанные центром сертификации сертификаты в хранилище сервера, выбрав Локальный компьютер > Личный.Install either self-signed or CA-signed certificates in the server's Local Machine > Personal store.

  4. Если приложение является развертыванием, не зависящим от платформы, установите NET Core или .NET Framework (или обе платформы, если это приложение .NET Core, предназначенное для .NET Framework).If the app is a framework-dependent deployment, install .NET Core, .NET Framework, or both (if the app is a .NET Core app targeting the .NET Framework).

    • .NET Core — если приложению требуется .NET Core, скачайте установщик среды выполнения .NET Core на странице скачивания .NET Core и запустите его..NET Core – If the app requires .NET Core, obtain and run the .NET Core Runtime installer from .NET Core Downloads. Не устанавливайте полный пакет SDK на сервере.Don't install the full SDK on the server.
    • .NET Framework — если приложению требуется .NET Framework, см. руководство по установке..NET Framework – If the app requires .NET Framework, see the .NET Framework installation guide. Установите требуемую платформу .NET Framework.Install the required .NET Framework. Установщик последней версии .NET Framework доступен на странице скачивания .NET.The installer for the latest .NET Framework is available from the .NET Core Downloads page.

    Если приложение развертывается автономно, в его развертывание включена среда выполнения.If the app is a self-contained deployment, the app includes the runtime in its deployment. Устанавливать .NET Framework на сервере не нужно.No framework installation is required on the server.

  5. Настройте URL-адреса и порты в приложении.Configure URLs and ports in the app.

    По умолчанию платформа ASP.NET Core привязана к http://localhost:5000.By default, ASP.NET Core binds to http://localhost:5000. Чтобы настроить префиксы URL-адресов и порты, используйте следующие параметры:To configure URL prefixes and ports, options include:

    • UseUrls
    • Аргументы командной строки urls.urls command-line argument
    • Переменная среды ASPNETCORE_URLS.ASPNETCORE_URLS environment variable
    • UrlPrefixes

    В следующем примере кода показано, как использовать UrlPrefixes с локальным IP-адресом сервера 10.0.0.4 через порт 443.The following code example shows how to use UrlPrefixes with the server's local IP address 10.0.0.4 on port 443:

    public static IWebHostBuilder CreateWebHostBuilder(string[] args) =>
        WebHost.CreateDefaultBuilder(args)
            .UseStartup<Startup>()
            .UseHttpSys(options =>
            {
                options.UrlPrefixes.Add("https://10.0.0.4:443");
            });
    

    Преимущество UrlPrefixes заключается в том, что при неправильном формате префиксов сразу же создается сообщение об ошибке.An advantage of UrlPrefixes is that an error message is generated immediately for improperly formatted prefixes.

    Этот параметр в UrlPrefixes переопределяет параметры UseUrls/urls/ASPNETCORE_URLS.The settings in UrlPrefixes override UseUrls/urls/ASPNETCORE_URLS settings. Таким образом, преимущество переменных средыUseUrls, urlsи ASPNETCORE_URLS заключается в возможности быстрого переключения между Kestrel и HTTP.sys.Therefore, an advantage of UseUrls, urls, and the ASPNETCORE_URLS environment variable is that it's easier to switch between Kestrel and HTTP.sys.

    HTTP.sys использует форматы строк UrlPrefix API сервера HTTP.HTTP.sys uses the HTTP Server API UrlPrefix string formats.

    Предупреждение

    Не используйте привязки с подстановочными знаками (http://*:80/ и http://+:80) на верхнем уровне.Top-level wildcard bindings (http://*:80/ and http://+:80) should not be used. Они создают уязвимости и ставят под угрозу безопасность приложения.Top-level wildcard bindings create app security vulnerabilities. Сюда относятся и строгие, и нестрогие подстановочные знаки.This applies to both strong and weak wildcards. Вместо подстановочных знаков используйте имена узлов или IP-адреса в явном виде.Use explicit host names or IP addresses rather than wildcards. Привязки с подстановочными знаками на уровне дочерних доменов (например, *.mysub.com) не создают таких угроз безопасности, если вы полностью контролируете родительский домен (в отличие от варианта *.com, создающего уязвимость).Subdomain wildcard binding (for example, *.mysub.com) isn't a security risk if you control the entire parent domain (as opposed to *.com, which is vulnerable). Дополнительные сведения см. в стандарте RFC 7230, раздел 5.4, Host.For more information, see RFC 7230: Section 5.4: Host.

  6. Предварительно зарегистрируйте префиксы URL-адресов на сервере.Preregister URL prefixes on the server.

    Встроенным средством для настройки сервера HTTP.sys является netsh.exe.The built-in tool for configuring HTTP.sys is netsh.exe. С помощьюnetsh.exe можно зарезервировать префиксы URL-адресов и назначить сертификаты X.509.netsh.exe is used to reserve URL prefixes and assign X.509 certificates. Для использования этого средства требуются права администратора.The tool requires administrator privileges.

    Используйте средство netsh.exe для регистрации URL-адреса приложения.Use the netsh.exe tool to register URLs for the app:

    netsh http add urlacl url=<URL> user=<USER>
    
    • <URL> — полное имя URL-адреса.<URL> – The fully qualified Uniform Resource Locator (URL). Не используйте привязки с подстановочными знаками.Don't use a wildcard binding. Используйте допустимое имя узла или локальный IP-адрес.Use a valid hostname or local IP address. URL-адрес должен включать косую черту в конце.The URL must include a trailing slash.
    • <USER> — определяет имя пользователя или группы пользователей.<USER> – Specifies the user or user-group name.

    В следующем примере сервер имеет локальный IP-адрес 10.0.0.4.In the following example, the local IP address of the server is 10.0.0.4:

    netsh http add urlacl url=https://10.0.0.4:443/ user=Users
    

    При регистрации URL-адреса средство возвращает ответ URL reservation successfully added.When a URL is registered, the tool responds with URL reservation successfully added.

    Чтобы удалить зарегистрированный URL-адрес, используйте команду delete urlacl.To delete a registered URL, use the delete urlacl command:

    netsh http delete urlacl url=<URL>
    
  7. Зарегистрируйте сертификаты X.509 на сервере.Register X.509 certificates on the server.

    Используйте средство netsh.exe для регистрации сертификатов приложения.Use the netsh.exe tool to register certificates for the app:

    netsh http add sslcert ipport=<IP>:<PORT> certhash=<THUMBPRINT> appid="{<GUID>}"
    
    • <IP> — задает локальный IP-адрес для привязки.<IP> – Specifies the local IP address for the binding. Не используйте привязки с подстановочными знаками.Don't use a wildcard binding. Используйте допустимый IP-адрес.Use a valid IP address.
    • <PORT> — указывает порт для прокси-сервера.<PORT> – Specifies the port for the binding.
    • <THUMBPRINT> — отпечаток сертификата X.509.<THUMBPRINT> – The X.509 certificate thumbprint.
    • <GUID> — глобальный уникальный идентификатор приложения, задаваемый разработчиком в информационных целях.<GUID> – A developer-generated GUID to represent the app for informational purposes.

    В справочных целях храните GUID в приложении в виде тега пакета.For reference purposes, store the GUID in the app as a package tag:

    • В Visual Studio сделайте следующее:In Visual Studio:
      • Откройте свойства проекта приложения, щелкнув приложение правой кнопкой мыши в обозревателе решений и выбрав Properties (Свойства).Open the app's project properties by right-clicking on the app in Solution Explorer and selecting Properties.
      • Перейдите на вкладку Package (Пакет).Select the Package tab.
      • Введите GUID, который вы указали в поле Tags (Теги).Enter the GUID that you created in the Tags field.
    • Если Visual Studio не используется:When not using Visual Studio:
      • Откройте файл проекта приложения.Open the app's project file.

      • Добавьте свойство <PackageTags> в новую или существующую группу <PropertyGroup> с GUID, который вы создали.Add a <PackageTags> property to a new or existing <PropertyGroup> with the GUID that you created:

        <PropertyGroup>
          <PackageTags>9412ee86-c21b-4eb8-bd89-f650fbf44931</PackageTags>
        </PropertyGroup>
        

    В следующем примере:In the following example:

    • Локальный IP-адрес сервера — 10.0.0.4.The local IP address of the server is 10.0.0.4.
    • Сетевой генератор случайных GUID задает значение appid.An online random GUID generator provides the appid value.
    netsh http add sslcert 
        ipport=10.0.0.4:443 
        certhash=b66ee04419d4ee37464ab8785ff02449980eae10 
        appid="{9412ee86-c21b-4eb8-bd89-f650fbf44931}"
    

    При регистрации сертификата средство возвращает ответ SSL Certificate successfully added.When a certificate is registered, the tool responds with SSL Certificate successfully added.

    Чтобы удалить регистрацию сертификата, используйте команду delete sslcert.To delete a certificate registration, use the delete sslcert command:

    netsh http delete sslcert ipport=<IP>:<PORT>
    

    Дополнительные сведения см. в справочной документации по netsh.exe:Reference documentation for netsh.exe:

  8. Запустите приложение.Run the app.

    Если выполнена привязка к localhost через HTTP (не HTTPS) с номером порта больше 1024, для запуска приложения права администратора не требуются.Administrator privileges aren't required to run the app when binding to localhost using HTTP (not HTTPS) with a port number greater than 1024. При других конфигурациях (например, при использовании локального IP-адреса или привязки к порту 443) для запуска приложения требуются права администратора.For other configurations (for example, using a local IP address or binding to port 443), run the app with administrator privileges.

    Приложение отвечает по общедоступному IP-адресу сервера.The app responds at the server's public IP address. В этом примере подключение к серверу происходит через Интернет по общедоступному IP-адресу 104.214.79.47 сервера.In this example, the server is reached from the Internet at its public IP address of 104.214.79.47.

    В этом примере используется сертификат разработки.A development certificate is used in this example. После обхода предупреждения о ненадежном сертификате браузера происходит безопасная загрузка страницы.The page loads securely after bypassing the browser's untrusted certificate warning.

    Окно браузера с отображаемой страницей индекса приложения

Сценарии использования прокси-сервера и подсистемы балансировки нагрузкиProxy server and load balancer scenarios

Для приложений, размещенных с помощью файла HTTP.sys, которые взаимодействуют с запросами из Интернета или корпоративной сети, может потребоваться дополнительная настройка при размещении за прокси-серверами и подсистемами балансировки нагрузки.For apps hosted by HTTP.sys that interact with requests from the Internet or a corporate network, additional configuration might be required when hosting behind proxy servers and load balancers. Дополнительные сведения см. в разделе Настройка ASP.NET Core для работы с прокси-серверами и подсистемами балансировки нагрузки.For more information, see Configure ASP.NET Core to work with proxy servers and load balancers.

Дополнительные ресурсыAdditional resources