Änderungen

Zeile 3: Zeile 3:  
cert_client: Rechner, auf den die Zertifikate übertragen werden.
 
cert_client: Rechner, auf den die Zertifikate übertragen werden.
   −
==Cert_master==
+
==cert_master==
    
===Software besorgen/installieren:===
 
===Software besorgen/installieren:===
Zeile 18: Zeile 18:  
cp dehydrated/dehydrated /usr/local/sbin/dehydrated
 
cp dehydrated/dehydrated /usr/local/sbin/dehydrated
 
mkdir -p /etc/dehydrated
 
mkdir -p /etc/dehydrated
 +
</source>
 +
 +
===Apache konfigurieren===
 +
 +
'''/etc/apache2/sites-available/letsencrypt.conf''':Apache muss so konfiguriert werden, dass $domain/.well-known/acme-challenge/ auf das richtige Verzeichnis zeigt. Somit kann die Acme challenge erfolgreich durchgeführt werden.
 +
<source lang=bash>
 +
Alias /.well-known/acme-challenge/ /var/www/dehydrated/                   
 +
<Directory "/var/www/dehydrated/">     
 +
    Options None
 +
    AllowOverride None
 +
    Require all granted
 +
    ForceType text/plain
 +
    Options -Indexes
 +
</Directory>
 +
</source>
 +
Dann noch die config aktivieren und apache neu laden:
 +
<source lang=bash>
 +
a2enconf letsencrypt
 +
apachectl restart
 
</source>
 
</source>
   Zeile 218: Zeile 237:  
     cp $CHAINFILE /home/cert/$DOMAIN/
 
     cp $CHAINFILE /home/cert/$DOMAIN/
 
      
 
      
     chmod 500 $(find /home/cert -mindepth 1 -type d )
+
     chmod 750 $(find /home/cert -mindepth 1 -type d )
     chmod 400 $(find /home/cert -mindepth 1 -type f )
+
     chmod 740 $(find /home/cert -mindepth 1 -type f )
     chown cert.cert -R /home/cert/*
+
     chown root.cert -R /home/cert/*
 
      
 
      
 
     # cleanup unused cert files
 
     # cleanup unused cert files
Zeile 270: Zeile 289:  
#Ingwer
 
#Ingwer
 
ingwer.freifunk-mwu.de firmware.freifunk-mwu.de ingwer.freifunk-mainz.de firmware.freifunk-mainz.de firmware.wiesbaden.freifunk.net ingwer.ffmwu.org firmware.ffmwu.org ingwer.ffmz.org firmware.ffmz.org ingwer.ffwi.org firmware.ffwi.org
 
ingwer.freifunk-mwu.de firmware.freifunk-mwu.de ingwer.freifunk-mainz.de firmware.freifunk-mainz.de firmware.wiesbaden.freifunk.net ingwer.ffmwu.org firmware.ffmwu.org ingwer.ffmz.org firmware.ffmz.org ingwer.ffwi.org firmware.ffwi.org
 +
</source>
 +
 +
===Transferbenutzer anlegen===
 +
 +
Dieser Benutzer wird verwendet als Transferbenutzer zwischen cert_master und cert_client
 +
 +
<source lang=bash inline> adduser --home /home/cert --disabled-login -gecos "" cert</source>
 +
 +
===SSH konfigurieren===
 +
 +
'''/etc/ssh/sshd_config''': Hier wird /etc/ssh/authorized_keys_local als zusätzliche Quelle für erlaubte public keys hinzugefügt.
 +
<source lang=bash>
 +
AuthorizedKeysFile      %h/.ssh/authorized_keys /etc/ssh/authorized_keys_local
 +
</source>
 +
 +
'''/etc/ssh/sshd_config''': Hier wird ein chroot jail für den Zertifikatsuser eingerichtet, so dass ein geleakter private key kein manipulieren des cert_master zulässt. Die Permissions von /home/cert (wie gesetzt in hooks.sh) verhindern ein überschreiben der Zertifikate, internal-sftp erlaubt nur sftp über die Verbindung.
 +
<source lang=bash>
 +
Match User cert
 +
    ChrootDirectory /home/cert/
 +
    ForceCommand internal-sftp
 +
    AllowTcpForwarding no
 +
    PermitTunnel no
 +
    X11Forwarding no
 +
</source>
 +
 +
'''/etc/ssh/authorized_keys_local''': Hier kommen alle public keys von hosts rein, die Zertifikate abrufen wollen.
 +
 +
===Cron===
 +
 +
Das script in cron.daily läuft einmal täglich (wann wird bestimmt von Debian). Dann werden neue Zertifikate abgerufen und alte erneuert.
 +
 +
'''/etc/cron.daily/ssl_certs''': dehydrated wird aufgerufen und stdout wird verworfen. Stderr wird über cron per mail weiter gegeben.
 +
<source lang=bash>
 +
#!/bin/bash
 +
 +
dehydrated -c -g -f /etc/dehydrated/config > /dev/null
 +
</source>
 +
 +
==cert_client==
 +
 +
===apache reverse proxy konfigurieren===
 +
 +
'''/etc/apache2/conf-available/letsencrypt.conf''':Da die challenges von letsencrypt bei dem cert_client enden (http://$domain/.well-known/acme-challenge/), aber auf dem cert_master terminiert werden sollen, richten wir einen reverse proxy ein.
 +
<source lang=bash>
 +
SSLProxyEngine On
 +
ProxyPassMatch ^/(.well-known/acme-challenge/.*) https://freifunk-mwu.de:443/$1
 +
ProxyPassReverse / https://freifunk-mwu.de:443/
 +
</source>
 +
Jetzt noch config aktivieren und apache neustarten:
 +
<source lang=bash>
 +
a2enconf letsencrypt
 +
apachectl restart
 +
</source>
 +
Es ist noch notwendig ein paar weitere Apache module zu aktivieren <source lang=bash inline>a2enmod $mod</source>, welche ist der Fehlermeldung beim neu starten zu entnehmen.
 +
 +
===SSH konfigurieren===
 +
 +
'''/root/.ssh/config''':Cron läuft als root, deswegen brauchen wir die config hier. $Hostname gegen den cert_client ersetzen, $cert_master gegen hostname cert_master.
 +
<source lang=bash>
 +
Host $cert_master
 +
        User cert
 +
        Hostname $cert_master.freifunk-mwu.de
 +
        Port 23
 +
        IdentityFile /home/admin/.ssh/$HOSTNAME_rsa
 +
</source>
 +
 +
'''/home/admin/.ssh/$HOSTNAME_rsa.pub:''' Den public key auf dem cert_master in die zusätzliche authorized_keys Datei eintragen.
 +
 +
<source lang=bash inline>sftp $cert_master</source> muss ohne Eingabe funktionieren.
 +
 +
===Cron===
 +
'''/etc/cron.daily/ssl_certs''': Hier wird das Zertifikat des Hosts $cert_client abgerufen. Dann werden Permissions angepasst und Dienste neu gestartet. Andere Dienste erfordern hier Anpassung (z.B. mail).
 +
<source lang=bash>
 +
#!/bin/sh
 +
 +
DOMAINS="$cert_client.freifunk-mwu.de"
 +
 +
rm /etc/apache2/ssl/* -r
 +
for DOMAIN in $DOMAINS;
 +
do
 +
mkdir -p /etc/apache2/ssl/$DOMAIN
 +
sftp -q -r zuckerwatte:/$DOMAIN /etc/apache2/ssl/ > /dev/null
 +
 +
chmod 0550 /etc/apache2/ssl/$DOMAIN
 +
chmod 0440 /etc/apache2/ssl/$DOMAIN/*
 +
done
 +
 +
chown -R www-data.admin /etc/apache2/ssl/
 +
apache2ctl restart
 
</source>
 
</source>