Skip to main content

Certifikat via Lets Encrypt och Certbot

  1. Först behövs snapd. Kommer per default med Ubuntu. Kontrollera installerade snap paket med snap list
  2. Ta bort eventuella installation av certbot-auto och Certbot OS med sudo apt-get remove certbot
  3. Installera certbot med sudo snap install --classic certbot
  4. Förbered maskinen så att certbot-kommandot kan köras: sudo ln -s /snap/bin/certbot /usr/bin/certbot
  5. Få ett certifikat och uppdatera apache-konf med sudo certbot --apache, alternativt få enbart ett certifikat och uppdatera apache manuellt med sudo certbot certonly --apache
  6. När du har fått ett certifikat, gör en backup av apache-konfen och skapa en ny apache-konffil: sudo mv /etc/apache2/sites-available/bookstack.conf /etc/apache2/sites-available/bookstack.conf.oldsudo vim /etc/apache2/sites-available/bookstack.conf
  7. Ändra relevanta värden och skapa en ny apache-konfiguration (vhost):
    <VirtualHost *:80>
        ServerName YOUR-DOMAIN-HERE
        RewriteEngine On
        RewriteRule ^(.*)$ https://%{HTTP_HOST}$1 [R=301,L]
    </VirtualHost>
    
    <VirtualHost *:443>
    	ServerName YOUR-DOMAIN-HERE
    	ServerAdmin webmaster@localhost
    	DocumentRoot /var/www/bookstack/public/
    
        SSLEngine on
        SSLCertificateFile      /etc/letsencrypt/live/YOUR-DOMAIN-HERE/fullchain.pem
        SSLCertificateKeyFile   /etc/letsencrypt/live/YOUR-DOMAIN-HERE/privkey.pem
    
        <Directory /var/www/bookstack/public/>
            Options Indexes FollowSymLinks
            AllowOverride None
            Require all granted
            <IfModule mod_rewrite.c>
                <IfModule mod_negotiation.c>
                    Options -MultiViews -Indexes
                </IfModule>
                RewriteEngine On
                # Handle Authorization Header
                RewriteCond %{HTTP:Authorization} .
                RewriteRule .* - [E=HTTP_AUTHORIZATION:%{HTTP:Authorization}]
                # Redirect Trailing Slashes If Not A Folder...
                RewriteCond %{REQUEST_FILENAME} !-d
                RewriteCond %{REQUEST_URI} (.+)/$
                RewriteRule ^ %1 [L,R=301]
                # Handle Front Controller...
                RewriteCond %{REQUEST_FILENAME} !-d
                RewriteCond %{REQUEST_FILENAME} !-f
                RewriteRule ^ index.php [L]
            </IfModule>
        </Directory>
    
    	ErrorLog ${APACHE_LOG_DIR}/error.log
    	CustomLog ${APACHE_LOG_DIR}/access.log combined
    </VirtualHost>

  8. Aktivera apaches SSL modul: sudo a2enmod ssl
  9. Verifiera om det finns några fel med sudo apachectl configtest och åtgärda vid behov
  10. Redigera bookstacks .env-fil: sudo vim /var/www/bookstack/.env, ändra APP_URL till HTTPS istället för HTTP
  11. Slutligen, starta om apache2! sudo systemctl restart apache2

Skapa certifikat manuellt

Först behövs ett värde för en dns-01 challenge:

sudo certbot certonly --manual --manual-auth-hook /etc/letsencrypt/acme-dns-auth.py --preferred-challenges dns --debug-challenges -d \*.your-domain -d your-domain

Byt ut värden ovanför till det som önskas. Exemplet ber om ett wildcard. Man kommer behöva lägga till ett värde i sin externa DNS-zon för validering. Certifikaten hamnar sedan i en  undermapp till /etc/letsencrypt/live/.

Certifikat som har hämtats med certbot kan kontrolleras med sudo certbot certificates. Certifikat kan tas bort med sudo certbot delete.

Vid förnyelse hade jag problem med att få ut en ny TXT-sträng för DNS validering. Borttagande av certifikat och skapande med nedan syntax för att få TXT värdet fungerade:

sudo certbot certonly --manual --preferred-challenges=dns --email admin@jehrlander.net --server https://acme-v02.api.letsencrypt.org/directory --agree-tos -d jehrlander.net -d *.jehrlander.net

Saving debug log to /var/log/letsencrypt/letsencrypt.log
Requesting a certificate for jehrlander.net and *.jehrlander.net

- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
Please deploy a DNS TXT record under the name:

_acme-challenge.jehrlander.net.

with the following value:

xxxxxx

- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -