Debian SSL / HTTPS mit Apache2 einrichten

Einleitung

Hi,
seit der weltweiten Überwachung der NSA wissen wir alle das Verschlüsselung wichtig ist. Wie Ihr selbst HTTPS auf eurer Seite einrichtet zeige ich heute in einem kurzen Tutorial. Ich weise noch mal darauf hin das selbst erstellte Zertifikate bitte nur Lokal und zu Testzwecken genutzt werden sollten. Ok dann lasst uns beginnen.

Voraussetzungen:

Ihr benötigt Debian mit installiertem OpenSSL Modul und den Apache2 Webserver. Den Rest werden wir hier zusammen installieren.

SSL Zertifikat erstellen / generieren

Mit Hilfe von OpenSSL können wir uns in relativ wenigen Schritten ein eigenes Zertifikat erstellen.

1. Ordner zum speichern des Zertifikates erstellen und dorthin wechseln

mkdir /etc/apache2/ssl
cd /etc/apache2/ssl

3. Jetzt erstellen wir unseren privaten Key

openssl genrsa -out sslcert.key 2048

4. Aus dem Key generieren wir nun eine CSR Datei (Zertifizierungsanforderung oder auch engl. Certificate Signing Request). Diese enthält vereinfacht gesagt die Zertifikats Informationen.

openssl req -new -key sslcert.key -out sslcert.csr

Anschließend muss eine Reihe von Informationen eingegeben werden. In unserem Fall geben wir bei "CommonName" localhost ein da wir das Zertifikat für eine lokale Entwicklungsumgebung erstellen. Sie können auch alle anderen Felder leer lassen und diese mit "Enter" überspringen.

Country Name (2 letter code) [AU]:
State or Province Name (full name) [Some-State]:
Locality Name (eg, city) []:
Organization Name (eg, company) [Internet Widgits Pty Ltd]:
Organizational Unit Name (eg, section) []:
Common Name (e.g. server FQDN or YOUR name) []:
Email Address []:

Please enter the following 'extra' attributes
to be sent with your certificate request
A challenge password []:
An optional company name []:

5. Jetzt können wir aus der CSR Datei unser Zertifikat generieren. Die Gültigkeitsdauer des Zertifikates kann mit dem Parameter -days angegeben werden. In unserem Fall ist es 1 Jahr gültig.

openssl x509 -req -days 365 -in sslcert.csr -signkey sslcert.key -out sslcert.crt

Apache2 konfigurieren

1. Damit der Apache2 Webserver mit dem Zertifikat umgehen kann aktivieren wir zu nächst das "SSL Modul".

a2enmod ssl

2. Damit der Apache auf auf dem richtigen Port lauscht überprüfen wir die "ports.conf" im Ordner /etc/apache2/

cat /etc/apache2/ports.conf

Die Datei sollte in etwa so aussehen. Wichtig ist das auf Port 443 gelauscht wird.
Listen 80


        Listen 443



        Listen 443



3. Jetzt erstellen wir noch eine neue Vhost Config für den SSL Port.

nano /etc/apache2/sites-available/application-ssl.conf

Diese füllen wir dann mit folgendem Inhalt:

    DocumentRoot /var/www/application/public

    ErrorLog /var/www/application/log/error.log
    CustomLog /var/www/application/log/access.log combined

    SSLEngine on
    SSLCertificateKeyFile /etc/apache2/ssl/sslcert.key
    SSLCertificateFile /etc/apache2/ssl/sslcert.crt

    

        Options Indexes FollowSymLinks
        AllowOverride All
        Require all granted

    


4. Im letzten Schritt starten wir Apache neu

service apache2 restart

Eure Seite sollte jetzt über https aufrufbar sein. Die Sicherheitswarnung im Firefox / Chrome sind normal, diese könnt Ihr einfach akzeptieren. Ich empfehle euch aber diese Konfiguration nur für Lokale Entwicklungsumgebungen! Für produktive Umgebungen bitte noch mal gründlich in SSL einlesen und ein Zertifikat von einem anerkannten Zertifikatsanbieter nehmen.

PC Spiele Release Kalender 2016 / 2017


Hi,

ich war heute auf der Suche nach einem "PC Spiele Release Kalender" den ich einfach in meinem Google Kalender importieren kann. Leider wurde ich bitter enttäuscht und ich fand nichts in der Form. Deshalb beschloss ich kurzer Hand einen eigenen "PC Spiele Release Kalender" für meinen Google Kalender zu erstellen. In diesem habe ich alle wichtigen neu Erscheinungen der nächsten Zeit eingetragen. Das Ergebnis stelle ich euch hier zur Verfügung.

PC Games Release Kalender 2016/2017

ICAL:
https://calendar.google.com/calendar/ical/m9but2o3kra856b8ige3mlh3hg%40group.calendar.google.com/public/basic.ics

HTML:
https://calendar.google.com/calendar/embed?src=m9but2o3kra856b8ige3mlh3hg%40group.calendar.google.com&ctz=Europe/Amsterdam

Falls Ihr Vorschläge oder Wünsche habt, dann schreibt sie einfach in die Kommentare.

Viel Spass mit dem Kalender.

PS: Er wird auch regelmäßig gepflegt.

Grüße

Daten Quelle:
http://www.gamestar.de/releaseliste/
http://www.pcgameshardware.de/Spiele-Thema-239104/Specials/PC-Spiele-2016-1168561/

Debug SplObjectStorage, ArrayObject und update Xdebug

Unser Thema: SplObjectStorage, ArrayObject debuggen

Hallo,
heute dreht sich alles um die Frage:
"Wie kann man PHP Klassen die von SplObjectStorage oder ArrayObject erben debuggen und dessen Inhalt sehen?"

Mein Problem

In meinem PHP Projekt benutze ich viele Collection Klassen die von ArrayObject erben. (Erklärung: ArrayObject ist eine PHP interne Klasse die es erlaubt Objekte so wie Arrays arbeiten zu lassen. PHP.net).

Dabei ist mir aufgefallen das ich den Inhalt von solchen Collections nicht in PHPStorm debuggen kann. Ich erhielt nur Meldungen wie "can not get property".

Nach kurzer Recherche im Internet fand ich ich dann auch die Ursache des Problems.





Die Ursache

Die Ursache des Problems war eine veraltet Xdebug Version. In meinem Fall war es die Version 2.2.3 welche die Darstellung von solchen Objekten nicht unterstützte.

Die Lösung

Das Problem war also gefunden nun musste es nur noch gelöst werden. Der Fehler in Xdebug wurde in der Version 2.3.3 behoben. Also musste ich nur eine Version installieren die >2.3.3 ist. (Xdebug Bug Ticket)

Xdebug updaten >2.3.3

Um Xdebug zu aktualisieren müssen wir eigentlich nur eine aktuelle Version herunterladen diese kompilieren und aktivieren. Wie das geht erkläre ich euch jetzt.

Xdebug Wizard hilft euch

Um einfach die für euch empfohlene Xdebug Version herauszufinden könnt Ihr den von der Xdebug Homepage bereitgestellten Wizard benutzen. Xdebug Wizard

Dem Wizard müsst Ihr nur den Inhalt eurer PHPInfo übergeben. Dazu einfach eine Datei anlegen (z.B. info.php) mit dem Inhalt:
<?php echo phpinfo(); 
Den Inhalt der Seite kopiert Ihr mit Strg + A (alles Markieren) und Strg + C (kopieren) in das Feld auf der Wizard Seite.

Der Wizard erzeugt euch dann eine Ausgabe mit einer passenden Installationsanleitung für euer System.

Xdebug herunterladen und kompilieren

  • In /tmp Verzeichnis wechseln
    • Befehl: cd /tmp
  • Xdebug herunterladen
    • Befehl: wget http://xdebug.org/files/xdebug-2.4.1.tgz
  • Archiv entpacken
    • Befehl: tar -xvzf xdebug-2.4.1.tgz
  • In entpackte Verzeichnis wechseln
    • Befehl: cd xdebug-2.4.1
  • Build initialisieren
    • Befehl: phpize
  • Konfigurieren
    • Befehl: ./configure
  • Builden
    • Befehl: make
  • Kompiliertes Modul in PHP Ordner kopieren
    • Befehl: cp modules/xdebug.so /usr/lib/php5/20121212
  • Falls nötig Extension Pfad anpassen in der php.ini
    • nano /etc/php5/apache2/php.ini
    • Einfügen: zend_extension = /usr/lib/php5/20121212/xdebug.so
Bei mir war der letzte Schritt nicht nötig da in meiner php.ini nur die Extension per Name "xdebug.so" geladen wird.

Wichtig! Nach den Änderungen PHP/Apache neustarten, damit die Änderungen wirksam werden.

Ergebnis

Eure phpinfo Datei sollte nun die aktuell installierte Version von Xdebug anzeigen. In etwa so:
Nachdem alles geklappt hat könnt Ihr nun ohne Probleme solche ArrayObject Klassen debuggen :)

Falls Ihr Probleme oder Anregungen habt schreibt diese bitte in die Kommentare.

Viel Spass und bis bald.

Pokemon Go - Cheater melden bei Niantic



Ja ich oute mich als Pokemon Go Spieler :D. Aber damit bin ich ja zum Glück nicht alleine hier.

Wahrscheinlich haben die meisten von euch es schon selbst erlebt. Man möchte eine Arena einnehmen aber diese wird von unbesiegbar starken Trainern blockiert. Ja ich rede von diesen Cheatern die die Arenen mit Ihrem hoch gelevelten Charakteren und Pokemon besetzen... (lvl 34-40).

Da Niantec jetzt permanente Banns für solche Spieler vergibt wird es Zeit nicht nur untätig rum zu sitzen sondern diese Spieler zu melden.

Hier noch mal der Link zum Niantec Formular: -> Cheater Melden

Das Formular sollte so aussehen:



Es ist wichtig das Ihr auch Screenshots von den Personen macht und diese im Formular hinzufügt. Screenshots kann man unter Android mit der Tastenkombination "Lautstärke runter" + "Power Button" erstellen.

Ich hoffe das wir gemeinsam etwas gegen diese Cheater und Botter unternehmen können und das das Spiel bald Frei von solchen Leuten ist.

Meinungen und Vorschläge bitte in die Kommentare.

PHP 7 auf Ubuntu 14 / 15 installieren

Ich erkläre euch hier wie Ihr PHP 7 auf eurem Ubuntu Server mit der Version 14 / 15 installieren könnt.

Der nette Herr Ondřej Surý pflegt nämlich ein PHP 7 Repository welches uns die einfache Installation mittels apt-get ermöglicht. Danke!

// repo hinzufügen und installieren
sudo apt-get install python-software-properties
sudo add-apt-repository ppa:ondrej/php
sudo apt-get update
sudo apt-get install -y php7.0 

// php7 check
php -v

// verfügbare Module auflisten
sudo apt-cache search php7-*

// alle wichtigen php7 module installieren
sudo apt-get install php7.0-mysql php7.0-curl php7.0-json php7.0-cgi php7.0-opcache php7.0-json php7.0-tidy php7.0-ldap php7.0-intl php7.0-cli php7.0-common php7.0-xmlrpc libapache2-mod-php7.0 php7.0-soap php7.0-xml php7.0-zip php7.0-mcrypt

// memcached installieren
sudo apt-get install -y php-memcached

Fertig!
Eure Seite sollte nun mit PHP 7 ausgeliefert werden. Um das zu prüfen einfach ein phpinfo(); in euren Code einbauen und ausgeben lassen.

Ich werde jetzt noch einige PHP 7 Tests durchführen und wünsche euch viel Spass mit eurer Installation.

Selbstsigniertes Zertifikat erstellen und mit NGINX benutzen


Hi, wer NGINX und SSL benutzen möchte dazu aber kein Geld ausgeben will kann dies mit einem selbstsignierten Zertifikat machen. Dies wird aber nicht für Produktivsysteme geraten!

Als erstes erstellen wir uns einen Ordner im nginx Verzeichnis wo wir die Zertifikate generieren.
mkdir /etc/nginx/https
cd /etc/nginx/https
Zertifikate erzeugen:
openssl genrsa -out example.key 2048
openssl req -new -key example.key -out example.csr

