SSL-Modus für WordPress-Blogs

Ende letzten Jahres hatte ich euch gezeigt, wie man mit Hilfe von Caching die URL-Struktur von WordPress verstecken kann. Den gleichen Ansatz kann man auch für etwas anderes gut gebrauchen.

Ich persönlich mag SSL sehr - es ist eine einfache Methode, um ein wenig Übertragungssicherheit zu gewährleisten. Aus diesem Grunde baue ich meine Angebote gerne so, dass ich SSL nutzen kann, wenn ich möchte. Leider hat WordPress damit so seine Probleme. Man kann eine Seite zwar generell via SSL aufrufen, beim Klick auf den nächsten seiteninternen Link wird man dann jedoch wieder auf eine unverschlüsselte Seite weitergeleitet.

Um dem zu entgehen habe ich ein kleines Plugin namens "OptionalSSL" geschrieben. Anstatt die URL-Struktur von WordPress zu verstecken, schreibt es die seiteninternen Links von HTTP-Aufrufen in HTTPS-Aufrufen um. Nicht berücksichtigt werden dabei Inhalte, die von anderen Seiten nachgeladen werden (z.B. Twitter-Timelines, etc.) - dafür erntet man dann eine entsprechende Warnung vom Browser.

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
<?php
  /*
    Plugin Name: OptionalSSL
    Plugin URI: https://weizenspr.eu/
    Description: If the page is called via SSL all internal links are rewritten.
    Version: 0.1c1
    Author: Kevin Niehage
    Author URI: https://weizenspr.eu/

    this code is based on http://w-shadow.com/blog/2010/05/20/how-to-filter-the-whole-page-in-wordpress/
  */


  /* STOP EDITING HERE IF YOU DO NOT KNOW WHAT YOU ARE DOING */

  $optionalssl_after  = "after";
  $optionalssl_before = "before";

  $optionalssl_replacers = array(array($optionalssl_before => "http://"  . htmlentities($_SERVER["HTTP_HOST"]),
                                       $optionalssl_after  => "https://" . htmlentities($_SERVER["HTTP_HOST"])));

  function optionalssl_startbuffering(){
    // do not filter admin pages
    if (!is_admin()){
      // we start buffering here but do not
      // stop it ourself - this is done
      // automatically in "wp_ob_end_flush_all()" in
      // file "/wp-includes/functions.php"
      ob_start('optionalssl_filterpage');
    }
  }

  function optionalssl_replaceslashes($html) {
    return str_ireplace("/", "%2F", $html);
  }

  function optionalssl_filterpage($html) {
    global $optionalssl_after;
    global $optionalssl_before;
    global $optionalssl_replacers;
 
    foreach ($optionalssl_replacers as $item) {
      $html = str_ireplace($item[$optionalssl_before], $item[$optionalssl_after], $html);
      $html = str_ireplace(optionalssl_replaceslashes($item[$optionalssl_before]), optionalssl_replaceslashes($item[$optionalssl_after]), $html);
    }

    return $html;
  }

  if (is_ssl()) {
    add_action('wp', 'optionalssl_startbuffering');
  }
?>

Solltet ihr auf die Seite kommen und eine Warnung sehen, liegt das wahrscheinlich daran, dass euer Browser dem von mir genutzten Zertifikatsaussteller CAcert nicht traut. In dem Fall solltet ihr aber z.B. auch Probleme mit der Webseite des Chaos Computer Clubs haben. Um das zu ändern, könnt ihr eurem Browser das Root-Zertifikat von CAcert bekannt machen - danach sollte alles reibungslos funktionieren.

Ich hoffe, der ein oder andere kann diesen Code-Schnipsel für seinen eigenen Auftritt gebrauchen. 🙂

Zum Schluss noch etwas Rechtliches:
Der Autor dieses Programms haftet nicht für Schäden an Soft- oder Hardware oder Vermögensschäden, die durch das Benutzen des Programms entstehen, es sei denn, diese beruhen auf einem grob fahrlässigen oder vorsätzlichen Handeln des Autors, seiner Erfüllungsgehilfen oder seiner gesetzlichen Vertreter.
Verschlüsselte Grüße, Kenny

12 Kommentare » Schreibe einen Kommentar

  1. Hi,

    mein Webhoster sagt folgendes:

    die Nutzung fremder Zertifikate ist leider nicht möglich. Zudem wird für ein SSL-Zertifikat auch immer eine eigene IP nötig. Sie können in Ihren Produkt-Upgrades gern ein solches SSL-Zertifikat über uns inkl. eigener IP bestellen.

    Stimmt das? Muss ich das von denen Beziehen, kann ich das kostenlosen Zertifikat nicht nutzen?

    • Das klingt, als ob du deine Domain bei einem Shared-Hosting Anbieter betreibst. Da ist es natürlich von Anbieter zu Anbieter unterschiedlich. Ich war damals bei Hetzner und dort konnte man die SSL-Verschlüsselung separat als Addon buchen und ihnen dann ein eigenes Zertifikat hinlegen, das sie dann eingespielt haben. Ich war zu keinem Zeitpunkt gezwungen, das Zertifikat direkt über Hetzner zu beziehen. Ob andere Anbieter da ähnlich vorgehen der ob die dann auch automatisch Geld mit dem Zertifikat selbst (wie gesagt, StartSSL bietet soetwas kostenlos an) verdienen wollen, kann ich dir nicht sagen.

  2. Das habe ich gemacht. Da kommt immer eine Warnung-Seite. Kann man es nicht ohne diese Warnung haben?

        • Hallo Erwin, um ehrlich zu sein, hängt das sehr stark von deiner von dir betriebenen Infrastruktur ab, die ich selbst leider überhaupt nicht kenne. Ich kann dir diesbezüglich deshalb keine Hinweise geben.

    • Indem du in deinem /wp-content/plugins/ Ordner eine Datei mit der Endung ".php" anlegst (z.B. "optionalssl.php"), dort den Code reinkopierst und anschließend in deine Pluginverwaltung gehst und dort das Plugin aktivierst.

Schreibe einen Kommentar

Um Ihnen beim weiteren Kommentieren auf dieser Webseite die erneute Eingabe Ihrer Daten zu ersparen, wird beim Absenden Ihres Kommentars ein Cookie an Ihren Browser gesendet und von diesem gespeichert. Mit dem Absenden eines Kommentars auf dieser Webseite stimmen Sie der Speicherung und Übertragung dieses Cookies explizit zu.

Pflichtfelder sind mit * markiert.