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