Conexão SSL / Redefinição de conexão com IISExpress

140

Estou usando o novo Visual Studio 2013 com IISExpress pela primeira vez (servidor de desenvolvimento ASP.net usado anteriormente no VS2010). Estou com problemas ao tentar depurar meu projeto.

É o que vejo no Chrome:

Não foi possível estabelecer uma conexão segura com o servidor. Isso pode ser um problema com o servidor ou pode estar exigindo um certificado de autenticação de cliente que você não possui. Código de erro: ERR_SSL_PROTOCOL_ERROR

Atualizei meu arquivo da web Properies -> para que o URL do projeto use um URL https agora. No entanto, depois de fazer isso, agora recebo um novo erro ao iniciar:

A conexão com o host local foi interrompida. Código de erro: ERR_CONNECTION_RESET

obrigado

Kevin
fonte
Verifique a minha resposta a uma pergunta semelhante stackoverflow.com/questions/28195505/...
Bogac
1
Poste aqui porque pode ser facilmente esquecido nas respostas abaixo. Se a resposta aceita não funcionar para você, tente o seguinte: stackoverflow.com/questions/20036984/…
IWriteApps
Alterar o número da porta, funciona para mim.
Torun

Respostas:

47

Se você estiver usando URLRewrite para forçar conexões SSL no seu web.config, provavelmente está reescrevendo o endereço do host local para forçar https. Se a depuração com SSL ativado não for importante para você e você estiver usando o URLRewrite, considere adicionar <add input="{HTTP_HOST}" pattern="localhost" negate="true" />à seção de reescrita do arquivo web.config. Ele interromperá a reescrita de qualquer endereço de host local, mas a deixará em um ambiente de produção. Se você não estiver usando URLRewrite ou precisar depurar usando SSL, http://www.hanselman.com/blog/WorkingWithSSLAtDevelopmentTimeIsEasierWithIISExpress.aspx pode ajudar. É para o VS2010, mas também deve ser suficiente para o VS2013.

djroedger
fonte
7
Fiz isso funcionar, adicionando essa linha para UrlRewrite e alterar a porta para estar na faixa ": 44300-: 44398" (ver resposta abaixo por uosef)
Rubanov
SIM! Depois de algumas horas quase perdendo a cabeça, foi isso que me ajudou!
Wok
363

Eu estava recebendo ERR_CONNECTION_RESET porque meu número de porta do aplicativo configurado do Visual Studio 2013 / IIS Express NÃO estava no intervalo : 44300-: 44398 . (Não me lembro de ter que dispensar nenhum aviso para sair desse intervalo.) Alterar o número da porta para algo nesse intervalo é tudo o que eu precisava fazer para fazê-lo funcionar.

Percebi isso depois de revisar a netsh http show sslcert > sslcert.txtsaída e clicar em algo que li recentemente sobre os números de porta.

Jason Kleban
fonte
53
Lamento apenas que tenha apenas um voto positivo para dar neste post. Como eu consertei esse tipo de bobagem antes do SO?
quillbreaker
6
Você também pode usar netsh http add sslcert ...para adicionar a porta que deseja usar. Útil em alguns casos.
brazilianldsjaguar
3
CRIKEY este comeu um monte de horas Eu nunca vou voltar ... netshpara o resgate, este é digno de um post ...
Jim
3
Descobri que esse intervalo de números de porta está documentado na seção Usando uma porta SSL personalizada da seção Manipulando falhas de ligação de URL na documentação do IIS Express .
Schmalls
2
Ainda trabalhou com o Visual Studio 2017 / IIS Express 10
TvdH 20/17
87

Certifique-se de remover os certificados 'localhost' anteriores, pois eles podem entrar em conflito com o certificado gerado pelo IIS Express. Eu tive esse mesmo erro (ERR_SSL_PROTOCOL_ERROR) e demorei muitas horas para finalmente descobrir depois de experimentar muitas "soluções". Meu erro foi que eu criei meu próprio certificado 'localhost' e havia dois deles. Eu tive que excluir os dois e o IIS Express recriá-lo.

Aqui está como você pode verificar e remover o certificado 'localhost':

  • Em Iniciar, digite -> mmc.exe
  • Arquivo -> Adicionar / Remover Snap-in ...
  • Selecione Certificados -> Adicionar> -> Conta do computador -> Computador local
  • Verifique em Certificados> Pessoal> Certificados
  • Verifique se o certificado de host local existe com um nome amigável "IIS Express Development Certificate". Caso contrário, exclua-o. Ou, se for múltiplo, exclua tudo.

No Visual Studio, selecione projeto e, na guia Propriedade, ative SSL = true. Salvar, criar e executar. O IIS Express gerará um novo certificado 'localhost'.

