IIS7: HTTP-> HTTPS de maneira limpa

146

Existe uma maneira limpa de redirecionar todas as tentativas de acessar uma versão HTTP: // de um site para seu equivalente HTTPS: //?

cpuguru
fonte
A resposta pode ser encontrada no blog de James Kovac: jameskovacs.com/2007/05/09/…
cpuguru
Se você estiver em IIS 7 e em R2 aqui é um guia que funciona eo mais "limpa"
Ujwal Parker

Respostas:

177

Eu acho que a maneira mais limpa é como descrito aqui no IIS-aid.com . É apenas web.config e, portanto, se você mudar de servidor, não precisará se lembrar de todas as etapas que você seguiu com a página de erro personalizada 403.4 ou outras permissões especiais, apenas funcionará.

<configuration>
  <system.webServer>
    <rewrite>
      <rules>
        <rule name="HTTP to HTTPS redirect" stopProcessing="true">
          <match url="(.*)" />
            <conditions>
              <add input="{HTTPS}" pattern="off" ignoreCase="true" />
            </conditions>
            <action type="Redirect" redirectType="Permanent" url="https://{HTTP_HOST}/{R:1}" />
        </rule>
      </rules>
    </rewrite>
  </system.webServer>
</configuration>
toxaq
fonte
9
Isso funcionou para mim com a ressalva de que eu tive que modificar o URL de redirecionamento para https: // {HTTP_HOST} {REQUEST_URI}
Andrew S
6
Isso também funcionou para mim. Eu tive que adicionar o aplicativo em que estava executando em ... localhost / app1 => http: // {HTTP_HOST} / app1 / {R: 1} #
RealSollyM
15
Para quem ainda não possui uma seção de reescrita, coloque as regras nas seguintes seções do web.config: <system.webServer><rewrite> <rules> ... </rules> </rewrite> </ system .webServer>
raider33
16
verifique se o Microsoft URL Rewrite Module está instalado no servidor IIS
Iman
7
Por razões de SEO, você deve usar redirectType = "Permanent". Analise support.google.com/webmasters/answer/…
Niels Bosma
14

A solução mais fácil e limpa que encontrei foi

  1. Em Configurações SSL -> exigir SSL

  2. Nas páginas de erro -> no erro 403.4 -> redirecionar para o site HTTPS

  3. Em Páginas de erro -> Editar configurações dos recursos ... -> Definir erros detalhados para solicitações locais e páginas de erro personalizadas para solicitação remota

O benefício é que ele não requer linhas extras de código. A desvantagem é que ele o redireciona para um URL absoluto.

ColacX
fonte
1
funciona perfeitamente (no IIS 8.5 / 2012 R2). e não mexer com o web.config
Schmendrick
Você poderia dar um exemplo dessa desvantagem? Em que circunstâncias isso aconteceria e por que isso é negativo? Se você pudesse adicioná-lo à sua resposta, seria ótimo. Muito obrigado!
Marcos Dimitrio
2
@MarcosDimitrio Não tenho certeza, pois era há muito tempo. mas acredito que quando eu quis dizer que ele o redirecionava para um URL absoluto, eu quis dizer um "URL base". Por exemplo, "http": //mywebsite.com/hellokitty seria redirecionado para "https": //mywebsite.com, perdendo assim algumas informações do caminho, isso quebraria todos os links existentes com informações adicionais do caminho.
ColacX
5

Uma maneira limpa altera apenas o esquema de URL de http -> https e deixa todo o resto equivalente. Deve estar do lado do servidor para que não haja problemas no navegador.

O JPPinto.com possui instruções passo a passo sobre como isso é feito, exceto pelo uso de javascript (HttpRedirect.htm) em vez de um redirecionamento do servidor. Por alguma razão, não consegui que o IE execute o javascript se você tiver 'Mostrar mensagens de erro HTTP amigáveis' ativadas, o que está ativado por padrão. Outra coisa com o script é que o redirecionamento para o caminho não funcionou nem no FF ou no Chrome. O script sempre redireciona para o root. (Talvez eu tenha perdido algo, porque deve redirecionar para o caminho.)

Por esses motivos, usei uma página ASP para o redirecionamento. A desvantagem é, obviamente, que isso requer que o ASP clássico seja ativado no servidor.

OpsanBlog possui um script ASP e instruções que funcionam bem com o IIS6.

Eu tive alguns problemas ao usar esse método com o IIS7. Na maioria das vezes, a interface do usuário é problemática, já que o IIS7 facilita muito a perda de algo.

  • Primeiro, você precisa instalar o ASP como um recurso de função de servidor da web.
  • Segundo, o uso de um diretório virtual não funcionou conforme o esperado no IIS7 e não tentei depurar isso. Em vez disso, coloquei o arquivo na pasta raiz do site e usei o url '/SSLRedirect.asp' na página de erro 403.4 para fazer referência a ele.
  • Por fim, a parte mais complicada, você NÃO deve aplicar o SSL para SSLRedirect.asp . Caso contrário, você receberá um erro 403.4. Para fazer isso, escolha o arquivo no IIS7 'Visualização de Conteúdo' e alterne para 'Visualização de Recursos' para poder editar as configurações de SSL do arquivo único e desativar a caixa de seleção 'Exigir SSL'.

O gerenciador do IIS deve mostrar o nome do arquivo no cabeçalho.

mika
fonte
1
As instruções vinculadas no JPPinto.com foram atualizadas para destacar que isso não funciona no IIS 7.5 ou R2. Eles dizem que você receberá uma violação de bloqueio devido a alterações na segurança nas versões mais recentes do IIS. Eles sugerem o uso do método URL Rewrite 2.0 (abordagem semelhante à resposta de @toxaq).
Robert Shattock 15/02
0

Global.asax

protected void Application_BeginRequest()
{
if (!Context.Request.Url.AbsoluteUri.Contains("localhost") && !Context.Request.IsSecureConnection)
Response.Redirect(Context.Request.Url.ToString().Replace("http:", "https:"));
}
Kit de ferramentas
fonte
1
Eu posso facilmente contornar esse redirecionamento colocando "localhost" em algum lugar no URI, por exemplo, a string de consulta yourdomain.com?localhost=true Eu sugiro verificar a propriedade Request.Url.Host
Aidy J
0

Eu uso asp clássico (intranet) e em páginas que exigem login, o arquivo de inclusão de logon faz o redirecionamento:

if Request.ServerVariables("SERVER_PORT_SECURE") <> "1" or Request.ServerVariables("HTTPS") <> "on" then 
    Response.Redirect "https://" & Request.ServerVariables("SERVER_NAME") & Request.ServerVariables("URL")
end if

Obviamente, isso não inclui dados GET ou POST. Portanto, na verdade, é um redirecionamento limpo para sua página segura.

Jean-Marc
fonte
-4

Eu acho que por 'limpa' você quer dizer com um redirecionamento 300. Config para um monte de servidores e idiomas aqui .

slipsec
fonte