Apache ja HTTPS

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

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

Sertifikaatti

Aloitetaan luomalla sertifikaatti joka on voimassa halutun ajan.

apache2-ssl-certificate -days 365

Vastaile tuleviin kysymyksiin.

  • Harkinnassa voisi olla read-only slaven tekeminen varsinaisesta koneesta.
Debian Etch ja uudemmat

apache2-ssl-certificate-sertifikaattikomentoa ei löydy uudemmista Debianeista, eikä siihen liittyvää konfiguraatiotiedostoa tai kohdehakemistoa. Ja suurin osa apache2-ssl-certificate-komennoista ei muutenkaan tue mitään vipuja. Helpointa on luoda komentotiedosto itse:

 #!/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ä Sargen-tiedostoa on muutettu lisäämällä -days 365 vipu komentoon ja korjattu config-tiedoston polku. Config-tiedoston oletetaan löytyvän samasta hakemistosta kuin skriptankin. Config-tiedoston sisällä voisi olla vaikka:

 #
 # 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 /apache2/ssl on luotava ja annettava root:in haltuun. Tämän tiedoston ajamisen jälkeen tämän sivun ohjeen pitäisi toimia myös uudemmissa Debian-pohjaisissa jakeluissa.

Aktivoidaan SSL-moduuli

a2enmod ssl

Asetetaan Apache kuuntelemaan oikeaa porttia

Lisää tiedostoon /etc/apache2/ports.conf rivi:

Listen 443

443 on https:n oletus portti.

SSL-suojatuille sivuille omat asetukset

cp /etc/apache2/sites-available/default /etc/apache2/sites-available/ssl

Lisää nyt luotuun tiedostoon ( /etc/apache2/sites-available/ssl ) kahdelle ensimmäiselle riville porttinumerot tähän tapaan:

NameVirtualHost *:443
<virtualhost *:443>

Ja laita <virtualhost *:443>-tagin sisään rivit:

SSLEngine On
SSLCertificateFile /etc/apache2/ssl/apache.pem

Aktivoidaan asetukset.

a2ensite ssl

Lopuksi käynnistetään Apache uusiksi, 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.

Mod rewrite

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 Mod rewritella.

Aktoivoidaan taas oikea moduuli.

a2enmod rewrite

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