HttpListener (. NET Core) не работает с https на windows докерах - PullRequest
0 голосов
/ 21 февраля 2020

. Net Основная версия: 3.1 ОС: Windows 10 (1903) Docker версия: 19.03.5

Привет

Я делаю свое первое доказательство концепции на докерах и. Net Core для изучения возможности перенести всю нашу инфраструктуру в докеры с. Net Core. Я пытался создать простой http-прослушиватель, который бы возвращал страницу приветствия. Я нашел проблему https://github.com/dotnet/core/issues/3072 очень полезной.

Короче говоря, я пытаюсь открыть два прослушивателя http: http: // +: 1234 https: // +: 12345

Чтобы это работало, в ОС хоста есть два резервирования ACL URL:

Reserved URL            : http://+:1234/
    User: \Everyone
        Listen: Yes
        Delegate: No
        SDDL: D:(A;;GX;;;WD)

Reserved URL            : https://+:12345/
    User: \Everyone
        Listen: Yes
        Delegate: No
        SDDL: D:(A;;GX;;;WD)

Также к https применяется действительный сертификат порт:

Привязки сертификатов SSL:

IP:port                      : 0.0.0.0:12345
Certificate Hash             : a05077849c0835b0db2b16656cd42651122f283d
Application ID               : {00000000-0000-0000-0000-000000000000}

...

Далее оба порта перенаправляются в контейнер:

docker run - -user ContainerAdministrator -p 1234: 1234 -p 12345: 12345 --name = https_container https_server_image

И контейнер работает под ContainerAdministrator.

HttpListener довольно хорошо работает на порте http. Например, попытка загрузить «http://localhost: 1234 / » работает нормально (пример кода просто возвращает «Hello word» html page). Попытка получить доступ к SSL-соединению для "https://localhost: 12345 / " завершается неудачно в браузере с "ERR_CONNECTION_RESET" в Chrome / Edge, "PR_CONNECT_RESET_ERROR" в Mozilla.

Интересно то, что оба Экземпляры HttpListener запускаются без проблем в контейнере, и нет никаких исключений. Конечно, то же самое тестовое приложение работает как чудо, когда запускается непосредственно на хост-машине без docker контейнеризации.

Так мне интересно, я что-то здесь пропускаю? Это намеренное поведение? Заранее спасибо за помощь!

1 Ответ

0 голосов
/ 18 марта 2020

Согласно "официальному" ответу в. NET Core forum :

"В общем случае класс HttpListener является устаревшим компонентом, из которого мы портировали. NET Framework ( (Windows только) до. NET Core. Но функциональность HTTPS не поддерживается на Linux. См .: # 19752

Если вам нужен кроссплатформенный сервер HTTP / HTTPS, мы рекомендуем вам используйте ASP. NET Core. Компонент Kestrel полностью поддерживает HTTPS и доступен кроссплатформенно (Windows / Linux / Ma c). См .: https://docs.microsoft.com/en-us/aspnet/core/fundamentals/servers/kestrel?view=aspnetcore-3.1 "

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