Henry Isakoff 🥕 Linux Palvelimet

| Linux Palvelimet | 4 min

TLS Salaukset ja let’s encrypt

On tullut aika asentaa palvelimelle sertifikaatti, varmistaa sen toimivuus ja päivitetään sertifikaatin uusiminen ajastumaan haluttuun aikatauluun.

Lyhyesti let’s encrypt

-Let's Encrypt on ilmainen ja avoimen lähdekoodin sertifikaattien myöntämispalvelu.
-Se perustuu ACME-protokollaan (Automated Certificate Management Environment).
-Käyttäjät voivat hankkia SSL/TLS-sertifikaatteja verkkosivustoilleen automaattisesti ja ilmaiseksi.
-Sertifikaatin voi hakea esimerkiksi Legon/Certbotin avulla.

Alkuhuomiot.

Tavoitteena siis ensin rakentaa LEGOn kautta SSL yhteys beta sivustoon beta.iskff.fi ja tämän jälkeen vertailuna certbotin kautta pääsivulle h.iskff.fi. Molempien molemmat aliakset b.iskff.fi ja hh.isakoff.fi kuuluu myös toimia näiden domainien ja sertifikaattien kanssa.

Aloitetaan siis tarkastamalla, ettei kummassakaan ole SSL yhteys aktiivisena.

curl http://beta.iskff.fi
curl https://beta.iskff.fi
curl http://h.iskff.fi
curl https://h.iskff.fi

HTTP vastaukset

Kuten kuvasta näemme. Pelkkä http yhteys johtaa perille.

Lego ja let’s encrypt

Pysäytetään apache2 järjestelmä, jotta Legon haastopalvelin ei häiritse porttia 80.

sudo systemctl stop apache2

Aloitetaan asentamalla lego.

sudo apt-get update
sudo apt-get install lego

Luodaan kansio käyttäjän juureen .lego.

mkdir -p ~/.lego

Tämän jälkeen meidän pitää lähettää HTTP-01 haaste legon palvelimille josta saamme sertifikaatit. Tähän kannattaa erittäin tarkasti lukea ohjeet LEGOn omista ohjeista. Harjoitusta varten kannattaa ensin kokeilla testi-serveriä haulle. Tämä onnistuu lisäämällä --server https://acme-staging-v02.api.letsencrypt.org/directory hakukomentoon. Ohjeet [let’s encryptin omilta sivuilta].(https://letsencrypt.org/fi/docs/staging-environment/)

Eli

lego --server https://acme-staging-v02.api.letsencrypt.org/directory --email="henry@isakoff.fi" --domains="beta.iskff.fi" --domains="b.iskff.fi" --http --path="~/.lego" run

’email’ ohjaa sertifikaatin omistajan sähköpostiin, ’domains’ ohjaa tarkastuksen kyseisten domain-nimien omistajista, ’http’ millä protokollalla tarkastetaan ’path’ ohjaa kansioon jonne sertit haetaan

Onnistuneen testin jälkeen

Onnistui! Ihan ensimmäisellä yrittämällä!

Tämän jälkeen sama ilman --server osiota. Tässä haetaan sitten oikean elämän oikeat sertifikaatit.

sudo lego --email="henry@isakoff.fi" --domains="beta.iskff.fi" --domains="b.iskff.fi" --http --path="/home/henry/.lego" run

Sertit haettu!

Tarkastetaan vielä .lego kansio, että sertit todellakin haettu kansioon.

Sertit haettu!

Tämän jälkeen on aika luoda SSL konfigurointi-tiedosto apache2 käyttöön.

sudo nano /etc/apache2/sites-available/beta.iskff.fi-ssl.conf
<VirtualHost *:443>
    ServerAdmin henry@isakoff.fi
    ServerName beta.iskff.fi
    ServerAlias b.iskff.fi
    DocumentRoot /home/henry/public_html/beta.iskff.fi
    ErrorLog ${APACHE_LOG_DIR}/beta.iskff.fi_ssl_error.log
    CustomLog ${APACHE_LOG_DIR}/beta.iskff.fi_ssl_access.log combined

    SSLEngine on
    SSLCertificateFile /home/henry/.lego/certificates/beta.iskff.fi.crt
    SSLCertificateKeyFile /home/henry/.lego/certificates/beta.iskff.fi.key

    <Directory /home/henry/public_html/beta.iskff.fi>
        Options Indexes FollowSymLinks
        Require all granted
    </Directory>
</VirtualHost>

Ja otetaan käyttöön apachen omilla työkaluilla.

sudo a2enmod ssl
sudo a2ensite beta.iskff.fi-ssl.conf
sudo systemctl start apache2

Sekä avataan portti 443 palomuurista.

sudo ufw allow 443/tcp

Tarkastetaan.

curl https://beta.iskff.fi
curl https://b.iskff.fi

Käydään myös sivulla.

Sertit haettu!

Certbot ja helpompi kokonaisuus.

Aloitetaan asentamalla certbot ja python3-certbotin apache kirjasto.

sudo apt update
sudo apt install certbot python3-certbot-apache

Tämän jälkeen täytetään hakupyyntö suoraan certbotin kautta. Nyt ei tehdä HTTP pyyntöä, eli ongelmatilanteessa haku vain epäonnistuu ja voi tehdä uudestaan.

sudo certbot --apache -d hh.isakoff.fi -d h.iskff.fi --email henry@isakoff.fi --agree-tos

Tästä certbot kysyy saako heidän järjestelmään tallentaa kyseinen sähköposti markkinointia varten. Vastaan No

Tämän jälkeen certbot luo omat valmiit sertifikaatit suoraan apache2 ja luo systemctl ajastimen sertifikaattien uusimiselle.

Myös apachen palvelin suoraan hypätty uudestaan päälle ja homma toiminnassa suoraan.

Sertit haettu! Sertit haettu!

Huomiot.

Certbot on huomattavasti helpompi kokonaisuus. Toki automaatiossa aina riskinsä siinä, että jotain menee pieleen. Näin pienessä kokonaisuudessa kuitenkin kaikki toimi todella hyvin.

Lego on hyvä oppimistarkoitukseen. Täytyy manuaalisesti enemmän tehdä ja osoittaa tiedostoja oikeaan paikkaan.

Ajastettu päivitys.

Certbot loi oman ajastimen päivittämään systemctl-timerin kautta. Lego ei tehnyt vastaavaa niin luodaan cron työ tekemään vastaava.

(crontab -l ; echo "0 0 1 * * /usr/local/bin/lego --email=\"henry@isakoff.fi\" --domains=\"beta.iskff.fi\" --domains=\"b.iskff.fi\" --http.webroot=\"/home/henry/public_html/beta.iskff.fi\" --path=\"/home/henry/.lego\" renew && sudo systemctl reload apache2") | crontab -

Tässä 0 0 1 * * on jokaisen kuukauden ensimmäinen päivä klo 00.00. cron suorittaa tehtävän.

Tarkastetaan vielä

contab -l

Päivitys cronissa

Näin SSL sertifikaatit kaikkialla käytössä!

h.iskff.fi beta.iskff.fi

Lähteet

https://letsencrypt.org/how-it-works/ https://go-acme.github.io/lego/usage/cli/obtain-a-certificate/index.html#using-an-existing-running-web-server https://httpd.apache.org/docs/2.4/ssl/ssl_howto.html#configexample https://certbot.eff.org https://wiki.archlinux.org/title/Systemd/Timers

Dokumentissa käytetty apuna koodissa, tekstinkäsittelyssä ja formatoinnin julkaisussa LLM mistra-small:24b järkeily + gemma2:27b sanoitus malleja sekoitettuna kirjoittajan omalla opetusdatalla (tässä tarkoituksessa pääosin Linux debian, ubuntu ja apt dokumentaatioiden datalla). WilmerAI välissä.

https://ollama.com/library/mistral-small:22b https://ollama.com/library/gemma2:27b https://github.com/SomeOddCodeGuy/WilmerAI

Kuvat optimoitu https://optimage.app

Käytetty aika 2h 25min