Dabei kann man einige Daten angeben... oder auch nicht ;)
Country Name (2 letter code) [AU]:DE
State or Province Name (full name) [Some-State]:Mecklenburg-Vorpommern
Locality Name (eg, city) []:Neubrandenburg 
Organization Name (eg, company) [Internet Widgits Pty Ltd]:Example Inc
Organizational Unit Name (eg, section) []:Skunk works
Common Name (e.g. server FQDN or YOUR name) []:example.org
Email Address []:webmaster@example.org

Please enter the following 'extra' attributes
to be sent with your certificate request
A challenge password []:
An optional company name []:

Unser nun selbst erstelltes Zertifikat wird nun von uns selbst signiert für 730 Tage.
openssl x509 -req -days 730 -in example.csr -signkey example.key -out example.crt

Wir können nun unsere Zertifikate in NGINX einbinden. Dies passiert in der "server {}" Direktive.
server {
        listen 80;
        listen 443 ssl;

        root /var/www/example/root;
        index index.html index.htm;
 
        server_name example.com;

        ssl_certificate /etc/nginx/ssl/example.crt;
        ssl_certificate_key /etc/nginx/ssl/example.key;
}

Nach der Änderung den Webserver neustarten:
service nginx restart (oder /etc/init.d/nginx restart)

https / ssl sollte nun für eure Seite funktionieren. Da die Zertifikate selbst ausgestellt wurden müssen diese im Browser beim aufruf der Seite noch vertraut werden. Wer das nicht will sollte sich ein Zertifikat mit hilfe von "Lets Encrypt" erstellen.

Installieren der neusten NGINX Version unter Ubuntu 15.10


Hi,
ich möchte euch hier zeigen wie Ihr die neuste NGINX Version unter Ubuntu 15.10 installiert.

Das Problem welches Ubuntu hat ist das nicht die neuste Version des Webservers in den Repos vorhanden ist. Aber zum Glück pflegt das NGINX Team ein eigenes "apt" Repository. Und dieses machen wir uns zunutze :)


1. NGINX "Signing Key" hinzufügen
curl http://nginx.org/keys/nginx_signing.key | apt-key add -
2. NGINX Repo zur source list hinzufügen
echo -e "deb http://nginx.org/packages/mainline/ubuntu/ `lsb_release -cs` nginx\ndeb-src http://nginx.org/packages/mainline/ubuntu/ `lsb_release -cs` nginx" > /etc/apt/sources.list.d/nginx.list
3. Paket Index aktualisieren
apt-get update
4. Neuste NGINX Version installieren :)
apt-get install nginx
5. Fertig!
nginx -v
Du solltest nun die aktuelle Versionsnummer deines NGINX Webservers sehen.

Hinweiß: Die hier installierte Version beinhaltet das HTTP2 / SSL Modul bereits

[Off Topic] - Leipzig Cinestar Sneak Google Kalender


Hi,
mal ein Off Topic Thema hier :) Da ich gern mit meiner Freundin in die Sneak im Leipziger Cinestar gehen und ich dazu einen Kalender angelegt habe welche Filme gekommen sind, möchte ich diesern hier gern für interessierte teilen.

Der Kalender wird von Google Kalender gehostet und wird regelmäßig von mir gepflegt.

ICAL:
https://calendar.google.com/calendar/ical/rvhe37u6olp5rtj7tegbg9l1rg%40group.calendar.google.com/public/basic.ics

HTML:
https://calendar.google.com/calendar/embed?src=rvhe37u6olp5rtj7tegbg9l1rg%40group.calendar.google.com&ctz=Europe/Amsterdam

Viel Spass damit und vielleicht sieht man sich mal in der Sneak ;)
Grüße

NGINX - Passwortschutz für Ordner / Verzeichnis

Manchmal ist es sinnvoll einige seiner Internet Seiten mit einem Passwort zu schützen. Meistens wenn Webseiten noch nicht fertig sind oder bestimmte Ordner einfach nicht jedem Zugänglich sein sollen.

