Apache ja HTTPS

Linux.fista
Versio hetkellä 15. lokakuuta 2007 kello 19.30 – tehnyt Heikki (keskustelu | muokkaukset) (siistintää)
Siirry navigaatioon Siirry hakuun

HTTPS-protokolla mahdollistaa verkkoliikenteen salaamisen SSL-yhteyskäytännöllä. Tässä oppaassa otetaan käyttöön Apachen HTTPS-tuki.

Varmenne

SSL-salausta käytettäessä tarvitaan varmenne (sertifikaatti). Varmenteen avulla käyttäjä voi paremmin selvittää, minkä palvelimen kanssa verkossa todellisuudessa asioi.

Aloitetaan luomalla varmenne, joka on voimassa halutun ajan. Vanhemmissa järjestelmissä tämä onnistuu komennolla

apache2-ssl-certificate -days 365

ja vastaamalla kysymyksiin.

Uudemmissa järjestelmissä komentoa apache2-ssl-certificate tai siihen liittyvää asetustiedostoa ei löydy. Tällöin on parasta luoda varmennetiedosto itse seuraavalla skriptillä:

 #!/bin/sh -e
 if [ "$1" != "--force" -a -f /etc/apache2/ssl/apache.pem ]; then
   echo "/etc/apache2/ssl/apache.pem exists!  Use \"$0 --force.\""
   exit 0
 fi
 if [ "$1" = "--force" ]; then
   shift
 fi     
 echo
 echo creating selfsigned certificate
 echo "replace it with one signed by a certification authority (CA)"
 echo
 echo enter your ServerName at the Common Name prompt
 echo
 echo If you want your certificate to expire after x days call this programm 
 echo with "-days x" 
 # use special .cnf, because with normal one no valid selfsigned
 # certificate is created
 export RANDFILE=/dev/random
 openssl req $@ -config ssleay.cnf \
   -new -x509 -nodes -out /etc/apache2/ssl/apache.pem \
   -keyout /etc/apache2/ssl/apache.pem -days 365
 chmod 600 /etc/apache2/ssl/apache.pem
 ln -sf /etc/apache2/ssl/apache.pem \
 /etc/apache2/ssl/`/usr/bin/openssl \
 x509 -noout -hash < /etc/apache2/ssl/apache.pem`.0

Tässä alkuperäistä varmenteen luovaa skriptiä on muutettu lisäämällä valitsin -days 365 ja korjattu asetustiedoston polku. Huomaa, että joissain järjestelmissä Apachen asetustiedoston polku saattaa olla jokin muu kuin /etc/apache2.

Skripti tarvitsee asetustiedoston, joka on samassa hakemistossa kuin itse skripti ja jonka tiedostonimi on ssleay.cnf. Tiedoston sisällön tulee olla kutakuinkin seuraava:

 #
 # SSLeay example configuration file.
 #
 RANDFILE                = $ENV::HOME/.rnd
 [ req ]
 default_bits            = 1024
 default_keyfile         = privkey.pem
 distinguished_name      = req_distinguished_name
 [ req_distinguished_name ]
 countryName                     = Maan nimi (2-kirjaiminen koodi)
 countryName_default             = FI
 countryName_min                 = 2
 countryName_max                 = 2
 stateOrProvinceName             = Lääni
 stateOrProvinceName_default     = Uusimaa
 localityName                    = Kaupunki
 organizationName                = Organisaation nimi (esim, yritys)
 organizationName_max            = 64
 organizationalUnitName          = Yksikön nimi (esim. osasto)
 organizationalUnitName_max      = 64
 commonName                      = Palvelimen nimi (esim. www.palvelin.fi)
 commonName_max                  = 64
 emailAddress                    = Sähköpostiosoite
 emailAddress_max                = 40

Tämän lisäksi hakemisto /etc/apache2/ssl on luotava ja sen omistajaksi on asetettava pääkäyttäjä (chown root /etc/apache2/ssl).

SSL:n käyttöönotto

  1. Ladataan Apachen SSL-moduuli
a2enmod ssl
  1. Asetetaan Apache kuuntelemaan oikeaa porttia lisäämällä tiedostoon /etc/apache2/ports.conf rivi:
Listen 443
443 on https:n oletus portti.
  1. Asetetaan SSL-suojatuille sivuille omat asetukset. Kopioidaan asetustiedoston pohja:
cp /etc/apache2/sites-available/default /etc/apache2/sites-available/ssl
  1. Lisätään nyt luotuun tiedostoon (/etc/apache2/sites-available/ssl) kahdelle ensimmäiselle riville porttinumerot tyyliin
NameVirtualHost *:443
<virtualhost *:443>
  1. Lisätään <virtualhost *:443>-tagin sisään rivit:
SSLEngine On
SSLCertificateFile /etc/apache2/ssl/apache.pem
  1. Aktivoidaan asetukset:
a2ensite ssl
  1. Käynnistetään lopuksi Apache uudelleen, jotta kaikki muutokset tulevat voimaan.
apache2ctl restart

Nyt salaus pitäisi tulla käyttöön, kun sivuille mennään https-alkuisella osoitteella http:n sijaan.

Salauksen käyttöpakko

Nyt käyttäjä pystyy valitsemaan, käyttääkö hän salausta vai ei. Usein halutaan pakottaa käyttäjä käyttämään salattua yhteyttä. Se onnistuu rewrite-moduulilla.

  1. Aktoivoidaan taas oikea moduuli.
a2enmod rewrite
  1. Muokataan tiedostoa /etc/apache2/sites-available/default lisäämällä <VirtualHost *>-tagin sisään:
RewriteEngine   on
RewriteCond     %{SERVER_PORT} ^80$
RewriteRule     ^/salainen(.*)$ https://%{SERVER_NAME}/salainen$1 [L,R]
RewriteLog      "/var/log/apache2/rewrite.log"
RewriteLogLevel 2

Nyt http://www.example.com/salainen/ ohjautuu automaattisesti SSL-salattuun yhteyteen https://www.example.com/salainen/. Jos haluat kaikki sivut SSL-salauksen alle voit jättää edelliseen hakemiston kohdalle pelkästään /:n. Eli jätä vain sana "salainen" pois.

Muutokset tulevat voimaan käynnistämällä Apache uusiksi.

apache2ctl restart

Aiheesta muualla