Převedení staršího webu na HTTPS

Upozornění: Tohle vlákno je hodně staré a informace nemusí být platné pro současné Nette.
fordo.pytlik
Člen | 26
+
0
-

Dobrý den

na jednom starším projektu nasazujeme https, ale bohužel projekt je to starší – obsahuje spoustu balastu a tak potřebuji web nejdřív „otestovat“ v živém prostředí.

Máme web http://www.example.com, pokud v prohlížeči přepíšu na https://www.example.com, tak se automaticky přesměruje na web bez https. Jasně, jedná se tedy o kaninozaci, kterou můžeme snadno vypnout, ale to (asi) nechceme – rozbije nám to bude odkazy a seo.

Pokud do nějaké routy přidám flaq secured, tak je problém v tom, že web obsahuje spoustu balastu, který se přestane zobrazovat – prohlížeč většinou stopne soubory, které nejsou zabezpečené např. http://www.example.com/file.jpg, podobným způsobem bohužel načítáme i JS a web úplně přestane fungovat.

Samozřejmě, řešením je projít jednotlivé výskyty, všechny upravit, případně připravit vlastní filter ale bohužel se jedná o větší web a nepůjde to najednou, celá změna bude nějakou dobu trvat… očekávám, že dřív než za týden se nám to nepovede.

Jak byste postupovali? Vypnuli kanonizaci (s tím, že to týden zas tak nevadí) / zapnuli flaq secured (s tím, že rychleji odstraníme největší problémy a zbytek dořešíme průběžně) je nějaké jiné řešení (např. vypnou kanonizaci jen pro https?), nebo jsem něco přehlédl?

norbe
Backer | 405
+
+3
-

Používáme toto:

if($this->httpRequest->isSecured()) {
	Route::$defaultFlags = Route::SECURED;
}
Oli
Člen | 1215
+
0
-

Podle mě by mělo jít přesměrovat už v http serveru (Apache, nginx) z http na https všechny požadavky. V nginx by to bylo takhle: https://gist.github.com/…222e8056af5c#…. Jestli tomu rozumím správně, tak pak jakýkoli požadavek, který příjde na doménu http://example.com se přesměruje na https://example.com. Budeš mít všechno na https (s přesměrováním) a v klidu si přepíšeš http://example.com/img.jpg na https aby ses změnil toho přesměrování. Ale bude to fungovat hned na https.

iguana007
Člen | 970
+
0
-

Já bych toto vyřešil v htaccess pomocí 301 redirectu (i pro ty statické soubory) a máš po problému. Router bych dal taky secured, aby ti to generovalo správně odkazy. Pokud Vám někdo tvrdí, že se vám rozbije ranking, seo apod., tak je to imho nesmysl, ba právě naopak třeba od google jsou weby s https hodnoceny lépe.

Altimit
Člen | 82
+
0
-

v nette to můžeš udělat jednoduše:

public static function createRouter() {
        $router = new RouteList();
        Route::$defaultFlags = Route::SECURED;
		...
}

a pak v apache2 musíš udělat speciální přesměrování na ten virtuální host (web.cz:443) s odkazy na certifikáty a klíče k němu :)
měl jsem taky ten problém, ale dělá ti to nette route :)

iguana007
Člen | 970
+
0
-

Altimit napsal(a):
měl jsem taky ten problém, ale dělá ti to nette route :)

Nemám to teď jak otestovat, ale pokud toto řeší i situaci, že klient přijde na web z Google, kde jsou zatím indexovány URL s http:// a je následně přesměrován pomocí 301 redirectu na https://, tak proč ne.

Pokud ovšem ten 301 redirect neprobíhá, příp. se použije 302, tak to potom není správné řešení.

fordo.pytlik
Člen | 26
+
0
-

norbe napsal(a):

Používáme toto:

if($this->httpRequest->isSecured()) {
	Route::$defaultFlags = Route::SECURED;
}

Děkuji, to je přesně ono.

Majkl578
Moderator | 1364
+
+2
-

Nebo ještě kratší varianta:

Route::$defaultFlags |= $this->httpRequest->isSecured() ? Route::SECURED : 0;
Altimit
Člen | 82
+
0
-

ještě musíš mít tedy upravený apache (tedy web směrovaný z portu :80 na port :443) aneb jest-li máš let'sencrypt tak využij ten jejích script na instalaci (dokáže ti to přenastavit na auto-reddirect), musíš si vytvořit vlastní config pro danou doménu.
Poté si vytvoříš nový config na danou doménu:

Listen 443
<VirtualHost dommain(or *):443>
    ServerName www.example.com
    SSLEngine on
    SSLCertificateFile "/path/to/www.example.com.cert"
    SSLCertificateKeyFile "/path/to/www.example.com.key"
</VirtualHost>