Пытался удачи в исследовании, но до сих пор не было радости.
Я хотел бы связать JavaScript-клиент SignalR с самообслуживающей связью SignalR Windows Service с самоподписанным сертификатом SSL.
Мое приложение работает очень хорошо по http, но клиент повторно отключается, когда Owin WebApplication начинает использовать https.
Вот что я сделал для настройки SignalR с SSL.
- Создал самоподписанный сертификат с использованием IIS
- Импортировал сертификат в доверенные корневые центры сертификации в mmc (не уверен, что это помогло)
-
Команда Ran NETSH для привязки SSL к порту 8080
netsh http add sslcert ipport=0.0.0.0:8080 certhash=123456f6790a35f4b017b55d09e28f7ebe001bd appid={12345678-db90-4b66-8b01-88f7af2e36bf}
-
Добавлен код в самообслуживаемые экземпляры HubConnection для добавления экспортированного SSL как это (хотя это не имеет значения, потому что клиент, который не может подключиться):
if (File.Exists("MyCert.cer") && Settings.GetSetting(Settings.Setting.SrProtocol).Equals("https", StringComparison.InvariantCultureIgnoreCase)) connection.AddClientCertificate(X509Certificate.CreateFromCertFile("MyCert.cer"));
-
Запуск Owin WebApplication с использованием https (это должно создать привязку в http.sys)
string registerUrl = string.Format("{0}://SOME.WHERE.COM:{1}", Service.Server.SrProtocol, Service.Server.SrPort); WebApp.Start<StartUp>(registerUrl);
В документации SignalR 2.0 говорится:
Чтобы запустить веб-сервер, вызовите WebApplication.Start(конечная точка). Теперь вы можете перейти к конечной точке/сигналу/узлам в вашем браузере.
Когда я просматриваю URL http://SOME.WHERE.COM:8080/signalr/hubs, я успешно получаю javascript, который управляет SignalR.
Когда я просматриваю URL https://SOME.WHERE.COM:8080/signalr/hubs, я не увенчался успехом, и я получаю "Соединение с сервером было reset" с использованием FF.
Некоторые дополнительные моменты, которые я рассмотрел:
-
NETSH SHOW указывает, что URL зарегистрирован
URL group ID: E300000240000022 State: Active Request queue name: Request queue is unnamed. Properties: Max bandwidth: inherited Max connections: inherited Timeouts: Timeout values inherited Number of registered URLs: 1 Registered URLs: HTTPS://SOME.WHERE.COM:8080/
-
NETSH SHOW указывает, что сертификат SSL привязан к 8080:
IP:port : 0.0.0.0:8080 Certificate Hash : 123456f6790a35f4b017b55d09e28f7ebe001bd Application ID : {12345678-db90-4b66-8b01-88f7af2e36bf} Certificate Store Name : (null) Verify Client Certificate Revocation : Enabled Verify Revocation Using Cached Client Certificate Only : Disabled Usage Check : Enabled Revocation Freshness Time : 0 URL Retrieval Timeout : 0 Ctl Identifier : (null) Ctl Store Name : (null) DS Mapper Usage : Disabled Negotiate Client Certificate : Disabled
Любая помощь очень ценится!