Nutzung von SSL-Zertifikaten für HTTPS-Aufruf

Weblication® CMS unterstützt standardmässig https-Aufrufe Ihrer Internetseiten.

Sollen Formulardaten über eine gesicherte Verbindung (SSL) abgeschickt werden, können Sie auch in Weblication® CMS das HTTPS-Protokoll nutzen. Das CMS unterstützt HTTPS-Aufrufe standardmässig.

Auf diese Weise können Sie z.B. einen Online-Shop, Login-Formulare, Kontakt-Formulare für sensible Daten, usw. sicher vom Client zum Webserver verschicken.

Das SSL-Zertifikat sollte auf die lizenzierte Domain ausgestellt sein, damit die https-Aufrufe direkt über die lizenzierte Domain erfolgen können. Sofern kein WildCard-SSL-Zertifikat im Einsatz ist, setzen Sie die Aufrufe auf den HTTP_HOST, auf den das SSL-Zertifikat erstellt wurde (also z.B. www.domain.dd oder nur domain.dd).

Bitte beachten Sie, daß diese Anleitung eine allgemeine Anleitung ist, die eventuell in Ihrem speziellen Fall nicht den gewünschten Erfolg bringt und ggf. auf Ihr individuelles Projekt angepasst werden muß! 

Bedenken Sie, daß mittlerweile der Aufruf von Seiten über HTTPS teilweise für ein besseres Suchmaschinen-Ranking sorgt, weshalb eine generelle Umstellung der Webseiten auf HTTPS zu empfehlen ist. Aber nicht nur das Ranking sollte ein Grund für den Einsatz von SSL-Zertifikaten zum HTTPS-Einsatz sein. Inhalte, die ungeschützt übertragen werden (z.B. Seiteninhalte über das HTTP-Protokoll) können manipuliert werden und somit z.B. mit Schadcode o.ä. versehen werden!

Bei einer Umstellung auf HTTPS müssen Sie darauf achten, daß alle Aufrufe in den Seiten über HTTPS erfolgen müssen. Sofern Sie in den Seiten andere Inhalte einbinden (z.B. Font-Dateien, Wetter-Apps, Styles, Skripts, etc.) müssen diese auch über https eingebunden werden. Ansonsten wird dies vom Browser als gemischter Inhalt angesehen und somit als unsicher eingestuft, was je nach Endgerät dazu führen kann, daß die Seite nicht aufrufbar ist (Sicherheitshinweis des Browsers).
In der Browserkonsole (z.B. Firebug) kann ein Hinweis z.B. wie folgt aussehen:

Mixed Content: The page at 'https://www.domain.dd/de/index.php' was loaded over HTTPS, but requested an insecure stylesheet 'http://fonts.googleapis.com/css?family=Oswald'. This request has been blocked; the content must be served over HTTPS.

1) Alle Projekt-Aufrufe über https umleiten

Weblication® liefert die aktuellen BASE Classic und BASE (Mobile First) Projekte bereits so aus, daß über die Projektkonfiguration einstellbar ist, ob die Seiten nur über HTTPS aufrufbar sind. BASE Classic 2.x und BASE (Mobile First) Projekte, welche vor Anfang März 2018 aufgesetzt wurden, können dahingehend manuell nachgerüstet werden.

Beachten Sie:
Damit auch ausserhalb des Projektes liegende Hauptverzeichnisse (z.B. die Weblication® Software selber (/weblication bzw. ggf. /send) auch auf https umgeleitet werden, sollte die oberste .htaccess (siehe Punkt 2) auf jeden Fall abgelegt werden und mit entsprechender Umschreibregel definiert sein.

1.1) Einstellung "Seiten nur über HTTPS aufrufbar" in der Projektkonfiguration

Sofern in Ihrem Projekt noch kein Konfigurationseintrag zum HTTPS-Aufruf besteht, tragen Sie diesen manuell über den Quelltext der Variablen-Datei nach. Im Standard ist der Eintrag im Block der Stammdaten untergebracht.

Beispiel: Auszug aus der Projektkonfiguration (/[IHR-LAYOUT-PROJEKT]/wGlobal/content/variables/default.wVariables.php) zum HTTPS-Aufruf

...
  <variable description="Seiten nur über HTTPS aufrufbar" key="https_only" type="char.select" values="0|1" texts="Nein|Ja">1</variable>
  <info>Falls die Seite nur über eine einzige Domain aufrufbar sein soll, können Sie dies weiter oben über die Schaltfläche des jeweiligen Inhaltsprojektes einstellen.</info>
...

1.2) executeAccessRules-Funktion in der wMyProject.php setzen/erweitern

Auf die Einstellung in der Projektkonfiguration wird über die wMyProject.php Datei des globalen Projektes abgefragt. Die executeAccessRules Funktion leitet bei aktiviertem HTTP-Aufruf (https_only Variable) die Domain-Aufrufe entsprechend auf HTTPS um.
Die gesamte Funktion entnehmen Sie am besten einem aktuellen Projekt und passen den Global-Pfad zur $httpsOnly-Variablen in der Funktion an Ihren globalen Projektpfad an (weiter unten finden Sie den Auszug, basierend auf einer BASE Classic Projektbasis).
Bei älteren BASE 2.x Projekten kann es sein, daß Sie auch den Funktionsaufruf in der pre.php zu wMyProject::executeAccessRules() und wMyProject::executeRewriteRules($preResult) noch setzen müssen (weiter unten finden Sie den Auszug, basierend auf einer BASE Classic Projektbasis).

Sofern Sie die Nachrüstung in Ihrem Projekt nicht selber durchführen können, wenden Sie sich bitte an den Support, der dies gerne als Projektdienstleistung für Sie durchführen kann.

Passen Sie den Pfad /[IHR-LAYOUT-PROJEKT] an Ihren globalen Projektpfad (z.B. /de-wGlobal) an.

Auszug aus der /[IHR-LAYOUT-PROJEKT]/wGlobal/scripts/php/wMyProject.php ab erster Zeile

<?php

