SSL Varmenne omalle Web sivustolle (Let's Encrypt)

25.02.2018
Linux

Tämä juttu käy läpi miten suojaamatonta (HTTP) yhteyttä käyttävän Web -sivuston saa muutettua käyttämään suojattua (HTTPS) yhteyttä.

Suojattu HTTPS yhteys vaatii domainile varmenteen, eli sertifikaatin. Varmenteen täytyy olla voimassa sekä luotettavan tahon myöntämä jotta web selain päästää käyttäjän sivustolle ilman turvallisuus varoitusta. Varmenteen myöntäjästä käytetään lyhennettä CA (Certificate Authority).

Tässä jutussa varmenteen myöntäjänä toimii Let’s Encrypt (https://letsencrypt.org/), sillä se ei veloita myöntämistä varmenteista mitään. Let’s Encrypt:n web sivuilta saa tarkempaa tietoa ja ohjeita.

Varmenteen haku, asennus ja uusiminen tapahtuu jollakin varmenteiden hallinta ohjelmistolla. Let’s Encrypt ehdottaa varmenteiden hallinta ohjelmaksi certbot nimistä ohjelmaa. Certbot on monipuolinen ohjelmisto, joka tukee yleisimpiä web palvelin ohjelmistoja (Apache ja Nginx).

Certbot -ohjelman asennus

Certbot -ohjelman asennus ohjeet löytyvät ohjelman web sivulta: https://certbot.eff.org/. Web sivu pyytää valitsemaan palvelinohjelmiston ja käyttöjärjestelmän, jonka jälkeen se kertoo tarkemmat asennusohjeet. Oman käyttöjärjestelmä version voi katsoa lsb_relase -a komennolla, (alla esimerkki tuloste).

$ lsb_release -a
No LSB modules are available.
Distributor ID: Ubuntu
Description:    Ubuntu 16.04.2 LTS
Release:        16.04
Codename:       xenial

Tässä jutussa palvelinohjelmistoksi on valittu Apache2 ja käyttöjärjestelmäksi yllä olevan tulosteen mukainen Ubuntu 16.04 LTS (xenial). Tälle kombinaatiolle web sivusto kertoo asennus ohjeeksi alla olevan komento listan suorittamisen.

$ sudo apt-get update
$ sudo apt-get install software-properties-common
$ sudo add-apt-repository ppa:certbot/certbot
$ sudo apt-get update
$ sudo apt-get install python-certbot-apache 

Varmenteen haku Certbot ohjelmalla

Varmenteen haku ja asennus certbot ohjelmalla on varsin helppoa. Tässä esimerkissä certbottia käytetään vain varmenteen hakemiseen, ja asennus palvelin ohjelmistoon (Apache2) tehdään käsin.

Pelkän varmenteen certbotilla ohjelmalla voi hakea alla olevalla komennolla. Argumentti --apache tarkoittaa, että certbotin tulee käyttää apache liitännäistä varmenteen hakemiseen ja asennukseen. Argumentti certonly tarkoittaa ettei certbotin tule asentaa varmennetta automaattisesti palvelin ohjelmistoon (Apache2) vaan se tullaan tekemään käsin.

sudo certbot --apache certonly

Yllä olevan komennon jälkeen cerbot käynnistyy ja kysyy muutaman kysymyksen, kuten esimerkiksi hakijan sähköposti osoitteen, ja tärkeimpänä domainin/domainit joille varmenne haetaan (tässä esimerkissä: munsivut.fi www.munsivut.fi).

Kun certbot saa homman valmiiksi se onnittelee (ks. esimerkki tulostus alta) ja kertoo samalla mihin varmenne ja siihen liittyvä salainen avain tallentuivat. Certbot kertoo myös, milloin varmenne umpeutuu ja millä komennolla sen voi uusia.

 - Congratulations! Your certificate and chain have been saved at:
   /etc/letsencrypt/live/munsivut.fi/fullchain.pem
   Your key file has been saved at:
   /etc/letsencrypt/live/munsivut.fi/privkey.pem
   Your cert will expire on 2018-05-26. To obtain a new or tweaked
   version of this certificate in the future, simply run certbot
   again. To non-interactively renew *all* of your certificates, run
   "certbot renew"

Varmenne fullchain.pem ja salainen avain privkey.pem tallentuivat siis /etc/letsencrypt/live/ hakemistossa olevaan domainin (tässä esimerkissä munsivut.fi) nimiseen hakemistoon. Varmenne on voimassa 26.05.2018 asti, ja sen voi uusia cerbot renew komennolla (uusii kaikki varmenteet).

Käskyllä certbot certficates voi listata kaikki haetut varmenteet ja niiden perustiedot.

$ sudo certbot certificates
Saving debug log to /var/log/letsencrypt/letsencrypt.log

-------------------------------------------------------------------------------
Found the following certs:
  Certificate Name: munsivut.fi
    Domains: munsivut.fi www.munsivut.fi
    Expiry Date: 2018-05-26 18:37:17+00:00 (VALID: 88 days)
    Certificate Path: /etc/letsencrypt/live/munsivut.fi/fullchain.pem
    Private Key Path: /etc/letsencrypt/live/munsivut.fi/privkey.pem
-------------------------------------------------------------------------------

HTTPS:n käyttöönotto Apache2:ssa

HTTPS:n käyttöönotto Apache palvelin ohjelmistossa tapahtuu muokkaamalla SSL sivuston asetustiedosto default-ssl.conf.

$ sudo vim /etc/apache2/sites-available/default-ssl.conf

SSL sivuston asetustiedostoon (yllä) täytyy lisätä ServerName -asetus, joka kertoo domainin nimen. Tämän lisäksi, asetus tiedostossa olevat SSL varmenteen tiedosto asetus SSLSertificateFileFile ja salaisen avaimen tiedosto asetus SSLSertificateFileKeyFile täytyy muuttaa osoittamaan certbotin luomaan varmenne ja avain tiedostoon. Tässä juttun valinnoilla asetustiedostossa löytyy siis näiden muokkauksien jälkeen seuraavat rivit.

ServerName www.munsivut.fi

SSLSertificateFileFile       /etc/letsencrypt/live/munsivut.fi/fullchain.pem
SSLSertificateFileKeyFile    /etc/letsencrypt/live/munsivut.fi/privkey.pem

Apachen SSL moduuli on aktivoitava jotta HTTPS yhteys on mahdollinen.

$ sudo a2enmod ssl

SSL sivusto (HTTPS -sivusto) täytyy aktivoida jotta käyttäjä voi ottaa yhteyden siihen.

$ sudo a2ensite default-ssl.conf

Näiden vaiheiden jälkeen Apache pitää vielä uudelleen käynnistää jotta muutokset asetuvat voimaan.

$ sudo service apache2 restart

Nyt sivusto tukee HTTPS yhteyttä (https://www.munsivut.fi).

HTTP käyttäjien ohjaaminen HTTPS sivustolle

HTTP sivuston käyttäjät voi ohjata HTTPS sivuston käyttäjiksi lisäämällä HTTP sivustoon uudelleenohjauksen HTTPS sivustolle. Tämä tapahtuu muokkaamalla HTTP sivuston asetustiedostoa.

$ sudo vim /etc/apache2/sites-available/000-default.conf

HTTP sivuston asetustiedostoon (yllä) lisätään uudelleenohjaus käsky. Tässä esimerkissä tämä tapahtuu lisäämällä alla oleva rivi asetustiedostoon (esim. rivin <VirtualHost *:80> alle).

Redirect / https://www.musivut.fi/

Apache palvelu täytyy tämän jälkeen uudelleen ladata jotta muutokset astuvat voimaan.

$ sudo service apache2 reload

Nyt HTTP sivuston käyttäjät ohjautuvat HTTPS sivustolle.