Nota: Se não funcionar, tente o seguinte: desabilite o IIS Express no projeto VS e interrompa todo o aplicativo em execução antes de remover o certificado 'localhost'. Além disso, você pode ir para 'painel de controle> programas' e Reparar o IIS Express.

ShaTin
fonte
2
No meu caso, as configurações de certificado do IIS foram perdidas, no entanto, os certificados estavam no disco. A configuração de certificados SSL e a atualização da ligação HTTPS no site ajudaram. É importante definir a ligação https novamente, mesmo se o certificado ssl já estiver selecionado na caixa de combinação.
Opewix
10
É necessário reparar o IIS Express. Agora funcionou perfeitamente. Obrigado
Homam 24/05
1
Obrigado. No meu caso, excluí o certificado acidentalmente do meu computador. Encontrei quando tentei executar este comando e dizia: "Falha na adição do certificado SSL, erro: 1312 Não existe uma sessão de logon especificada. Ele já pode ter sido encerrado". netsh http delete sslcert ipport=0.0.0.0:443 netsh http add sslcert ipport=0.0.0.0:443 appid="{GUID-APP-ID}" certhash="THUMBPRINTOFMYCERTIFICATEINHEXADECIMAL"
UKM 23/01
Foi isso! Cópias duplicadas e teve que fazer o reparo. Também é parte expressa.
madamission
36

Estou resumindo as etapas que me ajudaram a resolver esse problema:

  1. Verifique se o intervalo de portas SSL (usado pelo IIS Express) está entre 44300-44398

Durante a instalação, o IIS Express usa o HTTP.sys para reservar as portas 44300 a 44399 para uso SSL. Isso permite que usuários padrão (sem privilégios elevados) do IISExpress configurem e usem SSL. Para mais detalhes sobre isso, consulte aqui

  1. Execute o comando abaixo como administrador no prompt de comando. Isso produzirá as ligações do certificado SSL no computador. Nesta lista, encontre o certificado usado pelo IIS express para a porta correspondente:

netsh http show sslcert> sslcert.txt

  1. Procure os itens abaixo no sslcert.txt (no meu caso, o IIS Express estava sendo executado na porta 44300)

IP: porta : 0.0.0.0:44300

Hash do certificado : eb380ba6bd10fb4f597cXXXXXXXXXX

ID do aplicativo : {214124cd-d05b-4309-XXX-XXXXXXX}

  1. Procure também no console de gerenciamento expresso do IIS (RUN (Ctrl + R) -> inetmgr.exe) e encontre se o certificado correspondente existe nos Certificados do servidor

(Clique no ServerRoot -> na seção IIS () -> Abra os Certificados do servidor)

  1. Se o seu host local, por padrão, usar um certificado diferente daquele listado na Etapa 3, continue com as etapas abaixo

netsh http delete sslcert ipport = 0.0.0.0: 44300

http netsh adicione sslcert ipport = 0.0.0.0: 44300 certhash = New_Certificate_Hash_without_space appid = {214124cd-d05b-4309-XXX-XXXXXXX}

O New_Certificate_Hash será o seu certificado padrão associado ao seu host local (que encontramos na etapa 4) ou aquele que você deseja adicionar como um novo certificado.

PS Obrigado pela sua resposta uosɐſ (que me ajudou a resolver este problema)

Karthik
fonte
8
Ha, mudar a porta de 53xxx para 44300 fez o truque para mim.
cdonner
Tinha que fazer isso depois de passar do IIS para IISExpress
K0D4
2
Mudar a porta funcionou para mim também. Alguém sabe por que as portas precisam estar nesse intervalo e onde estão configuradas?
Jim Jim
Mudança de porta para a vitória! E o mesmo vale para o comentário de Jim sobre por que as portas precisam estar no intervalo 44300-44398?
TChadwick 22/02
Durante a instalação, o IIS Express usa Http.sys para reservar as portas 44300 a 44399 para uso SSL. Isso permite que usuários padrão (sem privilégios elevados) do IISExpress configurem e usem SSL. Para obter mais detalhes sobre isso, consulte aqui -> docs.microsoft.com/en-us/iis/extensions/using-iis-express/…
Karthik
26

O problema que eu estava enfrentando tinha a ver comigo, em algum momento, habilitando o HSTS para localhost e não percebendo que isso iria interromper meu http: // localhost: someport no IIS Express.

O HSTS informa ao navegador (Chrome no meu caso) que SEMPRE solicite um URL usando HTTPS. Portanto, mesmo que eu nem tivesse ativado o SSL para o meu aplicativo MVC 5, o navegador ainda tentaria acessar meu site usando HTTPS na URL em vez de HTTP.

O conserto?

  1. Navegue até o chrome: // net-internals / # hsts
  2. Na seção excluir, digite "localhost" e exclua o registro do Chrome.
O Gato de Botas
fonte
1
Sim, os hsts podem ser uma causa para esse problema. Isso fez com que eu pensasse, obrigado.
27418 Kosmo
12

Nenhuma das opções acima funcionou para mim. Eu tive que fazer o seguinte:

  1. IIS Express 8.0 não desinstalado
  2. Excluídas todas as configurações no diretório Meus documentos para o IIS Express
  3. Reinstalado o IIS Express 8.0
  4. Exclui o projeto na minha máquina local e baixei uma versão limpa para o TFS
  5. Executou o projeto - ele passou por SSL e eu posso depurar

Eu tenho as etapas a partir desta discussão.

Espero que isto ajude.

lopezbertoni
fonte
2
Acabei de instalar o iis express e reinstale-o. agora funciona
Xin
5
No meu caso, bastava reparar a instalação do IIS (no Painel de Controle).
Romanoza 8/03
E as pessoas pagam dinheiro à Microsoft por isso? Quão incrivelmente ruim é o software que deve ser projetado para que a única correção seja uma desinstalação e reinstalação completas ?!
Jez
@Jez - Não, é grátis.
Eric Kelly
6

No meu caso, criei um certificado autoassinado e o fiz funcionar, exceto que estava recebendo um erro no navegador porque o certificado não era confiável. Portanto, mudei o certificado para a pasta Autoridades de certificação raiz confiáveis> Certificados no snap-in Certificados. Funcionou e fechei o Visual Studio durante o dia.

No dia seguinte, iniciei meu projeto e recebi o erro mencionado na pergunta original. O problema é que o certificado com o qual você configurou o IISExpress deve existir na pasta Pessoal> Certificados ou o HTTPS deixará de funcionar. Depois que o IIS Express iniciar com êxito, você poderá arrastar o certificado de volta para o local confiável. Ele continuará funcionando até que você reinicie o IIS Express.

Não querendo se preocupar em arrastar o certificado para frente e para trás toda vez, apenas coloco uma cópia do certificado nos dois lugares e agora tudo funciona bem.

moribvndvs
fonte
2
Você pode copiar + colar um certificado dentro do snap-in do certificado, como se fosse um arquivo comum. Levei anos para descobrir isso.
Simon_Weaver 5/05
6

Eu tenho o mesmo problema no Visual Studio 2015. Porque eu uso a ligação SSL no web.config

<rewrite>
   <rules>   
     <rule name="HTTP to HTTPS Redirect" stopProcessing="true">
       <match url="(.*)" />
       <conditions>
          <add input="{HTTPS}" pattern="off" />
       </conditions>
          <action type="Redirect" url="https://{HTTP_HOST}/{R:1}" redirectType="Found" />
     </rule>
   </rules>
</rewrite>

E eu posso resolver o problema com a resposta do Sr..djroedger. Substituindo

<add input="{HTTPS}" pattern="off" />

com

<add input="{HTTP_HOST}" pattern="localhost" negate="true" />

no meu web.config, então meu código é

<rewrite>
  <rules>   
    <rule name="HTTP to HTTPS Redirect" stopProcessing="true">
      <match url="(.*)" />
      <conditions>
         <add input="{HTTP_HOST}" pattern="localhost" negate="true" />
      </conditions>
         <action type="Redirect" url="https://{HTTP_HOST}/{R:1}" redirectType="Found" />
    </rule>
 </rules>
</rewrite>
pompom
fonte
4

Eu estava tendo esse problema, configurei meu site para exigir global https em FilterConfig.cs.

public static void RegisterGlobalFilters(GlobalFilterCollection filters)
    {
        filters.Add(new HandleErrorAttribute());
        filters.Add(new RequireHttpsAttribute());
    }

Esqueci de alterar o URL do projeto para https: deste tutorial http://azure.microsoft.com/en-us/documentation/articles/web-sites-dotnet-deploy-aspnet-mvc-app-membership-oauth- sql-database / sob ENABLE SSL parte 4. Isso causou os erros que você estava recebendo.

gsmith
fonte
4

O problema que tive estava relacionado à resposta de Jason Kleban, mas tive um pequeno problema com minhas configurações nas Propriedades do Visual Studio para o IIS Express.

Depois de alterar a porta para estar no intervalo: 44300 a 44399, o endereço também começa com HTTPS

insira a descrição da imagem aqui

Newteq Developer
fonte
3

