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.