class wMyProject {

public static function
executeAccessRules(){

$httpsOnly = wVariables::getValue('https_only', '', '/[IHR-LAYOUT-PROJEKT]/wGlobal/content/variables/default.wVariables.php', 'wDoNotAdd') == '1' ? true : false;

if(
wUserCur::getName() == ''){

// Umleitung für Hauptverzeichnisaufrufe (Hauptverzeichnis "ausblenden") direkt nach Include der /weblication/grid.php setzen:
// Das Projektverzeichnis kann somit nicht mehr per Direktaufruf erreicht werden (wird "ausgeblendet")
// Beachten Sie, dass das Redirect in der obersten /index.php dann auch umgeschrieben werden muss (ohne Angabe Hauptverzeichnis)!
$projectConf = wProjectCur::getPath().'/weblication/project/wProject.php';
$hideDirProject = wDocumentData::getData($projectConf, "/wProject/rewriteRules/@hideDirProject");

if(
$hideDirProject == '1' && preg_match('/^'.preg_quote(wProjectCur::getPath(), '/').'\//', $_SERVER['REQUEST_URI']) && !wRequest::isSearchBot() && !preg_match('/wEditor\.php/', $_SERVER['REQUEST_URI']) && !preg_match('/diffTmp_/', $_SERVER['REQUEST_URI']) && !preg_match('/newsletter\/newsletters/', $_SERVER['REQUEST_URI']) && !preg_match('/documents\/drafts/', $_SERVER['REQUEST_URI'])){
$urlRedirect = preg_replace('/^'.preg_quote(wProjectCur::getPath(), '/').'\//', '/', $_SERVER['REQUEST_URI']);
wResponse::redirect($urlRedirect, true);
}

// Falls der Aufruf nur über eine bestimmte Domain erlaubt sein soll, wird hier bei Bedarf eine Weiterleitung generiert.
$hostOnly = preg_replace('/^https?\:\/\//', '', wDocumentData::getData($projectConf, "/wProject/accessRules/@hostOnly"));
if(!
preg_match('/^('.$hostOnly.')/', $_SERVER['HTTP_HOST']) && wRequest::isSearchBot() === false && !preg_match('/newsletter\/newsletters/', $_SERVER['REQUEST_URI'])){
if(
$httpsOnly || isset($_SERVER['HTTPS']) && ($_SERVER['HTTPS'] == 'on' || preg_match("/^https/i", $_SERVER['HTTPS']))){
wResponse::redirect('https://'.$hostOnly.$_SERVER['REQUEST_URI'], true);
}
else{
wResponse::redirect('http://'.$hostOnly.$_SERVER['REQUEST_URI'], true);
}
}
}

if(
$httpsOnly && !(isset($_SERVER['HTTPS']) && ($_SERVER['HTTPS'] == 'on' || preg_match("/^https/i", $_SERVER['HTTPS'])))){
wResponse::redirect(preg_replace('/^https?\:\/\//', 'https://', wRequest::getUrl()), true);
}
}

//*********************************************************************************/
/**
* @method String executeRewriteRules()
*
* @description Schreibt bei Bedarf Links innerhalb der Seite um
*
* @return String Void
*
*/
//*********************************************************************************/

public static function executeRewriteRules($preResult){

$projectConf = wProjectCur::getPath().'/weblication/project/wProject.php';
$hideDirProject = wDocumentData::getData($projectConf, "/wProject/rewriteRules/@hideDirProject");

// Falls das Hauptverzeichnis ausgeblendet werden soll, werden die Links hier umgeschrieben
if(wUserCur::getName() == '' && !wRequest::isSearchBot() && $hideDirProject == '1'){

// Hauptverzeichnis aus Links rausnehmen:
$preResult = preg_replace("/(<input[^>]+name=\"wDocumentPath\"[^>]+value=\")/", "$1_WERR_", $preResult);
$preResult = preg_replace("/([\"'>])".preg_quote(wProjectCur::getPath(), '/')."\//", "$1/", $preResult);
$preResult = str_replace('_WERR_', '', $preResult);

// Hauptverzeichnis aus Google-Sitemap (google-sitemap.php) rausnehmen:
if(stristr(wRequest::getPath(), 'google-sitemap')){
$preResult = preg_replace("/".preg_quote(wProjectCur::getPath(), '/')."\//", "/", $preResult);
}
}

return
$preResult;
}

// .... hier folgen die weiteren wMyProject.php Funktionen (z.B. addMobileSwitcher ...)

?>

Bei älteren Projekten fehlen Ihnen ggf. die Zeilen
  wMyProject::executeAccessRules();
und
  $preResult = wMyProject::executeRewriteRules($preResult);
in Ihrer pre.php. Der nachfolgende Auszug aus einer pre.php zeigt Ihnen auf, wo diese Zeilen genau nachzutragen sind.

Auszug aus der /[IHR-LAYOUT-PROJEKT]/wGlobal/scripts/pre.php

<?php

// ...

// Projektspezifische Funktionen einbinden
include_once($_SERVER['DOCUMENT_ROOT'].'/[IHR-LAYOUT-PROJEKT]/wGlobal/scripts/php/wMyProject.php');

// Leitet Aufrufe bei Bedarf um
wMyProject::executeAccessRules();

// ...
// ...

// Hier wird das globale Steuerungsskript eingebunden
include($_SERVER['DOCUMENT_ROOT'].'/weblication/grid5/default/project/wGlobal/scripts/pre.php');

$preResult = wMyProject::executeRewriteRules($preResult);

?>

2) Alle Aufrufe über https umleiten (über htaccess)

Wollen Sie alle Aufrufe auf HTTPS umleiten, müssen Sie die .htaccess Definitionen in einer .htaccess Datei definieren, die direkt in der DOCUMENT_ROOT der Domain liegt (Pfade entsprechend anpassen).

Testen Sie bei allen Umsetzungen Ihre Präsenz auf volle Funktionalität, um evtl. Probleme auf Ihr Projekt bezogen sofort zu erkennen.

Beispiel 2.1: Inhalt von /.htaccess bei Umleiten aller Aufrufe auf HTTPS und nur www-Aufrufe ermöglichen

RewriteEngine on

# alle Aufrufe ungleich Port 443 umleiten
RewriteCond %{SERVER_PORT} !^443$ [NC]
RewriteCond %{HTTP_HOST} ^(www\.)?IhreLizenzierteDomain\.tld$
RewriteRule ^(.*)$ https://www.IhreLizenzierteDomain.tld/$1 [R=301,L]

## !! Beachten Sie die Hinweise unten !!

Beispiel 2.2: Inhalt von /.htaccess bei Umleiten aller Aufrufe auf HTTPS über HTTP_HOST Server-Variable

RewriteEngine on

# alle Aufrufe ungleich Port 443 umleiten
RewriteCond %{SERVER_PORT} !^443$ [NC]
RewriteRule ^(.*)$ https://%{HTTP_HOST}/$1 [R=301,L]

