Eu pesquisei no Google e no StackOverflow tentando encontrar uma solução para isso, mas todos parecem estar relacionados ao ASP.NET etc.
Normalmente, executo o Linux nos meus servidores, mas para este cliente, estou usando o Windows com IIS 7.5 (e Plesk 10). Essa é a razão pela qual não estou familiarizado com os arquivos IIS e web.config . Em um .htaccess
arquivo, você pode usar condições de reescrita para detectar se o protocolo é HTTPS e redirecionar de acordo. Existe uma maneira simples de conseguir isso usando um arquivo web.config ou mesmo usando o módulo ' URL Rewrite ' que eu instalei?
Como não tenho experiência com o ASP.NET , se isso estiver envolvido na solução, inclua etapas claras de como implementar.
O motivo para eu fazer isso com o web.config e não com o PHP é que eu gostaria de forçar o HTTPS em todos os ativos no site.
Respostas:
Você precisa do módulo de reconfiguração de URL, preferencialmente v2 (não tenho v1 instalado, portanto, não posso garantir que ele funcione lá, mas deveria).
Aqui está um exemplo desse web.config - ele forçará o HTTPS para TODOS os recursos (usando o redirecionamento permanente 301):
PS Esta solução em particular não tem nada a ver com ASP.NET/PHP ou qualquer outra tecnologia, pois é feita usando apenas o módulo de reescrita de URL - é processada em um dos níveis inicial / inferior - antes que a solicitação chegue ao ponto em que seu código é executado.
fonte
Strict-Transport-Security
cabeçalho: en.wikipedia.org/wiki/HTTP_Strict_Transport_Security<action type="Redirect" url="https://{HTTP_HOST}{REQUEST_URI}" redirectType="Permanent" appendQueryString="false" />
<match url=".*"/>
para<match url="http://*.*" />
Para aqueles que usam o ASP.NET MVC. Você pode usar o RequireHttpsAttribute para forçar todas as respostas a serem HTTPS:
Outras ações que você também pode querer fazer para ajudar a proteger seu site:
Forçar tokens antifalsificação a usar SSL / TLS:
Exija que os cookies exijam HTTPS por padrão, alterando o arquivo Web.config:
Use o pacote NWebSec.Owin NuGet e adicione a seguinte linha de código para habilitar o HSTS (Strict Transport Security) em todo o site. Não se esqueça de adicionar a diretiva de pré-carregamento abaixo e enviar seu site para o site de pré-carregamento do HSTS . Mais informações aqui e aqui . Observe que, se você não estiver usando o OWIN, existe um método Web.config que você pode ler no site NWebSec .
Use o pacote NWebSec.Owin NuGet e adicione a seguinte linha de código para ativar a Public Key Pinning (HPKP) em todo o site. Mais informações aqui e aqui .
Inclua o esquema https em qualquer URL usado. O cabeçalho HTTP da CSP (Content Security Policy) e o SRI (Subresource Integrity) não são bons quando você imita o esquema em alguns navegadores. É melhor ser explícito sobre HTTPS. por exemplo
Use o modelo de projeto do ASP.NET MVC Boilerplate Visual Studio para gerar um projeto com tudo isso e muito mais incorporado. Você também pode exibir o código no GitHub .
fonte
Para aumentar a resposta do LazyOne, aqui está uma versão anotada da resposta.
Limpe todas as outras regras que já possam ter sido definidas neste servidor. Crie uma nova regra, denominada "Redirecionar todas as solicitações para https". Depois de processar esta regra, não processe mais nenhuma regra! Corresponda a todos os URLs recebidos. Em seguida, verifique se todas essas outras condições são verdadeiras: HTTPS está desativado. Bem, isso é apenas uma condição (mas verifique se é verdade). Se estiver, envie um redirecionamento 301 permanente de volta ao cliente em
http://www.foobar.com/whatever?else=the#url-contains
. Não adicione a string de consulta no final disso, porque duplicaria a string de consulta!É isso que as propriedades, atributos e alguns dos valores significam.
MatchAll
) ou se alguma delas deve ser verdadeira (MatchAny
); semelhante a AND vs OR.match
e suaconditions
são todas verdadeiras.redirect
(do lado do cliente) ourewrite
(do lado do servidor).https://
com duas variáveis de servidor.url
ou não; neste caso, estamos definindo-o como false, porque o{REQUEST_URI}
já o inclui.As variáveis do servidor são
{HTTPS}
qual éOFF
ouON
.{HTTP_HOST}
éwww.mysite.com
e{REQUEST_URI}
inclui o restante do URI, por exemplo/home?key=value
#fragment
(veja o comentário do LazyOne).Consulte também: https://www.iis.net/learn/extensions/url-rewrite-module/url-rewrite-module-configuration-reference
fonte
/home?key=value#fragment
) não é definida pelo servidor pelos navegadores, pois deve ser usada localmente.http://www.example.com/members#oops
pedido será enviado para ohttp://www.example.com/members
qual será redirecionado para a versão HTTPS emhttps://www.example.com/members
- o navegador faz o resto)A resposta aceita não funcionou para mim. Eu segui as etapas deste blog .
Um ponto importante que estava faltando para mim era que eu precisava baixar e instalar a Ferramenta de Reescrita de URL para IIS. Encontrei aqui . O resultado foi o seguinte.
fonte
No .Net Core, siga as instruções em https://docs.microsoft.com/en-us/aspnet/core/security/enforcing-ssl
No seu startup.cs, adicione o seguinte:
Para redirecionar Http para Https, adicione o seguinte no arquivo startup.cs
fonte
A excelente biblioteca NWebsec pode atualizar suas solicitações de HTTP para HTTPS usando sua
upgrade-insecure-requests
tag dentro deWeb.config
:fonte
Como não havia permissão para instalar a reescrita de URL no meu ambiente, encontrei outro caminho.
Adicionando isso ao meu web.config, o erro foi reescrito e funcionou no IIS 7.5:
Em seguida, seguindo os conselhos aqui: https://www.sslshopper.com/iis7-redirect-http-to-https.html
Eu criei o arquivo html que faz o redirecionamento (redirectToHttps.html):
Espero que alguém ache isso útil, pois não consegui encontrar todas as peças em um só lugar em qualquer outro lugar.
fonte
Uma maneira simples é dizer ao IIS para enviar seu arquivo de erro personalizado para solicitações HTTP. O arquivo pode conter um meta-redirecionamento, um redirecionamento de JavaScript e instruções com o link, etc ... Importante: você ainda pode marcar "Requer SSL" para o site (ou pasta) e isso funcionará.
fonte