Последние изменения, выделенные жирным шрифтом, я использую класс .net HttpListener
, но я не буду запускать это приложение на IIS и не использую ASP.net. Этот веб-сайт описывает, какой код на самом деле использовать для реализации SSL с asp.net, и этот сайт описывает, как настроить сертификаты (хотя я не уверен, работает ли он только для IIS или нет).
Документация класса описывает различные типы аутентификации (базовая, дайджест, Windows и т.д.) - ни один из них не относится к SSL. Это говорит о том, что если используется HTTPS, вам нужно будет установить сертификат сервера. Это будет однострочное свойство, а HttpListener
определит остальные?
Короче говоря, мне нужно знать, как настроить сертификаты и как изменить код для реализации SSL.
Хотя это не происходит, когда я пытаюсь получить доступ к HTTPS, я заметил ошибку в своем журнале системных событий - источником является "Schannel", а содержание сообщения:
При попытке доступа к закрытому ключу учетных данных сервера SSL произошла неустранимая ошибка. Код ошибки, возвращаемый из криптографического модуля: 0x80090016.
Редактировать:
Шаги, предпринятые до сих пор
- Создан работающий HTTPListener в С#, который работает для HTTP-соединений (например, " http://localhost: 8089/foldername/ "
- Создан сертификат с использованием makecert.exe
- Добавлен сертификат, которому можно доверять, используя certmgr.exe
- Использовал Httpcfg.exe для прослушивания SSL-соединений на тестовом порту (например, 8090)
- Добавлен порт 8080 в HTTPListener через listener.Prefixes.Add(https://localhost: 8090/foldername/ ");
- проверил HTTP-соединение клиента, например (http://localhost: 8089/foldername/ ") в браузере, и получил правильный ответ
- протестировал клиентское соединение HTTPS, например (http://localhost: 8090/foldername/ ") в браузере и получил сообщение" Передача данных прервана "(в Firefox)
- Отладка в Visual Studio показывает, что обратный вызов слушателя, который получает запросы, никогда не срабатывает при запуске соединения HTTPS - я не вижу места, где я мог бы установить точку останова, чтобы перехватить что-либо еще раньше.
- netstat показывает, что порты прослушивания открыты как для HTTPS, так и для HTTP. порт HTTPS переходит в TIME_WAIT после попытки подключения.
- Fiddler и HTTPAnalyzer не улавливают какой-либо трафик, я полагаю, что он недостаточно далеко уходит в процессе, чтобы отображаться в этих инструментах анализа HTTP
Вопросы
- В чем может быть проблема?
- Есть ли фрагмент кода .Net, который мне не хватает (имеется в виду, что в С# мне нужно сделать больше, чем просто добавить префикс к слушателю, указывающий на HTTPS, что я и сделал)
- Вы где-то пропустили этап настройки?
- Что еще я могу сделать, чтобы проанализировать проблему?
- Является ли сообщение об ошибке в журнале системных событий признаком проблемы? Если так, то как бы это исправить?