ID kaardiga autentimine Apache2 veebiserveriga
Legend
Meil on firma avalik veebileht www.firma.ee mida serveeritakse nii tavalise kui ka SSL-iga turvatud HTTP protokolli kaudu.
Sellel lehel on meil ka kataloog /secure privaatsema informatsiooniga ning sinna laseme ligi ainult ID-kaardiga.
Üldinformatsioon
Allolev juhend sobib id kaardiga autentimise seadistamiseks Apache veebiserveri versioonil alates 1.3.22 + mod_ssl 2.8.5. Käesolev juhend on testitud Ubuntu 9.10, Apache 2.2.12-1ubuntu2.1, mod_ssl 2.2.11 ja OpenSSL 0.9.8g versioonidega.
Sertifikaatide kehtivuse kontroll ei toimu online OCSP teenuse abil (tasuline), selle asemel kontrollitakse igat kliendi sertifikaati vastu kehtetute sertifikaatide nimekirja, mida omakorda aegajalt uuendatakse.
Töö käik
Kuna enamus järgnevaist toimingutest vajavad root kasutaja privileege, on 2 võimalust:
1. Käivitada iga säherdune käsk root kasutaja õigustes sudo abil näiteks:
sudo apt-get update sudo nano /etc/hosts
2. Logime ennast root kasutajaks ning käivitame vajalikud toimingud. Kuna sudo-t sel juhul enam vaja ei lähe, hoiad selle arvelt pisut aega kokku. Samas on aga tunduvalt lihtsam midagi ära rikkuda, sest KÕIK käsud käivitatakse root kasutaja õigustes!
sudo -i apt-get update vi /etc/hosts
Kuidas keegi jätkab on igaühe enda valida. Järgnevas juhendis on root kasutaja õigustes käivitatavatel käskudel ees sudo. Kui otsustad ennast kohe root kasutajaks keerata, siis edaspidistes toimingutes võid (aga ei pea) sudo eest ära jätta. Kuna enamus konfiguratsioonifaile on root kasutaja omad, pead nende muutmiseks omama ka root kasutaja privileege - tekstieditor tuleb käivitada root kasutaja õigustes nagu ülal näidatud.
Eeldused
Selle juhendi kasutajalt eeldatakse linuxi käsurea mõningast tundmist ning oskust kasutada käsurealt tekstieditori n. vi või nano.
Eelduseks on korrektselt sooritatud Veebiserveri labor v.2, st. veebiserver on labori juhendi järgi seadistatud ning www.firma.ee lehekülje SSL osa toimib vigadeta.
Installeerimine
Lae alla Eesti ID kaardi juursertifikaadid ning paiguta need /etc/apache2 kataloogi:
cd /etc/apache2 sudo wget http://www.sk.ee/files/JUUR-SK.PEM.cer sudo wget http://www.sk.ee/files/ESTEID-SK.PEM.cer sudo wget http://www.sk.ee/files/ESTEID-SK%202007.PEM.cer
Lae alla kehtetute sertifikaatide nimekiri ning paiguta see /etc/apache2/crl kataloogi:
sudo mkdir /etc/apache2/crl cd /etc/apache2/crl sudo wget http://www.sk.ee/crls/esteid/esteid.crl sudo wget http://www.sk.ee/crls/esteid/esteid2007.crl sudo wget http://www.sk.ee/crls/juur/crl.crl
Seadistamine
ID kaardi juursertifikaatide paigaldamine
Pane kõik 3 juursertifikaati kokku ühte faili, et veebiserveril oleks lihtsam neid lugeda:
sudo -i cd /etc/apache2 cat JUUR-SK.PEM.cer ESTEID-SK.PEM.cer ESTEID-SK\ 2007.PEM.cer > juur.crt
Lisa apache konfiguratsioonifaili /etc/apache2/sites-enabled/www , SSL virtuaalsaidi osasse, rida:
SSLCACertificateFile /etc/apache2/juur.crt
Nimepõhiste virtuaalserverite loomine
- Loo kataloogid www ja sales /var/www kausta.
sudo mkdir -p /var/www/www /var/www/sales
- Tee /etc/apache2/sites-available/default konfiguratsiooni failist koopiad nimedega www ja sales:
sudo cp /etc/apache2/sites-available/default /etc/apache2/sites-available/sales sudo cp /etc/apache2/sites-available/default /etc/apache2/sites-available/www
- Muuda sales ja www faile. Pööra tähelepanu ridadele, mis algavad ErrorLog ja CustomLog - nendega määratakse ära selle virtuaalserveri logifailide asukohad!
- sales:
<VirtualHost *:80> ServerAdmin webmaster@localhost ServerName sales.firma.ee #Lisa see rida siia DocumentRoot /var/www/sales #Seda rida tuleb muuta <Directory /> Options FollowSymLinks AllowOverride None </Directory> <Directory /var/www/sales> Options Indexes FollowSymLinks MultiViews AllowOverride None Order allow,deny allow from all </Directory> ScriptAlias /cgi-bin/ /usr/lib/cgi-bin/ <Directory "/usr/lib/cgi-bin"> AllowOverride None Options +ExecCGI -MultiViews +SymLinksIfOwnerMatch Order allow,deny Allow from all </Directory> ErrorLog /var/log/apache2/sales.error.log #Seda rida tuleb muuta # Possible values include: debug, info, notice, warn, error, crit, # alert, emerg. LogLevel warn CustomLog /var/log/apache2/sales.access.log combined #Seda rida tuleb muuta Alias /doc/ "/usr/share/doc/" <Directory "/usr/share/doc/"> Options Indexes MultiViews FollowSymLinks AllowOverride None Order deny,allow Deny from all Allow from 127.0.0.0/255.0.0.0 ::1/128 </Directory> </VirtualHost>
- www:
<VirtualHost *:80> ServerAdmin webmaster@localhost ServerName www.firma.ee #Lisa see rida siia DocumentRoot /var/www/www #Seda rida tuleb muuta <Directory /> Options FollowSymLinks AllowOverride None </Directory> <Directory /var/www/www> Options Indexes FollowSymLinks MultiViews AllowOverride None Order allow,deny allow from all </Directory> ScriptAlias /cgi-bin/ /usr/lib/cgi-bin/ <Directory "/usr/lib/cgi-bin"> AllowOverride None Options +ExecCGI -MultiViews +SymLinksIfOwnerMatch Order allow,deny Allow from all </Directory> ErrorLog /var/log/apache2/www.error.log #Seda rida tuleb muuta # Possible values include: debug, info, notice, warn, error, crit, # alert, emerg. LogLevel warn CustomLog /var/log/apache2/www.access.log combined #Seda rida tuleb muuta Alias /doc/ "/usr/share/doc/" <Directory "/usr/share/doc/"> Options Indexes MultiViews FollowSymLinks AllowOverride None Order deny,allow Deny from all Allow from 127.0.0.0/255.0.0.0 ::1/128 </Directory> </VirtualHost>
- sales ja www virtuaalserverite kasutamiseks tuleb nad kõigepealt lubada:
sudo a2ensite sales sudo a2ensite www
- Kui soovid keelata vaikimisi serveri (üldjuhul siis n. http://firma.ee), siis käivita:
sudo a2dissite default
Nüüdseks on mõlemad virtuaalserverid seadistatud töötama pordil 80 (http).
SSL keskkonna loomine
Sertifikaadi genereerimine
- Kõigepealt genereerime serverile võtmepaari:
sudo ssh-keygen -t rsa -b 1024
- Kui küsitakse, kuhu võtmed salvestada, sisesta /etc/apache2/<võtmenimi> . Parool jäta tühjaks.
Generating public/private rsa key pair. Enter file in which to save the key (/root/.ssh/id_rsa): /etc/apache2/id_rsa.key Enter passphrase (empty for no passphrase): Enter same passphrase again: Your identification has been saved in /etc/apache2/id_rsa.key. Your public key has been saved in /etc/apache2/id_rsa.key.pub.
Antud näite puhul tehti siis 2 võtit - salajane (private) ja avalik (public), mis salvestati vastavalt failidesse /etc/apache2/id_rsa.key ja /etc/apache2/id_rsa.key.pub .
- Edasi on meil vaja serveri salajase võtme abil genereerida CSR - Certificate Signing Request mõlema virtuaalse serveri jaoks:
- www.firma.ee:
sudo openssl req -new -key /etc/apache2/id_rsa.key -out /etc/apache2/www.firma.ee.csr
Küsimustele võid vastata nii nagu allolevas näites
You are about to be asked to enter information that will be incorporated into your certificate request. What you are about to enter is what is called a Distinguished Name or a DN. There are quite a few fields but you can leave some blank For some fields there will be a default value, If you enter '.', the field will be left blank. ----- Country Name (2 letter code) [AU]:EE State or Province Name (full name) [Some-State]:Harjumaa Locality Name (eg, city) []:Tallinn Organization Name (eg, company) [Internet Widgits Pty Ltd]:Firma Organizational Unit Name (eg, section) []: Common Name (eg, YOUR name) []:www.firma.ee Email Address []: Please enter the following 'extra' attributes to be sent with your certificate request A challenge password []: An optional company name []:
- sales.firma.ee:
sudo openssl req -new -key /etc/apache2/id_rsa.key -out /etc/apache2/sales.firma.ee.csr
Küsimustele võid vastata nii nagu allolevas näites
You are about to be asked to enter information that will be incorporated into your certificate request. What you are about to enter is what is called a Distinguished Name or a DN. There are quite a few fields but you can leave some blank For some fields there will be a default value, If you enter '.', the field will be left blank. ----- Country Name (2 letter code) [AU]:EE State or Province Name (full name) [Some-State]:Harjumaa Locality Name (eg, city) []:Tallinn Organization Name (eg, company) [Internet Widgits Pty Ltd]:Firma Organizational Unit Name (eg, section) []: Common Name (eg, YOUR name) []:sales.firma.ee Email Address []: Please enter the following 'extra' attributes to be sent with your certificate request A challenge password []: An optional company name []:
Nüüd on olemas request-id mõlema sertifikaadi teemiseks. Päriselus tuleks need request-id saata mõnele usaldusväärsele asutusele (CA - Certificate Authority) allkirjastamiseks. CA põhimõtteliselt kinnitab (request-i allkirjastades), et selle sertifikaadi taga peitub see, kes ta väidab ennast olevat - antud juhul siis Firma.
Meil kahjuks ei ole sellist luksust, mistõttu me allkirjastame request-i serveri enda salajase võtmega. Sel moel saame nn. SELF-SIGNED sertifikaadi. Kui meie veebilehte külastab klient, siis tema näeb, et tegemist on iseallkirjastatud sertifikaadiga - usaldus veebilehe vastu kaob. Iseallkirjastatud sertifikaadiga erilist usaldusväärsust me ei saavuta, saame lihtsalt turvalise ühenduse, mis on turvaline niikaua, kuni keegi ei saa kätte serveris olevat salajast võtit.
- Allkirjastame mõlemad request-id kehtivusajaga 1 aasta ja salvestame saadud sertifikaadid vastavate nimedega:
sudo openssl x509 -req -days 365 -in /etc/apache2/www.firma.ee.csr -signkey /etc/apache2/id_rsa.key -out /etc/apache2/www.firma.ee.crt sudo openssl x509 -req -days 365 -in /etc/apache2/sales.firma.ee.csr -signkey /etc/apache2/id_rsa.key -out /etc/apache2/sales.firma.ee.crt
- Huvi korral võid vaadata/kontrollida sertifikaatide sisu. Vastavad käsud on toodud all.
openssl x509 -in /etc/apache2/www.firma.ee.crt -noout -text openssl x509 -in /etc/apache2/sales.firma.ee.crt -noout -text
SSL seadistamine
- Et lubada apache-l SSL mooduli kasutamine käivita järgmine käsk:
sudo a2enmod ssl
- Seadista veebiserver kuulama SSL mooduli lubamise järel porte 443 ja 444, selleks ava fail /etc/apache2/ports.conf ning lisa tagide <IfModule mod_ssl.c> ja </IfModule> vahele:
Listen 444
Listen 443 peaks seal vahel juba olema.
- Seadistame www ja sales virtuaalserverid kuulama pordil 443 ja 444 ning kasutama SSL-i:
- www: lisa /etc/apache2/sites-enabled/www faili lõppu, peale viimast </VirtualHost> rida uus sektsioon:
<VirtualHost *:443> ServerAdmin webmaster@localhost ServerName www.firma.ee DocumentRoot /var/www/www <Directory /> Options FollowSymLinks AllowOverride None </Directory> <Directory /var/www/www> Options Indexes FollowSymLinks MultiViews AllowOverride None Order allow,deny allow from all </Directory> ScriptAlias /cgi-bin/ /usr/lib/cgi-bin/ <Directory "/usr/lib/cgi-bin"> AllowOverride None Options +ExecCGI -MultiViews +SymLinksIfOwnerMatch Order allow,deny Allow from all </Directory> ErrorLog /var/log/apache2/www-ssl.error.log # Possible values include: debug, info, notice, warn, error, crit, # alert, emerg. LogLevel warn CustomLog /var/log/apache2/www-ssl.access.log combined Alias /doc/ "/usr/share/doc/" <Directory "/usr/share/doc/"> Options Indexes MultiViews FollowSymLinks AllowOverride None Order deny,allow Deny from all Allow from 127.0.0.0/255.0.0.0 ::1/128 </Directory> SSLEngine on SSLCertificateFile /etc/apache2/www.firma.ee.crt SSLCertificateKeyFile /etc/apache2/id_rsa.key SSLOptions +StdEnvVars </VirtualHost>
- sales: lisa /etc/apache2/sites-enabled/sales faili lõppu, peale viimast </VirtualHost> rida uus sektsioon:
<VirtualHost *:444> ServerAdmin webmaster@localhost ServerName sales.firma.ee DocumentRoot /var/www/sales <Directory /> Options FollowSymLinks AllowOverride None </Directory> <Directory /var/www/sales> Options Indexes FollowSymLinks MultiViews AllowOverride None Order allow,deny allow from all </Directory> ScriptAlias /cgi-bin/ /usr/lib/cgi-bin/ <Directory "/usr/lib/cgi-bin"> AllowOverride None Options +ExecCGI -MultiViews +SymLinksIfOwnerMatch Order allow,deny Allow from all </Directory> ErrorLog /var/log/apache2/sales-ssl.error.log # Possible values include: debug, info, notice, warn, error, crit, # alert, emerg. LogLevel warn CustomLog /var/log/apache2/sales-ssl.access.log combined Alias /doc/ "/usr/share/doc/" <Directory "/usr/share/doc/"> Options Indexes MultiViews FollowSymLinks AllowOverride None Order deny,allow Deny from all Allow from 127.0.0.0/255.0.0.0 ::1/128 </Directory> SSLEngine on SSLCertificateFile /etc/apache2/sales.firma.ee.crt SSLCertificateKeyFile /etc/apache2/id_rsa.key SSLOptions +StdEnvVars </VirtualHost>
Jälgida, et crt ja key failid oleks vastavates kataloogides. Pöörake tähelepanu ka logifailidele!
Nüüdseks peaks apache olema seadistatud. Käivita veebiserver ning kontrolli kas kõik töötab nii nagu vaja. Käivitamine ja kontroll kirjeldatud järgmistes punktides.
Käivitamine/Seiskamine
- Veebiserveri käivitamine:
sudo service apache2 start
või
sudo /etc/init.d/apache2 start
- Veebiserveri seiskamine:
sudo service apache2 stop
või
sudo /etc/init.d/apache2 stop
- Siinkohal oleks mõistlik uurida, kas veebiserver peale serveri (re)starti automaatselt käivitub:
- Üsna lihtne on seda teha sysvconfig utiliidi abil. Kui sul seda ei ole, siis paigalda see apti abil:
sudo apt-get install sysvconfig
- Peale IGAT konfiguratsioonimuudatust peaks muudatused ka veebiserverisse laadima. Peale igat seetõttu, et kui midagi valesti läks, siis on viga lihtsam leida.
- Selleks võib veebiserverile teha restardi:
sudo service apache2 restart
või
sudo /etc/init.d/apache2 restart
- Saab ka ilma restardita:
sudo service apache2 reload
või
sudo /etc/init.d/apache2 reload
reload eelis on selles, et see toimib kasutajatele märkamatult, kasutajate sessioonid säilivad. Näiteks kui sinu veebilehele on sisseloginud 100 kasutajat, siis restart puhul peaksid nad kõik uuesti sisse logima, reload puhul ei pea.
Tulemuse kontroll
Tuleb luua phpinfo.php leht, mille vaatamisel kuvatakse phpinfo funktsiooni väljund:
sudo echo "<?php phpinfo(); ?>" > /var/www/phpinfo.php
Tuleb luua index.html fail nii /var/www/www/ kui /var/www/sales/ kataloogi:
sudo echo "<h1>Firma pealeht</h1>" > /var/www/www/index.html sudo echo "<h1>Myygiosakond</h1>" > /var/www/sales/index.html
- Kontrollimiseks mine veebilehitsejaga järgmistele aadressidele:
links http://firma.ee/phpinfo.php links http://www.firma.ee links https://www.firma.ee links http://sales.firma.ee links https://sales.firma.ee:444/ links http://www.firma.ee/phpmyadmin/
Minnes http://www.firma.ee/phpinfo.php peaksid nägema standartset phpinfo lehte.
Minnes links abil lehele www.firma.ee peab kuvatama leht sisuga "firma pealeht". Külastusest peab jääma jälg logifaili
/var/log/apache2/www.access.log , vigadest peab jääma jälg faili /var/log/apache2/www.error.log. SSL-i kasutades on logifailid vastavalt /var/log/apache2/www-ssl.access.log ja /var/log/apache2/www-ssl.error.log
Minnes links abil lehele sales.firma.ee peab kuvatama leht sisuga "müügiosakond". Külastusest peab jääma jälg logifaili
/var/log/apache2/sales.access.log , vigadest peab jääma jälg faili /var/log/apache2/sales.error.log SSL-i kasutades on logifailid vastavalt /var/log/apache2/sales-ssl.access.log ja /var/log/apache2/sales-ssl.error.log
http://www.firma.ee/phpmyadmin/ lehel peab saama luua andmebaase ja tabeleid, aga see vajab edasist seadistamist.
Varundus ja taastamine
Varundamiseks kopeeri allolevates kataloogides asuvad failid alternatiivsele andmekandjale.
Failiõiguste säilitamiseks ja andmete tihendamiseks kasuta tar käsku.
Andmete asukohad
Veebide sisu: /var/www Veebi sales.firma sisu: /var/www/sales Apache2 konfiguratsioon: /etc/apache2 Veebiserveri logifailid: /var/log/apache2
Varundamise ja taastamise näited
Varundame kõik veebid juurkataloogis asuvasse faili veebid.tar.gz
sudo tar -cvvf /veebid.tar.gz /var/www/*
Taastame kõik veebid juurkataloogis olevast failist veebid.tar.gz endisesse asukohta:
sudo tar -xvvf /veebid.tar.gz
Mis saab edasi?
- Võid seadistada mitu SSLi kasutavat virtuaalserverit töötama samal pordil (443), loe lisa http://www.crsr.net/Notes/Apache-HTTPS-virtual-host.html ja http://www.harbar.net/articles/ssl.aspx
- Tekita ümbersuunamine, kui sa soovid näiteks kõik http kasutajad automaatselt https-i peale ümber suunata.
- Seadista veebiserveri logide roteerumine ja arhiveerimine
- Installi mingi vahend, mis genereeriks apache logide põhjal veebilehtede kasutamis-statistikat n webalizer.
- Seadista ID kaardiga autentimine Apache2 veebiserveriga