2012-07-24 15 views
8

Ho una regola di riscrittura che forza HTTPS e www. Il certificato SSL è per la versione www del sito. L'intero sito deve essere HTTPS..htaccess reindirizza esegue solo dopo avviso del browser

Il problema è che se la richiesta è https://example.com/, il browser visualizza una pagina di avviso prima che il reindirizzamento possa essere eseguito. ('Questa connessione non è attendibile' in Chrome e 'Questo probabilmente non è il sito che stai cercando!' In Chrome)

Se l'utente aggiunge un'eccezione in Firefox o ignora l'errore in Chrome, la regola di riscrittura viene eseguita e sono reindirizzamenti alla versione www del sito con una pagina sicura al 100%.

RewriteEngine on 

RewriteCond %{HTTP_HOST} ^example.com$ [OR] 
RewriteCond %{HTTPS} !on 
RewriteRule ^(.*)$ https://www.example.com/$1 [R=301,L] 

RewriteCond %{HTTP_HOST} ^www.example.com$ 
RewriteCond %{HTTPS} !on 
RewriteRule ^(.*)$ https://www.example.com/$1 [R=301,L] 

Ho testato le regole sul sito così come su http://martinmelin.se/rewrite-rule-tester/

Come posso ottenere il reindirizzamento da eseguire prima l'avvertimento del browser?

+0

Vedere: http://serverfault.com/a/360985/47187 – Bruno

+0

Possibile duplicato di [Reindirizzamento https su non www e http su www] (http://stackoverflow.com/a/10726167/372643). – Bruno

+0

Questa domanda potrebbe essere un duplicato ma penso che il problema qui sia dichiarato un po 'più chiaro, IMHO. – Jonathan

risposta

8

Il reindirizzamento da https://example.com a https://www.example.com può avvenire solo dopo che il client ha effettuato una richiesta iniziale valida a https://example.com.

Questo perché HTTPS è HTTP su TLS/SSL (vedere RFC 2818), che prima stabilisce la connessione SSL/TLS prima che venga inviato qualsiasi traffico HTTP. mod_rewrite si applica sempre dopo aver stabilito la connessione SSL/TLS. Non farlo sarebbe effettivamente un problema di sicurezza, poiché un utente malintenzionato potrebbe riscrivere e reindirizzare il client prima che il certificato sia stato verificato. Anche se l'aggiornamento TLS era all'interno di HTTP (RFC 2817, che non è mai usato/supportato e non è https), vorresti comunque che il reindirizzamento provenga da un'entità fidata.

Per questa connessione iniziale, il server su https://example.com deve avere un certificato valido per example.com, altrimenti, questa connessione non si verificherà nemmeno (e il server non invierà una risposta di reindirizzamento).

per raggiungere il tuo obiettivo, è necessario richieste di https://example.com presentare un certificato valido per example.com e richieste di https://www.example.com di presentare un certificato valido per www.example.com.

ci sono due soluzioni:

  • Utilizzando due certificati distinti per ogni host, utilizzando gli indirizzi IP distinti oppure utilizzando Name Server Indicazione. Il rovescio della medaglia qui è che non tutti i client supportano SNI, anche se sta diventando sempre più comune.
  • Utilizzo di un singolo certificato valido sia per example.com e www.example.com. Questo può essere ottenuto ottenendo un certificato con più voci DNS (Subject Alternative Name) SAN (non funzionerà con solo *.example.com poiché il punto non fa parte del modello jolly).

Quest'ultimo è sicuramente la soluzione più semplice. È abbastanza comune che le CA emettano certificati con voci SAN sia per example.com sia per www.example.com quando si applica per l'una o l'altra, a volte senza un costo aggiuntivo.

+0

nota: la maggior parte dei certificati con caratteri jolly include sia * * .example.com' che 'example.com' – cmorrissey

0

This post indirizzi il problema, e fornisce la seguente risposta:

avrete bisogno di un cert per example.com, se si vuole evitare il problema cert non validi. Per motivi di sicurezza, i reindirizzamenti prima dell'autenticazione non sono consentiti.

Un'altra opzione potrebbe essere quella di ottenere un cert jolly, che permetterebbe di adattare per *.example.com. (A quanto pare questo non funziona. Grazie @Giel)

Si potrebbe fare http://example.com/ reindirizzano a https://www.example.com/, ma che non si può aiutare se si dispone già di utenti a visitare https://example.com/.

+0

Un certificato jolly non sarebbe sufficiente, avrete bisogno sia di example.com che di * .example.com, poiché quest'ultimo non corrisponde al primo. – Giel

Problemi correlati