Prüfen, ob das eigene Netzwerk von aussen erreichbar ist (Vorarbeiten) und den Raspberry absichern (Security).
Der Webserver nginx kann u.a. auch als Reverse-Proxy zur Erhöhung der Sicherheit eingesetzt werden. Eine Beschreibung zur Installation findet sich z.B. hier.
Im November 2018 war im Raspbian-Paketrepository eine ziemlich alte nginx-Version (v1.10) verfügbar. Zwischenzeitlich gibt es neue Versionen, die vermeintlich schneller und sicherer seien. Ein wenig weiter unten habe ich die Installation der aktuellen Version beschreiben.
sudo apt install nginx php-fpm
sudo nginx
Anmerkung Ich hatte hier beim ersten Start eine Fehlermeldung:
nginx: [emerg] bind() to 0.0.0.0:80 failed (98: Address already in use)
nginx: [emerg] bind() to [::]:80 failed (98: Address already in use)
Tat es aber trotzdem... Falls nicht:
sudo fuser 80/tcp
zeigt die Prozesse, die auf Port 80 zugreifen und sudo fuser -k 80/tcp
stoppt die Prozesse.
In den Paketrepositories ist nginx nicht an PHP gebunden. Bei der Entwicklung von nginx wurde die Entscheidung getroffen, PHP-FMP (eine schnellere Version von PHP) anstelle eines herkömmlicheren PHP zu verwenden. Daher werden wir php-fpm installieren, um PHP-Dateien mit nginx zu verwalten.
Die aktuelle Version (Dez 2018: v1.14.2-1) ist nicht ganz so einfach zu installieren, da man hierfür den testing branch von Raspbian den Paketquellen hinzufügen muss. Eine Beschreibung der Installation habe ich hier gefunden.
Anlegen der Datei /etc/apt/sources.list.d/10-buster.list
mit folgendem Inhalt:
deb http://mirrordirector.raspbian.org/raspbian/ buster main contrib non-free rpi
Anlegen der Datei /etc/apt/preferences.d/10-buster
mit folgendem Inhalt:
Package: *
Pin: release n=stretch
Pin-Priority: 900
Package: *
Pin: release n=buster
Pin-Priority: 750
Die Installation erfolgt mit den nachstehenden Kommandos. Hierbei habe ich alle Default-Werte akzeptiert.
sudo apt-get update
sudo apt-get install -t buster nginx
Bei mir ist Installation nicht glatt durchgelaufen; zwei der Meldungen habe ich mir zur Sicherheit hier aufgehoben.
Anmerkung: War bei mir auch ohne dies Kommando bereits autostart.
Ausführen des Kommandos:
sudo update-rc.d -f nginx defaults
Auf dem Pi im Browser http://localhost
oder auf dem Client http://192.168.178.111
aufrufen, um die Funktion zu überprüfen:
(Hier und hier gibt es eine sehr ausführliche Beschreibung, wie man sein Home Automation durch einen Reverse Proxy mit SSL-Zertifikat (siehe hier) absichern kann.
Leider habe ich das bisher nicht hinbekommen.)
Vor der Erstellung des Zertifikates sind noch einige Einstellungen zu machen.
Damit certbot:
die Identität überprüfen kann:
Mit sudo nano /etc/nginx/snippets/letsencrypt.conf
eine Datei anlegen und folgenden Inhalt eingeben.
location ^~ /.well-known/acme-challenge/ {
default_type "text/plain";
root /var/www/letsencrypt;
}
Anschließend folgende Kommandos ausführen:
sudo mkdir -p /var/www/letsencrypt/.well-known/acme-challenge
sudo nano /etc/nginx/sites-available/default
Nun unterhalb von listen [::]:80 default_server;
die Zeile include /etc/nginx/snippets/letsencrypt.conf;
einfügen, so dass die eben erstellte Datei inkludiert wird.
server {
listen 80 default_server;
listen [::]:80 default_server;
include /etc/nginx/snippets/letsencrypt.conf;
[...]
Mit sudo service nginx restart
nginx neu starten.
cd
mkdir certbot
cd certbot/
wget https://dl.eff.org/certbot-auto
chmod u+x certbot-auto
sudo ./certbot/certbot-auto certonly --rsa-key-size 4096 --webroot -w /var/www/letsencrypt --email <myMail> -d <myDNSName>
Beim ersten Aufruf wird die benötigte Software installiert, bei späteren Aufrufen ggf. aktualisiert (0.29.1) und anschließend das Zertifikat herunter geladen.
Damit der LetsEncrypt-Server die angegebene Domain überprüfen kann, muss kurzfristig Port 80 freigegeben werden. Ist dies nicht der Fall, erhält man eine Fehlermeldung: The server could not connect to the client to verify the domain
.
Mit dem Kommando sudo ls -l /etc/letsencrypt/live
kann man überprüfen, dass ein Ordner mit dem Namen der eigenen dynDNS angelegt wurde.
Nun noch mit sudo nano /etc/nginx/conf.d/<mydomain>.conf
die Konfigurationsdatei für die eigene Domäne erstellen. Hier der erste minimale Inhalt dieser Datei in Anlehnung an das oben erwähnte Tutorial.
server {
listen 443 ssl default_server;
server_name <myDNSName>;
##
# SSL
##
## Activate SSL, setze SERVER Zertifikat Informationen ##
# Generiert via Let's Encrypt!
ssl on;
ssl_certificate /etc/letsencrypt/live/<myDNSName>/fullchain.pem;
ssl_certificate_key /etc/letsencrypt/live/<myDNSName>/privkey.pem;
ssl_session_cache builtin:1000 shared:SSL:10m;
ssl_prefer_server_ciphers on;
# unsichere SSL Ciphers deaktivieren!
ssl_ciphers HIGH:!aNULL:!eNULL:!LOW:!3DES:!MD5:!RC4;
##
# HSTS
##
add_header Strict-Transport-Security "max-age=31536000; includeSubDomains" always;
##
# global
##
root /var/www/<myDNSName>;
index index.php index.htm index.html;
# Weiterleitung von allen über https eingehenden Calls auf einen nodejs-Testserver
location / {
proxy_pass http://127.0.0.1:3000;
proxy_buffering off;
}
}
Mit sudo service nginx restart
nginx neu starten.
Mit sudo ./certbot/certbot-auto renew --dry-run
kann man testen, ob die automatische Erneuerung des Zertifikates funktionieren würde. Hierzu vorher Port 80 weiterleiten.
Es fehlt noch, diese Erneuerung alle 2 Monate zu automatisieren
Wird das überhaupt benötigt, wenn man sich ohnehin nicht mit Kennwort anmelden kann?
https://www.pilgermaske.org/2018/06/sshguard-schnell-und-einfach-ssh-absichern/
Über GeoIP kann herausgefunden werden, aus welchem Land eine Anfrage kommt, so dass man bestimmte Länder zulassen oder blockieren kann.
sudo apt-get install geoip-database libgeoip1
cd /usr/share/GeoIP/
sudo wget http://geolite.maxmind.com/download/geoip/database/GeoLiteCountry/GeoIP.dat.gz
sudo gunzip GeoIP.dat.gz
Nun die Datei /etc/nginx/nginx.conf
bearbeiten und direkt im „http“ Block die GeoIP Einstellungen hinzufügen:
# GeoIP Settings
# Nur Länder aus erlaubten IP Bereichen dürfen den ReverseProxy
# passieren!
# https://www.howtoforge.de/anleitung/nginx-besucher-mit-dem-geoip-modul-nach-landern-blocken-debianubuntu/
##
geoip_country /usr/share/GeoIP/GeoIP.dat;
map $geoip_country_code $allowed_country {
default no;
DE yes;
}
Achtung: Man kommt dann auch selbst nicht durch, wenn man sich im Ausland befindet.
Nun mit sudo nano /etc/nginx/conf.d/<mydomain>.conf
die Konfigurationsdatei im Server-Block erweitern:
server {
[...]
## Blocken, wenn Zugriff aus einem nicht erlaubten Land erfolgt ##
if ($allowed_country = no) {
return 403;
}
[...]
}
Nach dem Neustart von NGINX mit sudo service nginx restart
ist die Änderung aktiv.
Um eine angepasste Seite bei Errors anzeigen zu können, muss eine entsprechende Seite erstellt und die .conf-Datei in der Server-Section angepasst werden.
.conf:
if ($allowed_country = no) {
return 403;
}
error_page 403 = @403;
location @403 {
root /var/www/html/;
try_files /403.html =403;
}
Hier mal ein Beispiel für 403.html - :
<!DOCTYPE html>
<html lang="en">
<head>
<!-- Simple HttpErrorPages | MIT License | https://github.com/AndiDittrich/HttpErrorPages -->
<meta charset="utf-8" /><meta http-equiv="X-UA-Compatible" content="IE=edge" /><meta name="viewport" content="width=device-width, initial-scale=1" />
<title>Access Denied</title>
<style type="text/css">/*! normalize.css v5.0.0 | MIT License | github.com/necolas/normalize.css */html{font-family:sans-serif;line-height:1.15;-ms-text-size-adjust:100%;-webkit-text-size-adjust:100%}body{margin:0}article,aside,footer,header,nav,section{display:block}h1{font-size:2em;margin:.67em 0}figcaption,figure,main{display:block}figure{margin:1em 40px}hr{box-sizing:content-box;height:0;overflow:visible}pre{font-family:monospace,monospace;font-size:1em}a{background-color:transparent;-webkit-text-decoration-skip:objects}a:active,a:hover{outline-width:0}abbr[title]{border-bottom:none;text-decoration:underline;text-decoration:underline dotted}b,strong{font-weight:inherit}b,strong{font-weight:bolder}code,kbd,samp{font-family:monospace,monospace;font-size:1em}dfn{font-style:italic}mark{background-color:#ff0;color:#000}small{font-size:80%}sub,sup{font-size:75%;line-height:0;position:relative;vertical-align:baseline}sub{bottom:-.25em}sup{top:-.5em}audio,video{display:inline-block}audio:not([controls]){display:none;height:0}img{border-style:none}svg:not(:root){overflow:hidden}button,input,optgroup,select,textarea{font-family:sans-serif;font-size:100%;line-height:1.15;margin:0}button,input{overflow:visible}button,select{text-transform:none}[type=reset],[type=submit],button,html [type=button]{-webkit-appearance:button}[type=button]::-moz-focus-inner,[type=reset]::-moz-focus-inner,[type=submit]::-moz-focus-inner,button::-moz-focus-inner{border-style:none;padding:0}[type=button]:-moz-focusring,[type=reset]:-moz-focusring,[type=submit]:-moz-focusring,button:-moz-focusring{outline:1px dotted ButtonText}fieldset{border:1px solid silver;margin:0 2px;padding:.35em .625em .75em}legend{box-sizing:border-box;color:inherit;display:table;max-width:100%;padding:0;white-space:normal}progress{display:inline-block;vertical-align:baseline}textarea{overflow:auto}[type=checkbox],[type=radio]{box-sizing:border-box;padding:0}[type=number]::-webkit-inner-spin-button,[type=number]::-webkit-outer-spin-button{height:auto}[type=search]{-webkit-appearance:textfield;outline-offset:-2px}[type=search]::-webkit-search-cancel-button,[type=search]::-webkit-search-decoration{-webkit-appearance:none}::-webkit-file-upload-button{-webkit-appearance:button;font:inherit}details,menu{display:block}summary{display:list-item}canvas{display:inline-block}template{display:none}[hidden]{display:none}/*! Simple HttpErrorPages | MIT X11 License | https://github.com/AndiDittrich/HttpErrorPages */body,html{width:100%;height:100%;background-color:#21232a}body{color:#fff;text-align:center;text-shadow:0 2px 4px rgba(0,0,0,.5);padding:0;min-height:100%;-webkit-box-shadow:inset 0 0 100px rgba(0,0,0,.8);box-shadow:inset 0 0 100px rgba(0,0,0,.8);display:table;font-family:"Open Sans",Arial,sans-serif}h1{font-family:inherit;font-weight:500;line-height:1.1;color:inherit;font-size:36px}h1 small{font-size:68%;font-weight:400;line-height:1;color:#777}a{text-decoration:none;color:#fff;font-size:inherit;border-bottom:dotted 1px #707070}.lead{color:silver;font-size:21px;line-height:1.4}.cover{display:table-cell;vertical-align:middle;padding:0 20px}footer{position:fixed;width:100%;height:40px;left:0;bottom:0;color:#a0a0a0;font-size:14px}</style>
</head>
<body>
<div class="cover"><h1>Access Denied <small></small></h1><p class="lead"></p></div>
<footer><p></p></footer>
</body>
</html>
Hier kann man einige Einstellungen zur Abwehr von bots, spammern und ähnlichem nachlesen. Es gilt die nginx-Konfigurationsdatei mit sudo nano /etc/nginx/conf.d/<mydomain>.conf
im Server-Block zu erweitern:
if ($http_user_agent ~* LWP::Simple|BBBike|wget) {
return 403;
}
if ($http_user_agent ~* msnbot|scrapbot) {
return 403;
}
if ( $http_referer ~* (babes|forsale|girl|jewelry|love|nudit|organic|poker|porn|sex|teen) ) {
return 403;
}
Nun ist es langsam an der Zeit, sich um Backups zu kümmern.
Eine gute Bescheibung zu Zertifikaten gibt es hier.
LinkSammlung: Von Jörg: https://github.com/node-opcua/node-opcua/blob/master/documentation/notes_on_certificates.md https://deliciousbrains.com/ssl-certificate-authority-for-local-https-development/ https://www.hagen-bauer.de/2014/06/eigene-ca-erstellen.html https://blog.netways.de/2018/08/15/realisierung-einer-clientbasierter-zertifikats-authentifizierung-mutual-ssl-mit-selbstsignierten-zertifikaten-auf-linux-apache/
Für die Sicherung des Raspberry Pi durch Client-Zertifikate gibt es hier, hier und hier hilfreiche Anleitungen.
Anmerkung: pi in den Dateinamen (z.B. pi.key) ist beliebig gewählt.
Erstellung eines eigenen rootca-Zertifikates-Privatekeys mit 4096 bit Schlüssellänge und Encryption des erstellten privaten Keys mit einem Kennwort:
sudo openssl genrsa -des3 -out /etc/ssl/ca/private/rootca.key 4096
Erstellen eines Serverzertifikats mit 3 Jahren Gültigkeit:
sudo openssl req -new -x509 -days 1095 -key /etc/ssl/ca/private/rootca.key -out /etc/ssl/ca/certs/rootca.crt
Erstellen eines Keys für einen ersten Client. - Hier 4096 oder nur 1024
sudo openssl genrsa -des3 -out /etc/ssl/ca/certs/users/mac.key 1024
Für den soeben erstellten Client-Key erstellen wir nun eine Zertifikatsanforderung (CSR):
sudo openssl req -new -key /etc/ssl/ca/certs/users/mac.key -out /etc/ssl/ca/certs/users/mac.csr
Jetzt signieren wir die Zertifikatsanforderung (CSR) des Clients gegen unser Serverzertifikat und erstellen ein Client-Zertifikat:
sudo openssl x509 -req -days 1095 -in /etc/ssl/ca/certs/users/mac.csr -CA /etc/ssl/ca/certs/rootca.crt -CAkey /etc/ssl/ca/private/rootca.key -CAserial /etc/ssl/ca/serial -CAcreateserial -out /etc/ssl/ca/certs/users/mac.crt
Abschließend exportieren wir das Clientzertifikat und den Key übertragungstauglich in PKCS12-Format:
sudo openssl pkcs12 -export -clcerts -in /etc/ssl/ca/certs/users/mac.crt -inkey /etc/ssl/ca/certs/users/mac.key -out /etc/ssl/ca/certs/users/mac.p12
sudo cp /etc/ssl/ca/certs/users/mac.p12 /home/pi
cd /home/pi/
sudo chown pi mac.p12
https://medium.com/@pavelevstigneev/setting-nginx-with-letsencrypt-and-client-ssl-certificates-3ae608bb0e66 https://knowledge.digicert.com/solution/SO25984.html
Erstellung eines eigenen rootca-Zertifikates-Privatekeys mit 4096 bit Schlüssellänge und Encryption des erstellten privaten Keys mit einem Kennwort:
sudo openssl genrsa -des3 -out /etc/ssl/ca/private/rootca.key 4096
Erstellen eines Serverzertifikats mit 3 Jahren Gültigkeit:
sudo openssl req -new -x509 -days 1095 -key /etc/ssl/ca/private/rootca.key -out /etc/ssl/ca/certs/rootca.crt
Erstellen eines Keys für einen ersten Client. - Hier 4096 oder nur 1024
sudo openssl genrsa -out /etc/ssl/ca/client.key 4096
Für den soeben erstellten Client-Key erstellen wir nun eine Zertifikatsanforderung (CSR):
sudo openssl req -new -key /etc/ssl/ca/client.key -out /etc/ssl/ca/client.csr
Jetzt signieren wir die Zertifikatsanforderung (CSR) des Clients gegen unser Serverzertifikat und erstellen ein Client-Zertifikat:
sudo openssl x509 -req -days 1095 -in /etc/ssl/ca/client.csr -CA /etc/ssl/ca/certs/rootca.crt -CAkey /etc/ssl/ca/private/rootca.key -CAserial /etc/ssl/ca/serial -CAcreateserial -out /etc/ssl/ca/client.crt
#sudo openssl req -new -x509 -days 365 -key /etc/ssl/ca/client.key -out /etc/ssl/ca/client.crt
Abschließend exportieren wir das Clientzertifikat und den Key übertragungstauglich in PKCS12-Format:
sudo openssl pkcs12 -export -clcerts -in /etc/ssl/ca/client.crt -inkey /etc/ssl/ca/client.key -out /etc/ssl/ca/client.p12
Das Zertifkat konnte ich nur akzeptieren, wenn ich auf node.js weitergeleitet habe. Nicht bei homeAssistant
sudo openssl genrsa -des3 -out /etc/ssl/ca/private/rootca.key 4096 sudo openssl req -new -x509 -days 1095 -key /etc/ssl/ca/private/rootca.key -out /etc/ssl/ca/certs/rootca.crt
sudo openssl ca -name CA_default -gencrl -keyfile /etc/ssl/ca/private/rootca.key -cert /etc/ssl/ca/certs/rootca.crt -out /etc/ssl/ca/private/rootca.crl -crldays 1095
sudo openssl genrsa -out /etc/ssl/ca/client.key 4096
sudo openssl req -new -key /etc/ssl/ca/client.key -out /etc/ssl/ca/client.csr sudo openssl x509 -req -days 1095 -in /etc/ssl/ca/client.csr -CA /etc/ssl/ca/certs/rootca.crt -CAkey /etc/ssl/ca/private/rootca.key -CAserial /etc/ssl/ca/serial -CAcreateserial -out /etc/ssl/ca/client.crt
sudo openssl req -new -x509 -days 365 -key /etc/ssl/ca/client.key -out /etc/ssl/ca/client.crt sudo openssl pkcs12 -export -clcerts -in /etc/ssl/ca/client.crt -inkey /etc/ssl/ca/client.key -out /etc/ssl/ca/client.p12
ipsec pki --gen --type rsa --size 4096 --outform der > private/strongswanKey.der ipsec pki --self --in strongswanKey.der --dn "C=CH, O=strongSwan, CN=hajo" --ca > certs/strongswanCert.der
#!/bin/bash NAME="Hajo Pross" USERNAME="hajo" USERID="hajo" COUNTRY_CODE=DE ORGANISATION="Hajo SmartHome"
ipsec pki --gen --type rsa --size 4096 --outform der > private/$USERNAME.der
ipsec pki --pub --in private/$USERNAME.der --type rsa | ipsec pki --issue --lifetime 730 --cacert certs/strongswanCert.der --cakey private/strongswanKey.der --dn "C=$COUNTRY_CODE, O=$ORGANISATION, CN=$USERID" --san "$USERID" --outform der > certs/$USERNAME.der
openssl rsa -inform DER -in private/$USERNAME.der -out private/$USERNAME.pem -outform PEM
openssl x509 -inform DER -in certs/$USERNAME.der -out certs/$USERNAME.pem -outform PEM
openssl pkcs12 -export -inkey private/$USERNAME.pem -in certs/$USERNAME.pem -name "$NAME's VPN Certificate" -certfile cacerts/strongswan.pem -caname "$ORGANISATION Root CA" -out p12/$USERNAME.p12
ipsec pki --gen --type rsa --size 2048 --outform der > $USERNAME.der ipsec pki --pub --in $USERNAME.der --type rsa | ipsec pki --issue --lifetime 730 --certs strongswanCert.der --cakey strongswanKey.der --dn "C=$COUNTRY_CODE, O=$ORGANISATION, CN=$USERID" --san "$USERID" --outform der > $USERNAME_Cert.der openssl rsa -inform DER -in $USERNAME.der -out $USERNAME.pem -outform PEM openssl x509 -inform DER -in $USERNAME.der -out $USERNAME.pem -outform PEM openssl pkcs12 -export -inkey $USERNAME.pem -in $USERNAME.pem -name "$NAME's VPN Certificate" -certfile strongswan.pem -caname "$ORGANISATION Root CA" -out $USERNAME.p12
ipsec 1260 ipsec pki --gen --type rsa --size 4096 --outform der > strongswanKey.der 1263 ipsec pki --gen --type rsa --size 4096 --outform der > strongswanKey.der 1265 ipsec pki --self --ca --lifetime 3650 --in strongswanKey.der --type rsa --cn “Hajo"” --outform der > strongswanCert.der 1266 ipsec pki --self --ca --lifetime 3650 --in strongswanKey.der --type rsa --dn “CN=Hajo” --outform der > strongswanCert.der 1268 ipsec pki --self --in strongswanKey.der --dn “C=CH, O=strongSwan, CN=hajo” --ca > strongswanCert.der 1269 ipsec pki --self --in strongswanKey.der --dn "C=CH, O=strongSwan, CN=hajo" --ca > strongswanCert.der 1275 ipsec pki --gen --type rsa --size 2048 --outform der > $USERNAME.der 1277 ipsec pki --gen --type rsa --size 2048 --outform der > hajoNAME="Hajo Pross".der 1288 ipsec pki --gen --type rsa --size 2048 --outform der > $USERNAME.der 1293 ipsec pki --gen --type rsa --size 2048 --outform der > $USERNAME.der 1296 ipsec pki --pub --in $USERNAME.der --type rsa | ipsec pki --issue --lifetime 730 --cacert strongswanCert.der --cakey strongswanKey.der --dn "C=$COUNTRY_CODE, O=$ORGANISATION, CN=$USERID" --san "$USERID" --outform der > $USERNAME.der 1299 ipsec pki --gen --type rsa --size 2048 --outform der > $USERNAME.der 1300 ipsec pki --pub --in $USERNAME.der --type rsa | ipsec pki --issue --lifetime 730 --cacert strongswanCert.der --cakey strongswanKey.der --dn "C=$COUNTRY_CODE, O=$ORGANISATION, CN=$USERID" --san "$USERID" --outform der > $(USERNAME)Cert.der 1302 ipsec pki --pub --in $USERNAME.der --type rsa | ipsec pki --issue --lifetime 730 --cacert strongswanCert.der --cakey strongswanKey.der --dn "C=$COUNTRY_CODE, O=$ORGANISATION, CN=$USERID" --san "$USERID" --outform der > $USERNAMECert.der 1316 ipsec pki --gen --type rsa --size 2048 --outform der > private/$USERNAME.der 1319 ipsec pki --pub --in private/$USERNAME.der --type rsa | ipsec pki --issue --lifetime 730 --cacert cacerts/strongswan.der --cakey private/strongswan.der --dn "C=$COUNTRY_CODE, O=$ORGANISATION, CN=$USERID" --san "$USERID" --outform der > certs/$USERNAME.der
ipsec pki --gen --type rsa --size 4096 --outform der > strongswanKey.der ipsec pki --self --in strongswanKey.der --dn "C=CH, O=strongSwan, CN=hajo" --ca > strongswanCert.der ipsec pki --gen --type rsa --size 2048 --outform der > $USERNAME.der ipsec pki --pub --in private/$USERNAME.der --type rsa | ipsec pki --issue --lifetime 730 --cacert strongswanCert.der --cakey strongswanKey.der --dn "C=$COUNTRY_CODE, O=$ORGANISATION, CN=$USERID" --san "$USERID" --outform der > certs/$USERNAME.der openssl rsa -inform DER -in private/$USERNAME.der -out private/$USERNAME.pem -outform PEM openssl x509 -inform DER -in certs/$USERNAME.der -out certs/$USERNAME.pem -outform PEM openssl pkcs12 -export -inkey private/$USERNAME.pem -in certs/$USERNAME.pem -name "$NAME's VPN Certificate" -certfile strongswanCert.der -caname "$ORGANISATION Root CA" -out p12/$USERNAME.p12
ipsec pki --gen --type rsa --size 4096 --outform der > strongswanKey.der ipsec pki --self --in strongswanKey.der --dn "C=CH, O=strongSwan, CN=hajo" --ca > strongswanCert.der
ipsec pki --gen --type rsa --size 2048 --outform der > $USERNAME.der ipsec pki --pub --in $USERNAME.der --type rsa | ipsec pki --issue --lifetime 730 --cacert strongswanCert.der --cakey strongswanKey.der --dn "C=$COUNTRY_CODE, O=$ORGANISATION, CN=$USERID" --san "$USERID" --outform der > certs/$USERNAME.der openssl rsa -inform DER -in private/$USERNAME.der -out private/$USERNAME.pem -outform PEM openssl x509 -inform DER -in certs/$USERNAME.der -out certs/$USERNAME.pem -outform PEM openssl pkcs12 -export -inkey private/$USERNAME.pem -in certs/$USERNAME.pem -name "$NAME's VPN Certificate" -certfile cacerts/strongswan.pem -caname "$ORGANISATION Root CA" -out p12/$USERNAME.p12
1335 openssl x509 -in strongswan.der -out strongswan.pem -outform PEM 1336 openssl x509 -in strongswan.der -inform DER -out strongswan.pem -outform PEM 1339 openssl pkcs12 -export -inkey private/$USERNAME.pem -in certs/$USERNAME.pem -name "$NAME's VPN Certificate" -certfile cacerts/strongswan.pem -caname "$ORGANISATION Root CA" -out p12/$USERNAME.p12
03.12.
1258 strongswan pki --gen --type rsa --size 4096 --outform der > strongswanKey.der 1259 ipsec 1260 ipsec pki --gen --type rsa --size 4096 --outform der > strongswanKey.der 1261 pki 1262 sudo apt-get install strongswan-pki 1263 ipsec pki --gen --type rsa --size 4096 --outform der > strongswanKey.der 1264 ll 1265 ipsec pki --self --ca --lifetime 3650 --in strongswanKey.der --type rsa --cn “Hajo"” --outform der > strongswanCert.der 1266 ipsec pki --self --ca --lifetime 3650 --in strongswanKey.der --type rsa --dn “CN=Hajo” --outform der > strongswanCert.der 1267 ll 1268 ipsec pki --self --in strongswanKey.der --dn “C=CH, O=strongSwan, CN=hajo” --ca > strongswanCert.der 1269 ipsec pki --self --in strongswanKey.der --dn "C=CH, O=strongSwan, CN=hajo" --ca > strongswanCert.der 1270 ll 1271 mv strongswanKey.der strongswan.der 1272 mv strongswan.der strongswanKey.der 1273 ll 1274 clear 1275 ipsec pki --gen --type rsa --size 2048 --outform der > $USERNAME.der 1276 ll 1277 ipsec pki --gen --type rsa --size 2048 --outform der > hajoNAME="Hajo Pross".der 1278 USERNAME="hajo" 1279 USERID="hajo" 1280 COUNTRY_CODE=DE 1281 NAME="Hajo Pross" 1282 USERNAME="hajo" 1283 USERID="hajo" 1284 COUNTRY_CODE=DE 1285 ORGANISATION="hajo CA" 1286 echo $USERNAME 1287 clear 1288 ipsec pki --gen --type rsa --size 2048 --outform der > $USERNAME.der 1289 ll 1290 rm hajoNAME=Hajo Pross.der 1291 rm "hajoNAME=Hajo Pross.der" 1292 ll 1293 ipsec pki --gen --type rsa --size 2048 --outform der > $USERNAME.der 1294 ll 1295 cat hajo.der 1296 ipsec pki --pub --in $USERNAME.der --type rsa | ipsec pki --issue --lifetime 730 --cacert strongswanCert.der --cakey strongswanKey.der --dn "C=$COUNTRY_CODE, O=$ORGANISATION, CN=$USERID" --san "$USERID" --outform der > $USERNAME.der 1297 ll 1298 cat hajo.der 1299 ipsec pki --gen --type rsa --size 2048 --outform der > $USERNAME.der 1300 ipsec pki --pub --in $USERNAME.der --type rsa | ipsec pki --issue --lifetime 730 --cacert strongswanCert.der --cakey strongswanKey.der --dn "C=$COUNTRY_CODE, O=$ORGANISATION, CN=$USERID" --san "$USERID" --outform der > $(USERNAME)Cert.der 1301 ll 1302 ipsec pki --pub --in $USERNAME.der --type rsa | ipsec pki --issue --lifetime 730 --cacert strongswanCert.der --cakey strongswanKey.der --dn "C=$COUNTRY_CODE, O=$ORGANISATION, CN=$USERID" --san "$USERID" --outform der > $USERNAMECert.der 1303 ll 1304 mv Cert.der hajoCert.der 1305 ll 1306 rm hajo* 1307 mkdir private 1308 mkdir cacerts 1309 mkdir p12 1310 mkdir certs 1311 ll 1312 mv strongswanCert.der cacerts/strongswan.der 1313 mv strongswanKey.der private/strongswan.der 1314 ll 1315 ll -R 1316 ipsec pki --gen --type rsa --size 2048 --outform der > private/$USERNAME.der 1317 clear 1318 ll -R 1319 ipsec pki --pub --in private/$USERNAME.der --type rsa | ipsec pki --issue --lifetime 730 --cacert cacerts/strongswan.der --cakey private/strongswan.der --dn "C=$COUNTRY_CODE, O=$ORGANISATION, CN=$USERID" --san "$USERID" --outform der > certs/$USERNAME.der 1320 clear; ll -R 1321 openssl rsa -inform DER -in private/$USERNAME.der -out private/$USERNAME.pem -outform PEM 1322 clear; ll -R 1323 openssl x509 -inform DER -in certs/$USERNAME.der -out certs/$USERNAME.pem -outform PEM 1324 clear; ll -R 1325 openssl pkcs12 -export -inkey private/$USERNAME.pem -in certs/$USERNAME.pem -name "$NAME's VPN Certificate" -certfile cacerts/strongswan.pem -caname "$ORGANISATION Root CA" -out p12/$USERNAME.p12 1326 pwd 1327 ll 1328 cd certs/ 1329 ll 1330 cd .. 1331 cd cacerts/ 1332 ll 1333 history 1334 history | grep pem 1335 openssl x509 -in strongswan.der -out strongswan.pem -outform PEM 1336 openssl x509 -in strongswan.der -inform DER -out strongswan.pem -outform PEM 1337 ll 1338 cd .. 1339 openssl pkcs12 -export -inkey private/$USERNAME.pem -in certs/$USERNAME.pem -name "$NAME's VPN Certificate" -certfile cacerts/strongswan.pem -caname "$ORGANISATION Root CA" -out p12/$USERNAME.p12