SignalR com SSL autoassinado e auto-host
Tentei minha sorte na pesquisa, mas até agora não há alegria.
Gostaria de conectar um cliente javascript SignalR a uma ligação de serviço do Windows SignalR auto-hospedada a um certificado SSL autoassinado.
Meu aplicativo funciona muito bem em http, mas o cliente se desconecta repetidamente quando o Owin WebApplication começa a usar https.
Aqui está o que eu fiz para configurar o SignalR com SSL.
Criei um certificado auto-assinado usando o IISImportou o certificado para as Autoridades de Certificação Raiz Confiáveis no mmc (não tenho certeza se isso ajudou)Execute o comando NETSH para ligar o SSL à porta 8080
netsh http add sslcert ipport=0.0.0.0:8080 certhash=123456f6790a35f4b017b55d09e28f7ebe001bd appid={12345678-db90-4b66-8b01-88f7af2e36bf}
Código adicionado nas instâncias de HubConnection auto-hospedado para adicionar SSL exportado assim (embora isso não importe, porque é o cliente que não pode se conectar):
if (File.Exists("MyCert.cer")
&& Settings.GetSetting(Settings.Setting.SrProtocol).Equals("https", StringComparison.InvariantCultureIgnoreCase))
connection.AddClientCertificate(X509Certificate.CreateFromCertFile("MyCert.cer"));
Iniciando o Owin WebApplication usando https (isso deve criar a ligação no http.sys)
string registerUrl = string.Format("{0}://SOME.WHERE.COM:{1}", Service.Server.SrProtocol, Service.Server.SrPort);
WebApp.Start<StartUp>(registerUrl);
Na documentação do SignalR 2.0, diz:
Para iniciar o servidor da web, chame WebApplication.Start (endpoint). Agora você deve conseguir navegar até endpoint / signalr / hubs em seu navegador.
Quando eu navego para o URLhttp://SOME.WHERE.COM:8080/signalr/hubs Estou recebendo com sucesso o javascript que aciona o SignalR.
Quando eu navego para o URLhttps://SOME.WHERE.COM:8080/signalr/hubs Não tenho êxito e recebo "A conexão com o servidor foi redefinida" usando FF.
Alguns pontos adicionais que eu considerei:
NETSH SHOW indica que o URL está registrado
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 indica que o certificado SSL está vinculado a 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
Qualquer ajuda é muito apreciada!