IIS7: HTTP-> HTTPS in modo pulito


Risposte:


177

Penso che il modo più pulito sia come descritto qui su IIS-aid.com . È solo web.config e quindi se cambi server non devi ricordare tutti i passaggi che hai passato con la pagina di errore personalizzata 403.4 o altre autorizzazioni speciali, funziona e basta.

<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>

9
Questo ha funzionato per me con l'eccezione che ho dovuto modificare l'URL di reindirizzamento su https: // {HTTP_HOST} {REQUEST_URI}
Andrew S

6
Questo ha funzionato anche per me. Ho dovuto aggiungere l'applicazione che stavo eseguendo sotto ... localhost / app1 => http: // {HTTP_HOST} / app1 / {R: 1}
RealSollyM

15
Per chiunque non abbia già una sezione di riscrittura, posizionare le regole nelle seguenti sezioni del web.config: <system.webServer><rewrite> <rules> ... </rules> </rewrite> </ system .webServer>
raider33

16
assicurarsi che Microsoft URL Rewrite Module sia installato sul server IIS
Iman

7
Per motivi SEO devi usare redirectType = "Permanent". Recensione support.google.com/webmasters/answer/...
Niels Bosma

14

La soluzione più semplice e pulita che ho trovato è stata

  1. In Impostazioni SSL -> richiede SSL

  2. Nelle pagine di errore -> Errore 403.4 -> Reindirizzamento al sito HTTPS

  3. Nelle pagine di errore -> Modifica impostazioni funzionalità ... -> Imposta errori dettagliati per richieste locali e pagine di errore personalizzate per richiesta remota

Il vantaggio è che non richiede righe di codice aggiuntive. Unico inconveniente è che ti reindirizza a un url assoluto.


1
funziona perfettamente (su IIS 8.5 / 2012 R2). e non armeggiare con web.config
schmendrick,

Potresti per favore fare un esempio di questo aspetto negativo? In quali circostanze dovrebbe accadere e perché è una cosa negativa? Se potessi aggiungerlo alla tua risposta, sarebbe fantastico. Molte grazie!
Marcos Dimitrio

2
@MarcosDimitrio Non sono sicuro da quando era tanto tempo fa. ma credo che quando intendevo dire che ti reindirizza a un url assoluto intendevo un "url di base". Ad esempio "http": //mywebsite.com/hellokitty verrebbe reindirizzato a "https": //mywebsite.com perdendo così alcune informazioni sul percorso, ciò spezzerebbe ogni collegamento esistente con informazioni aggiuntive sul percorso.
ColacX

5

Un modo pulito cambia solo lo schema URL da http -> https e lascia tutto il resto equivalente. Dovrebbe essere lato server in modo che non ci siano problemi con il browser.

JPPinto.com ha istruzioni dettagliate su come eseguire questa operazione, tranne per il fatto che usano javascript (HttpRedirect.htm) invece di un reindirizzamento lato server. Per qualche motivo, non sono riuscito a far funzionare IE con JavaScript se hai abilitato "Mostra messaggi di errore HTTP amichevoli", che è attivo per impostazione predefinita. Un'altra cosa con lo script è che il reindirizzamento al percorso non ha funzionato nemmeno in FF o Chrome. Lo script reindirizza sempre a root. (Forse ho perso qualcosa, perché dovrebbe reindirizzare al percorso.)

Per questi motivi ho usato una pagina ASP per il reindirizzamento. Il rovescio della medaglia è ovviamente che ciò richiede che ASP classico sia abilitato sul server.

OpsanBlog ha uno script ASP e istruzioni che funzionano bene con IIS6.

Ho avuto alcuni problemi con questo metodo con IIS7. Principalmente i problemi dell'interfaccia utente, poiché IIS7 rende davvero facile perdere qualcosa.

  • Innanzitutto, è necessario installare ASP come funzionalità del ruolo del server Web.
  • In secondo luogo, l'utilizzo di una directory virtuale non ha funzionato come previsto in IIS7 e non ho provato a eseguire il debug. Invece, ho inserito il file nella cartella principale del sito e ho usato l'URL '/SSLRedirect.asp' nella pagina di errore 403.4 per fare riferimento a esso.
  • Infine, la parte più complicata, NON è necessario applicare SSL per SSLRedirect.asp . Altrimenti otterrai un errore 403.4. Per fare ciò, seleziona il file in IIS7 "Visualizzazione contenuto" e passa a "Visualizzazione funzionalità" in modo da poter modificare le impostazioni SSL per il singolo file e disabilitare la casella di controllo "Richiedi SSL".

Il gestore IIS dovrebbe mostrare il nome del file nell'intestazione.


1
Le istruzioni collegate su JPPinto.com sono state aggiornate per evidenziare che ciò non funziona su IIS 7.5 o R2. Dicono che riceverai una violazione del blocco a causa di cambiamenti nella sicurezza nelle nuove versioni di IIS. Suggeriscono invece di utilizzare il metodo URL Rewrite 2.0 (approccio simile alla risposta di @toxaq).
Robert Shattock,

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:"));
}

1
Posso facilmente aggirare questo reindirizzamento inserendo "localhost" da qualche parte nell'URI, ad esempio la stringa di query yourdomain.com?localhost=true suggerirei invece di controllare la proprietà Request.Url.Host
Aidy J

0

Uso asp classico (intranet) e nelle pagine che richiedono il login il file di accesso include il reindirizzamento:

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

Questo ovviamente non include i dati GET o POST. Quindi in effetti è un reindirizzamento pulito alla tua pagina protetta.


-4

Penso che per "pulito" intendi come con un reindirizzamento di 300. Configura per molti server e lingue qui .

Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.