Der NGINX Webserver bietet dazu eine einfache Möglichkeit dieses Ziel zu erreichen. Mit dem meist Standardmäßig installierten NGINX Modul "ngx_http_auth_basic_module" kann man einen einfachen Passwortschutz realisieren. Zur Validierung wir der Benutzername und das Passwort verwendet (HTTP Basic Authentication).

Der Benutzer und das Passwort werden dazu in eine separate Datei gespeichert. Um diese Datei einfach zu erstellen benötigt man das Paket "apache2-utils".


  sudo apt-get install apache2-utils

Mit dem Befehl htpasswd erzeugt man nun eine Datei für einen bestimmten Benutzer (in dem Fall "admin"). Außerdem speichern wir die Datei direkt in das NGINX Verzeichnis.


  sudo htpasswd -c /etc/nginx/admin.htpasswd admin

Mann muss das Passwort 2 mal eingeben.

Anschließend muss man noch die NGINX Konfiguration anpassen. Hier ein kleines Beispiel.
server {
    server_name mypage.tld www.mypage.tld;
    
    listen 80 default_server;
    
    root /var/www;
    
    location /admin {
        auth_basic "Zugriff nicht erlaubt";
        auth_basic_user_file /etc/nginx/admin.htpasswd;
    }
}

Am Ende muss man noch den Webserver neustarten und schon sollte es funktionieren.

  sudo /etc/init.d/nginx restart

Fertig!
Euer Verzeichnis sollte jetzt geschützt sein. z.B. www.mypage.tld/admin

Quelle: Link

Ubuntu/Debian SSH Key erzeugen


Ubuntu SSH Key erzeugen und mit Github und Gitlab verwenden

Um sich ohne Passwort zu authentifizieren benötigt man oft einen SSH Key (Public Key). Hier in diesem Artikel erkläre ich euch kurz wie Ihr diesen erzeugen und benutzen könnt. (Artikel ist für Ubuntu/Debian System gedacht).
Bei dem Public-Key-Verfahren wird eine asymmetrische Verschlüsselung genutzt um den Benutzer zu authentifizieren. Der (oder die) öffentliche(n) Schlüssel des Benutzers befindet sich dabei in der Datei ~/.ssh/authorized_keys des Zielsystems, der private Schlüssel in einer Datei (meist id_rsa) im Verzeichnis ~/.ssh auf dem lokalen System, wo er zusätzlich von einer "pass phrase" geschützt wird. Wenn man sich nun mit der Public-Key-Methode auf einem SSH-Server anmelden möchte, so schickt der Server dem Klienten eine zufällig generierte Challenge. Der Klient verschlüsselt diesen Datenblock mit seinem privaten Schlüssel, (wofür nötigenfalls die Passphrase abgefragt wird,) und wenn der Server diesen Chiffre mit dem zugehörigen öffentlichen Schlüssel wieder entschlüsseln kann, ist die Identität des Benutzers bestätigt. Quelle

SSH Key erzeugen

ssh-keygen -t rsa -b 4096 

Erzeugt eine ähnlich aussehende Ausgabe:
Generating public/private rsa key pair.
Enter file in which to save the key (/home/user/.ssh/id_rsa):
Enter passphrase (empty for no passphrase):
Enter same passphrase again:
Your identification has been saved in /home/user/.ssh/id_rsa.
Your public key has been saved in /home/user/.ssh/id_rsa.pub.
The key fingerprint is:
24:55:ee:67:83:72:82:55:5f:b9:b4:09:2a:fa:56:a1 user@client.local
The key's randomart image is:
+--[ RSA 4096]----+
|                 |
|                 |
|                 |
|         +    .  |
|        S    E   |
|         .  + +  |
|          .o . o.|
|         o.oo. oo|
|          ==o.BO+|
+-----------------+

SSH Ordner

Der erstellte Key sollte nun in eurem SSH Ordner unter ... zu finden sein.
/home/user/.ssh/

SSH anzeigen und zu Github/Gitlab kopieren

Nun den Inhalt des Public Keys (.pub) in euren Github / Gitlab Account unter SSH Keys hinterlegen. Einfach den Inhalt der Datei mit dem Befehl cat ausgeben lassen und kopieren.
cat id_rsa.pub


Fertig :)