## !! Beachten Sie die Hinweise unten !!
Setzen Sie die Umleitung auf die Domain, auf die auch das SSL-Zertifikat erstellt wurde, womit Sie also ein Aufruf mit oder ohne www. berücksichtigen müssen!

Wichtige Hinweise

  • Der Server muss mod_rewrite unterstützen, was Sie bei Ihrem Provider erfragen können!
  • Sofern in einem Unterverzeichnis über eine .htaccess-Datei der Befehl "RewriteEngine ON" gesetzt wird, gilt die Vererbung der im Verzeichnis höher liegenden .htaccess-Datei nicht mehr. Es müssen also in dieser  neuen .htaccess-Datei alle Befehle erneut gesetzt werden!
    Achten Sie dabei auf die Anpassung der Pfade passend zum Inhaltsprojekt, also z.B. anstatt wie in der DocRoot gesetzt:
    RewriteRule ^(.*)$ https://%{HTTP_HOST}/$1 [R=301,L]
    dann wie folgt (wenn in /de):
    RewriteRule ^(.*)$ https://%{HTTP_HOST}/de/$1 [R=301,L]

3) Nur Software Login-Formular über https aufrufen

Hinweis

Ab CMS-Version 18 kann über die Systemeinstellungen (Sicherheit) ein HTTPS-Aufruf der Software-Anmeldung erzwungen werden ("Anmeldung nur über HTTPS ermöglichen" aktivieren).
Eine Umleitung über die oberste .htaccess ist dann nicht mehr erforderlich hinsichtlich dem CMS-Login.

Sofern Sie nur das Software Login-Formular (http://IhreLizenzierteDomain.tld/weblication/) und das Weblication® CMS Backend auf HTTPS umleiten wollen, können Sie dies z.B. über eine .htaccess Datei erzwingen. Hierzu gelten die allgemeinen Regeln zu mod_rewrite unter Apache.
Nachfolgend ein Beispiel für diesen Fall:

Beispiel 1.1: Inhalt von /weblication/.htaccess bei Umleiten der Software-Loginmaske auf HTTPS

RewriteEngine on

# alle Aufrufe ungleich Port 443 umleiten
RewriteCond %{SERVER_PORT} !^443$
# Umleitung beschränken auf Aufrufe von /weblication (am Anfang der URL) umleiten
RewriteCond %{REQUEST_URI} ^/weblication [NC]
# tmpHTTP-Aufrufe und Imagescript von der Umschreibung ausschliessen,
# damit Weblication Formulare und Bilder im WYSIWYG-Feld funktionieren
RewriteCond %{REQUEST_URI} !^/weblication/grid5/tmpHTTP [NC]
RewriteCond %{REQUEST_URI} !^/weblication/grid5/scripts/wImage.php [NC]
# Umschreibregel bei zutreffen der zuvor definierten Fälle (Conditions):
RewriteRule ^(.*)$ https://IhreLizenzierteDomain.tld/weblication/$1 [R=301,L]

# RewriteRule mit Verwenden eines Platzhalters fuer den HTTP_HOST:
# RewriteRule ^(.*)$ https://%{HTTP_HOST}/$1 [R=301,L]

Beachten Sie beim vorigen Beispiel, dass ein Login-Formular in der Präsenz (z.B. als Weblic® Element eingefügt) nicht von dieser Umleitung berücksichtigt wird!

Allgemeine Hinweise

Wichtige Hinweise

  • Bedenken Sie die Umstellung auf https auch bei Skripten, die ggf. direkt über das globale Projekt (z.B. per Ajax) aufgerufen werden (Beispiel: Responsive Toggler-Navigation)!
  • Sofern innerhalb einer per HTTPS aufgerufenen Seite ein iFrame eingebunden ist, so muß auch die darüber aufgerufene Seite per HTTPS angesprochen werden. Ansonsten werden die per iFrame eingebundenen Inhalte nicht angezeigt.
  • Achten Sie in HTTPS-Seiten darauf, daß alle Inhalte des Projektes per HTTPS aufgerufen werden. Ansonsten kann es zu Zertifikats Warnmeldungen über die Browser-Adressleiste kommen.
    Ab CMS-Version  13.x steht Ihnen hierzu mit der Seiteninfo (siteinfo) im Weblication® Panel ein wichtiges Werkzeug zur Verfügung. Im Block "Datenschutz" wird angezeigt, ob HTTPS verwendet wird und welche URLs in der Seite noch unsicher (also über http) eingebunden sind.