Что ограничивает диапазон портов для HTTPS в.NET Core 2.2?
В файле launchSettings.json у меня есть следующее. Это работает, и я могу получить доступ к Swagger и остальной части страницы, используя https://localhost:44300/.
{ ...
"iisSettings": {
"windowsAuthentication": false,
"anonymousAuthentication": true,
"iisExpress": {
"applicationUrl": "http://localhost:52088",
"sslPort": 44300
}
}, ...
}
Когда я изменяю "sslPort": 44300, например, "sslPort": 44299, я все равно могу получить доступ к материалу, изменив URL соответствующим образом.
Однако, когда я установил значение 5100, я заметил, что содержимое больше не доступно. На самом деле, похоже, что рабочий диапазон довольно ограничен и сконцентрирован только около 44300.
О чем это?!
Я отключил брандмауэр, на всякий случай. В конфиге я попытался добавить URL-адреса, как это. Никаких изменений в поведении.
WebHost.CreateDefaultBuilder(args)
//.UseUrls("https://localhost/5100")
.UseStartup<Startup>();
Как заставить приложение правильно работать на выбранном порту?
Следуя документации для.NET Core 2.2, я добавил конфигурацию перенаправления следующим образом. Как и опасалось, это никак не отразилось на проблеме.
services.AddHttpsRedirection(_ =>
{
_.RedirectStatusCode = StatusCodes.Status307TemporaryRedirect;
_.HttpsPort = 5100;
});
Заметив, что сами документы предлагают 5001 в качестве альтернативного номера порта, я начинаю подозревать, что проблема может быть обнаружена в другом месте. Я воссоздал настройку на другом компьютере и смог воспроизвести ошибку. Тем не менее, оба компьютера настроены мной, поэтому было бы здорово, если бы кто-то не-я мог подтвердить поведение.
У меня есть подсказка, чтобы использовать Nmap для проверки ответов порта, и, очевидно, что-то отвечает на порт 5100. Это можно подтвердить с помощью TelNet. Тем не менее, Swagger, а также вызовы, использующие PostMan, по-прежнему терпят неудачу...
2 ответа
Документация для IIS Express гласит (мой акцент):
Если вы хотите проверить SSL-доступ к своему сайту, вы можете сделать это с помощью IIS Express, используя порт SSL между 44300 и 44399 и используя самозаверяющий сертификат IIS Express. Попытка использовать SSL с портом за пределами этого диапазона приводит к ошибке привязки URL-адреса, когда ваш веб-сайт запускается под управлением IIS Express.
На связанной странице docs.microsoft.com есть инструкции, которые описывают, как настроить ваш компьютер, чтобы разрешить это. Краткая версия:
- WIN-R> mmc.exe
- Меню Файл> Добавить / Удалить оснастку...
- Выберите Сертификаты в левой части и нажмите
Add >
кнопка - Выберите учетную запись компьютера,
Next >
а потомFinish
- Нажмите
Ok
закрыть окно " Добавить или удалить оснастку" - Разверните Сертификаты (Локальный компьютер) > Личные> Сертификаты в дереве в левой части
- Найдите сертификат, выданный localhost, с понятным именем IIS Express Development Certificate > Дважды щелкните, чтобы открыть его.
- Перейдите на вкладку " Подробности " и прокрутите вниз до конца, чтобы найти отпечаток.
- Скопируйте и вставьте значение (нажмите на него в списке, и значение будет перенесено в текстовое поле в нижней части окна)
Теперь вы сняли отпечаток для сертификата:
- Откройте командную строку от имени администратора
- Запустите команду
netsh http add sslcert ipport=0.0.0.0:5100 certhash=**Insert_Thumbprint_From_Step_9_Above_Here** appid={00112233-4455-6677-8899-AABBCCDDEEFF}
- Перезапустите IIS Express / ваш сеанс отладки
IIS Express теперь должен привязаться к 5100 (вы можете изменить порт в команде на шаге 2 выше на один из ваших вариантов), позволяя Visual Studio открывать окно браузера, которое загружает ваш сайт.
На панели инструментов будет работать значок IIS Express. Остановите сайт под портом 44300 через IIS Express и снова перезапустите сайт, и теперь он должен работать через ваш новый порт. Если это не сработает, просто выйдите из IIS Express и перезапустите сайт.