Da private Dateien auf unserem Server gespeichert und übertragen werden sollen, macht es Sinn, alle Verbindungen über SSL abzusichern. Infos wie das geht, finden sich etwa hier oder hier.
Zunächst brauchen wir die notwendigen Schlüssel, um eine sichere SSL-Verbindung aufbauen zu können. Normalerweise werden diese extern zertifiziert, wir zertifizieren uns die Schlüssel jedoch selber (das führt allerdings dazu, dass alle Browser uns später beim Aufrufen unsere Serverwebseite darauf hinweisen werden, dass die Identität des Schlüssels nicht festgestellt werden kann und daher nicht vertrauenswürdig sei).
- Als erstes wechseln wir in das Verzeichnis, wo später die Schlüssel liegen sollen:
cd /etc/nginx/
- Dann erstellen wir den privaten Schlüssel:
openssl genrsa -des3 -out server.key 1024
- Jetzt das Certificate Signing Request erstellen:
openssl req -new -key server.key -out server.csr
- Um Nginx automatisch mit SSL starten zu können, ohne jedes mal unsere Passwort angeben zu müssen:
cp server.key server.key.org openssl rsa -in server.key.org -out server.key
- Und zum Schluss signieren wir unsere Serverzertifikat mit einer Laufzeit von 10 Jahren:
openssl x509 -req -days 3650 -in server.csr -signkey server.key -out server.crt
Als nächsten müssen wir nginx mitteilen, dass wir ab jetzt eine SSL Zertifikat haben und ALLE Verbindungen über SSL aufbauen wollen. Dafür müssen wir die Konfigurationsdatei von nginx wie folgt (ACHTUNG, nur ausschnittsweise Darstellung der Datei) anpassen (/etc/nginx/nginx.conf):
server { listen 80; server_name localhost; # SPÄTER MUSS HIER DER DYNDNS NAME HIN rewrite ^ https://$server_name$request_uri? permanent; # ALLE http Anfragen in https Anfragen ändern location / { root /srv/http; index index.php index.html index.htm; } location ~ \.php$ { root /srv/http; fastcgi_pass unix:/var/run/php-fpm/php-fpm.sock; fastcgi_index index.php; fastcgi_param SCRIPT_FILENAME /srv/http$fastcgi_script_name; fastcgi_param HTTPS on; include fastcgi_params; } } server { listen 443; server_name localhost; # SPÄTER MUSS HIER DER DYNDNS NAME HIN ssl on; ssl_certificate /etc/nginx/server.crt; ssl_certificate_key /etc/nginx/server.key; ssl_session_timeout 5m; ssl_protocols SSLv2 SSLv3 TLSv1; ssl_ciphers HIGH:!aNULL:!MD5; ssl_prefer_server_ciphers on; location / { root /srv/http; index index.php index.html index.htm; } location ~ \.php$ { root /srv/http; fastcgi_pass unix:/var/run/php-fpm/php-fpm.sock; fastcgi_index index.php; fastcgi_param SCRIPT_FILENAME /srv/http$fastcgi_script_name; fastcgi_param HTTPS on; include fastcgi_params; fastcgi_param HTTP_AUTHORIZATION $http_authorization; fastcgi_param htaccessWorking true; }
Jetzt nur noch nginx neustarten
systemctl restart nginx
und unser pogoplug-Server sollte alle Verbindungen über SSL absichern.