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

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

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

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

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.

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.

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

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

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