Outro problema que me aconteceu duas vezes:
no IIS Express, applicationhost.configa ordem das ligações importa. Uma ligação pode ter precedência sobre a ligação SSL, fazendo com que ela não funcione.

Exemplo:

<site name="MySite007" id="1">
    <application path="/" applicationPool="Clr4IntegratedAppPool">
        <virtualDirectory path="/" physicalPath="C:\Users\myuser\projects\mysolutionfolder\MyProject.Service" />
    </application>
    <bindings>
        <binding protocol="http" bindingInformation=":8081:localhost" />
        <binding protocol="http" bindingInformation=":8080:" /><!-- evil binding -->
        <binding protocol="https" bindingInformation="*:44327:localhost" />
    </bindings>
</site>

Você pode ter adicionado uma ligação semelhante à segunda para poder acessar seu WebService de fora localhost. Como essa ligação escuta qualquer endereço, parece substituir a ligação SSL, embora uma porta diferente tenha sido usada.

Remova a ligação maligna ou mova-a para baixo.

Thibault D.
fonte
Isso consertou para mim. Obrigado!
richb
3

Remover os diretórios IISExpress e vs e usar o intervalo de portas ssl de 44300 a 44399 (inclusive) deste artigo funcionou para mim

Luba Karpenko
fonte
obrigado por isso - funcionou para mim, exceto que não fui solicitado a confiar no certificado no VS - estou com preguiça de fazer qualquer coisa sobre isso, então ignore os avisos e prossiga!
Dave
2

Isso é anedótico, como foi ouvido por um colega de trabalho, mas supostamente é um problema com o Chrome forçando https. Eu costumo iniciar no firefox, então eu nunca tinha visto esse problema antes. Usando o Firefox ou ou seja, trabalhou para o meu colega de trabalho.

Ken Johnson
fonte
1

Meu problema foi causado pelo Fiddler. Quando o Fiddler falha, ele ocasionalmente mexe com suas configurações de proxy. Simplesmente iniciar o Fiddler parecia consertar tudo (talvez ele se conserte de alguma forma).

Jason
fonte
1

O ' verificador de instalação de certificado Digicert ' é frequentemente útil em situações como esta.

Consegui verificar se o certificado SSL que estava sendo tentado era o que eu esperava, comparando o número de série.

insira a descrição da imagem aqui

Para mim, a resposta de Jason Kleban foi o problema real, mas esse pode ser um utilitário muito útil para verificar suas asserções básicas sobre o certificado que está sendo carregado.

Simon_Weaver
fonte
Uau, muito obrigado. A única solução que funcionou para mim.
Fernando Silva
1

Se você precisar usar uma porta fora do intervalo 44300-44399, aqui está uma solução alternativa:

  • Crie um novo site no IIS (não Express)
  • Ligue o HTTPS à porta necessária
  • Para certificado SSL, escolha IIS Express Development Certificate
  • Depois que o site for criado, pare-o, pois ele não precisa estar em execução

Isso registra o certificado de desenvolvimento do IIS Express com essa porta e é a maneira mais fácil de solucionar o requisito de intervalo 44300-44399.

trnelson
fonte
0

Acabei de reconstruir meu computador. Esse tópico me deu as pistas, onde percebi nas configurações do projeto> Web, o projeto foi configurado para usar HTTP e a porta HTTP. Ao atualizá-lo para HTTPS e a porta HTTPS correta, tudo começou a funcionar novamente.

Sam
fonte
0

Para seguir para outras respostas sobre a configuração da porta SSL entre 44300 e 44399, não foi possível alterar a propriedade Enabled do SSL no Visual Studio, nem definir uma URL SSL específica. Outras respostas, como reparar o IIS Express, não ajudaram. A solução foi ir para a pasta .vs paralela ao arquivo sln, abrir a subpasta de configuração e editar o arquivo applicationhost.config. Em seguida, adicionei a linha https manualmente e reiniciei o VS.

<binding protocol="http" bindingInformation="*:24941:localhost" />
                <binding protocol="https" bindingInformation="*:44301:localhost" />
r590
fonte
0

No meu caso, simplesmente esqueci que tinha uma ligação configurada para (no meu caso) https: // localhost: 44300 no IIS completo. Você não pode ter os dois!

James Ellis-Jones
fonte
Você pode ter os dois, desde que eles não estejam executando ao mesmo tempo.
precisa saber é o seguinte
0

No meu caso, o URL do host local foi redirecionado para https: // localhost quando eu estava depurando. Isso aconteceu de um momento para outro, sem mudar nada. Eu resolvi isso fazendo uma recarga difícil no navegador. Aqui o link

jaimenino
fonte