Ubuntu, Apache ja SSL-salaus

eero
Site Admin
Viestit: 329
Liittynyt: 07 Marras 2007 20:17

Ubuntu, Apache ja SSL-salaus

Viesti Kirjoittaja eero »

Otetaan käyttöön SSL-salaus käyttöön Apachen kanssa. Oletaan, että Apache2 on asennettuan järjestelmään.

Luo kansio /etc/apache2/ssl komennolla sudo mkdir /etc/apache2/ssl
Aseta omistajaksi root komennolla sudo chown root:root /etc/apache2/ssl

Sertifikaatti
Aloitetaan luomalla sertifikaatti joka on voimassa halutun ajan.

Luo kotihakemistoon scripti ssl.sh ja kopioi koodi:

Koodi: Valitse kaikki

#!/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 3650
 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
Anna tiedostolle suoritusoikeudet klikkaamalla hiiren oikealla, valitsemalla Ominaisuudet, valitsemalla Oikeudet ja laittamalla täppi kohtaan Salli tiedoston suoritus ohjelmana

Luo samaan hakemistoon tiedosto ssleay.cnf ja kopioi koodi:

Koodi: Valitse kaikki

#
 # 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
Aja koodi komennolla sudo ./ssl.sh

Aktivoidaan SSL-moduuli
a2enmod ssl

Asetetaan Apache kuuntelemaan oikeaa porttia
Lisää tiedostoon /etc/apache2/ports.conf rivi:
sudo gedit /etc/apache2/ports.conf

Listen 443
443 on https 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:
sudo gedit /etc/apache2/sites-available/ssl

NameVirtualHost *:443
<virtualhost *:443>

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

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

Huomaa, että jos sulla on monta sivusto, niin lisää vain haluttuun sivustoon tämä

Aktivoidaan asetukset.
a2ensite ssl

Lopuksi käynnistetään Apache uusiksi, jotta kaikki muutokset tulevat voimaan.
sudo /etc/init.d/apache2 restart

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


PAKOTETTU SALAUS

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:
sudo gedit /etc/apache2/sites-available/default

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.

RewriteEngine on
RewriteCond %{SERVER_PORT} ^80$
RewriteRule ^/(.*)$ https://%{SERVER_NAME} [L,R]
RewriteLog "/var/log/apache2/rewrite.log"
RewriteLogLevel 2


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

sudo /etc/init.d/apache2 restart