Op 4 december is de nieuwe versie van mijn TransIP DNS-01 validator script gereleased. Deze kan gebruikt worden om Letsencrypt wildcard certificaten aan te vragen. De nieuwe versie is volledig herschreven en maakt nu gebruik van de PHP package manager composer. De grootste voordelen zijn betere logging en er wordt nu altijd de juiste versie van de TransIP api geïnstalleerd.
LXC – error running non-shared postrotate script for /var/log/syslog of ‘/var/log/syslog’
I’ve got a Proxmox VE host running with a couple of LXC containers which used to run on Ubuntu 16.04. After I upgraded them to 18.04 I received a daily e-mail from every LXC container with the following error:
/etc/cron.daily/logrotate: Failed to kill unit rsyslog.service: Input/output error error: error running non-shared postrotate script for /var/log/syslog of '/var/log/syslog' run-parts: /etc/cron.daily/logrotate exited with return code 1
I tried to fix it a couple times but never managed to find the real issue. Today I found the solution thanks to a German thread on the Proxmox forums.
The real error message which causes logrotate to fail can be found by executing:
logrotate -v /etc/logrotate.d/rsyslog
error: skipping "/var/log/syslog" because parent directory has insecure permissions (It's world writable or writable by group which is not "root") Set "su" directive in config file to tell logrotate which user/group should be used for rotation.
According to our German friends there is a new version of rsyslog which fixes the issue. It can be installed with the following commands:
apt install software-properties-common add-apt-repository ppa:adiscon/v8-stable apt install -y rsyslog
For safety I reboot the LXC container to make sure the new version of the service is running.
There is a final note about a message appearing in /var/log/syslog
every few seconds but I haven’t seen that happen.
Letsencrypt wildcard certificaten bij TransIP
Sinds gister heb ik een gratis wildcard SSL certificaat van Letsencrypt. Deze zijn sinds 13 maart te verkrijgen. Omdat je deze certificaten alleen kan krijgen via een DNS validatie en deze elke 3 maanden opnieuw moet uitvoeren heb ik dit geautomatiseerd. TransIP heeft een API waarmee je o.a. de DNS records kan aanpassen. Dit script en hoe je dit kan installeren is te vinden op Github.
https://github.com/roy-bongers/certbot-transip-dns-01-validator
tmux cheatsheet
tmux is an awesome tool to manage terminal windows and to keep your terminal session running while you log on / off the computer. It works like GNU screen but better. Inside an tmux session you can have multiple windows or split your window into mulitple panes and switch betwee all of them.
Manage sessions from terminal
tmux new -s session-name start named session tmux a (-t session-name) attach a (named) session tmux ls list all sessions While running tmux: (ctrl+b)
While running tmux (ctrl+b)
Control windows
c create window w list windows n next window p previous window f find window , name window & kill window
Control panes
% vertical split " horizontal split o swap panes q show pane numbers x kill pane + break pane into window (e.g. to select text by mouse to copy) - restore pane from window t big clock
Control Sessions
s list sessions $ name session :new<CR> new session d detach session
Self signed SSL certificaten
Ik draai al jaren een website met een self signed SSL certificaat. Op zich werkt dit perfect behalve dat Chrome op mijn Android telefoon van tijd tot tijd me weer een waarschuwing geeft. Open je de site vanaf je Homescreen als standalone web app dan blijf je ook altijd een balk zien met een rood kruis (ongeldig certificaat). Ik heb al eens eerder geprobeerd om het SSL certificaat toe te voegen aan Android zodat deze vertrouwd zou zijn echter lukte dit steeds niet.
Vandaag kwam ik er achter dat je aan Android alleen root CA certificaten kan toevoegen. Tegelijkertijd kwam ik er meer achter hoe SSL certificaten werken en wat nu een root Certificate Authority (CA) is. Voor de uitleg over root CA verwijs ik naar dit filmpje.
Zodra je dus een root certificaat toevoegd aan je browser worden automatische alle certificaten die ondertekend zijn met dit root certificaat zonder problemen geaccepteerd. Ideaal dus voor een testomgeving of wanneer je zelf meerdere domeinen host met een self signed certificaat.
Een root certificaat aanmaken
Als eerste genereren we een private key
$ openssl genrsa 8192 > rootca.key
Genereer daarna het certificaat. Pas het aantal dagen dat deze geldig is naar wens aan. Ik heb deze op 10 jaar staan.
$ openssl req -x509 -new -nodes -key rootca.key -days 3652 > rootca.pem
Tijdens het aanmaken van het certificaat worden je enkele gegevens gevraagd en daarna is het certificaat gegenereerd. Dit certificaat kun je nu zonder problemen toevoegen aan bijvoorbeeld Chrome en Firefox. Voor Android moeten we nog een extra stap doen.
Format aanpassen voor Android
Voer de onderstaande code uit om het format van het certificaat aan te passen naar DER.
$ openssl x509 -in rootca.pem -outform der -out rootca.der.crt
Dit aangepaste certificaat kun je het makkelijkst naar Android krijgen door deze op via een url beschikbaar te maken. Wanneer je dan naar de betreffende URL gaat op je telefoon zal automatisch gevraagd worden om het certificaat te installeren. Geef een naam op en druk op opslaan. Je kan dit certificaat terug vinden onder Settings -> Security -> Trusted Credentials -> User.
Een certificaat maken
Opnieuw moeten we een private key genereren
openssl genrsa 4096 > mijndomein.nl.key
Hierna maken we een Certificate Signing Request (CSR)
openssl req -new -key mijndomein.nl.key > mijndomein.nl.csr
Vervolgens worden je wederom allerlei gegevens gevraagd. Het challenge password en de optional company name kun je gewoon leeg laten.
Wanneer je een certificaat wil maken voor een los domein kun je nu je certificaat genereren met het volgende commando. Wil je extra’s zoals een multi domain certificaat scroll sla deze stap dan over en ga naar extensions.
openssl x509 -req -days 3652 -CA rootca.pem -CAkey rootca.key -CAcreateserial -in mijndomein.nl.csr > mijndomein.nl.pem
Als laatste kun je nog een info bestand maken waarmee je de gegevens van het certificaat kan zien. Deze stap is echter optioneel.
openssl x509 -in mijndomein.nl.pem -text > mijndomein.nl.info
Extensions
Aangezien ik een multi domain certificaat wil hebben moeten we nog het e.a. toevoegen. Maak een bestand aan genaamd v3.ext en voeg daar de volgende opties aan toe. Pas de DNS regels aan naar je eigen wensen.
[mijndomein_ext] basicConstraints = critical,CA:false keyUsage = critical,keyEncipherment,dataEncipherment subjectKeyIdentifier = hash authorityKeyIdentifier = keyid,issuer subjectAltName = @mijndomein_ext_subject [mijndomein_ext_subject] DNS.1 = mijndomein.nl DNS.2 = *.mijndomein.nl
Nu kunnen we ons certificaat aan gaan maken.
openssl x509 -req -days 3652 -CA rootca.pem -CAkey rootca.key -CAcreateserial -in mijndomein.nl.csr -extfile v3.ext -extensions mijndomein_ext > mijndomein.nl.pem
Het certificaat is nu aangemaakt, deze kun je nu gebruiken is allerlei applicaties.
Beveiliging
Private keys mogen eigenlijk alleen door root gelezen worden. Dit omdat anders iedereen met toegang tot de keys deze kan lezen en dus ook nieuwe certificaten aanmaken. Voor daarom altijd een chown en een chmod uit.
chown root:root *.key chmod 600 *.key
Certificaat gebruiken in Apache2
Om SSL te activeren binnen apache moet je het volgende toevoegen aan je virtualhost:
SSLEngine On SSLCertificateFile /etc/apache2/ssl/mijndomein.nl.pem SSLCertificateKeyFile /etc/apache2/ssl/mijndomein.nl.key
Gebruikte bronnen: