Кажется, существует много запутанной, иногда противоречивой информации о том, как сделать .NET HTTPListener совместимым с HTTPS. Я понимаю следующее:
Код C # нуждается в префиксе
https
(например,https://*:8443
), чтобы слушатель понял, что ему необходимо обслуживать запросы SSL на этом порту.Фактическое рукопожатие SSL происходит под прикрытием и обрабатывается
http.sys
(похоронено где-то на машине Windows). Код C # не должен явно управлять подтверждением SSL, потому что это происходит скрыто.На
httpListener
машине должен быть «доверенный сертификат X.509», и каким-то образом этот сертификат должен быть привязан к порту 8443 (в этом примере).
Правильно ли мое понимание выше? Если нет, пожалуйста, просветите меня.
Что касается сертификатов X.509, я понимаю:
- Используйте
makecert
для создания сертификата X.509. Этот сертификат сохраняется в личном хранилище, и его необходимо переместить в надежное хранилище (именно здесь будет искать HTTP-прослушиватель). Кажется, я могу использоватьcertMgr
, чтобы выполнить движение, или я могу использоватьmmc
, чтобы выполнить движение. Кажется, существует более одного формата сертификата X.509 (DER
,Base64
,pks
, pswd protected,pks
private и т. Д.) ... Есть ли предпочтительный формат, который я должен использовать?
Как только я получу сертификат в доверенном хранилище, мне нужно привязать его к TCP-порту. Я использую Windows 7: мне следует использовать httpcfg
или netsh
?