ID kaardiga autentimine Apache2 veebiserveriga: Difference between revisions

From ICO wiki
Jump to navigationJump to search
 
(54 intermediate revisions by 4 users not shown)
Line 3: Line 3:
Meil on firma avalik veebileht www.firma.ee mida serveeritakse nii tavalise kui ka SSL-iga turvatud HTTP protokolli kaudu.  
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.
Sellel lehel on meil ka kataloog /secure privaatsema informatsiooniga kuhu laseme kasutaja ligi ainult ID-kaardiga edukalt autentides ning ainult SSL protokolli kasutades.


=Üldinformatsioon=
=Ü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.
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. Tõenäoliselt sobib see juhend kasutamiseks ka eelnimetatud tarkvara paljude vanemate ja uuemate 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.
Sertifikaatide kehtivuse kontroll ei toimu online OCSP (Online Certificate Status Protocol) teenuse abil (tasuline), selle asemel kontrollitakse igat kliendi sertifikaati vastu kehtetute sertifikaatide nimekirja, mida omakorda aegajalt uuendatakse.


=Töö käik=
=Töö käik=
Line 40: Line 40:
<pre>
<pre>
cd /etc/apache2
cd /etc/apache2
sudo wget http://www.sk.ee/files/JUUR-SK.PEM.cer
sudo wget http://sk.ee/upload/files/JUUR-SK.PEM.cer
sudo wget http://www.sk.ee/files/ESTEID-SK.PEM.cer
sudo wget http://sk.ee/upload/files/EECCRCA.pem.cer
sudo wget http://www.sk.ee/files/ESTEID-SK%202007.PEM.cer
sudo wget http://sk.ee/upload/files/ESTEID-SK.PEM.cer
sudo wget http://sk.ee/upload/files/ESTEID-SK%202007.PEM.cer
sudo wget http://sk.ee/upload/files/ESTEID-SK%202011.pem.cer
</pre>
</pre>


Line 52: Line 54:
cd /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/esteid.crl
sudo wget http://www.sk.ee/crls/esteid/esteid2007.crl  
sudo wget http://www.sk.ee/crls/juur/crl.crl
sudo wget http://www.sk.ee/crls/juur/crl.crl  
sudo wget http://www.sk.ee/crls/esteid/esteid2007.crl
sudo wget http://www.sk.ee/crls/eeccrca/eeccrca.crl
sudo wget http://www.sk.ee/repository/crls/esteid2011.crl
</pre>
</pre>


=Seadistamine=
=Seadistamine=


==ID kaardi juursertifikaatide paigaldamine==
==ID kaardi juursertifikaatide seadistamine==


Pane kõik 3 juursertifikaati kokku ühte faili, et veebiserveril oleks lihtsam neid lugeda:
Pane kõik 3 juursertifikaati kokku ühte faili, et veebiserveril oleks lihtsam neid lugeda:
<pre>
<pre>
cd /etc/apache2
cd /etc/apache2
sudo -i
sudo cat JUUR-SK.PEM.cer EECCRCA.pem.cer ESTEID-SK.PEM.cer ESTEID-SK\ 2007.PEM.cer ESTEID-SK\ 2011.pem.cer > juur.crt
cat JUUR-SK.PEM.cer ESTEID-SK.PEM.cer ESTEID-SK\ 2007.PEM.cer > juur.crt  
</pre>
</pre>


Lisa apache konfiguratsioonifaili '''/etc/apache2/sites-enabled/www ''' ,  SSL virtuaalsaidi osasse, rida:
==Sertifikaatide tühistusnimekirjade seadistamine==
 
Kuna allalaetavad tühistusnimekirjad on apache jaoks loetamatul kujul, siis on vaja need konverteerida PEM formaati:  
<pre>
<pre>
SSLCACertificateFile  /etc/apache2/juur.crt
sudo -i
cd /etc/apache2/crl
openssl crl -in esteid.crl -out esteid.crl -inform DER
openssl crl -in esteid2007.crl -out esteid2007.crl -inform DER
openssl crl -in crl.crl -out crl.crl -inform DER
openssl crl -in eeccrca.crl -out eeccrca.crl -inform DER
openssl crl -in esteid2011.crl -out esteid2011.crl -inform DER
</pre>
</pre>


==Nimepõhiste virtuaalserverite loomine ==
Apache dokumentatsioonis nõutakse ka räsi-linkide loomist. Genereerime need käsuga:


*Loo kataloogid www ja sales /var/www kausta.
<pre>
<pre>
sudo mkdir -p /var/www/www /var/www/sales
cd /etc/apache2/crl
rm *.r?
n="0";for f in `ls *.crl`;do ln -s $f `openssl crl -hash -noout -in $f`.r$n ;let n=n+1;done
</pre>
</pre>


*Tee /etc/apache2/sites-available/default konfiguratsiooni failist koopiad nimedega www ja sales:
<pre>
sudo cp /etc/apache2/sites-available/default /etc/apache2/sites-available/sales
sudo cp /etc/apache2/sites-available/default /etc/apache2/sites-available/www
</pre>


* Muuda sales ja www faile. Pööra tähelepanu ridadele, mis algavad '''ErrorLog''' ja '''CustomLog'''  - nendega määratakse ära selle virtuaalserveri logifailide asukohad!
Kuna tühistusnimekirju on vaja pidevalt uuendada, siis on selle artikli lõpus kirjeldatud ka sobiva skripti tegemine ning käivitamine.
 
==SSL keskkonna seadistamine==


** sales:
Lisa apache konfiguratsioonifaili '''/etc/apache2/sites-enabled/www ''' ,  SSL virtuaalsaidi osasse, read:
<pre>
<pre>
<VirtualHost *:80>
SSLCACertificateFile  /etc/apache2/juur.crt
        ServerAdmin webmaster@localhost
SSLCARevocationPath /etc/apache2/crl
        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>
 
</pre>
</pre>


** www:
Lisa SSL virtuaalsaidi '''<Directory> ''' sektsioonide juurde järgmine directory sektsioon:  
<pre>
<pre>
<VirtualHost *:80>
         <Directory /var/www/www/secure>
        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
                 Options Indexes FollowSymLinks MultiViews
                 AllowOverride None
                 AllowOverride AuthConfig Options
                 Order allow,deny
                 Order allow,deny
                 allow from all
                 allow from all
         </Directory>
         </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>
</pre>
</pre>


 
Ülaltoodud sektsioonis määratakse ära kataloog, kuhu sisenedes nõutakse ID kaardiga autentimist. Antud juhul siis '''/var/www/www/secure'''
* sales ja www virtuaalserverite kasutamiseks tuleb nad kõigepealt lubada:
Loome selle kataloogi ning nõuame secure kataloogi sisenedes ID-kaarti, luues sinna .htaccess faili:
<pre>
<pre>
sudo a2ensite sales
mkdir /var/www/www/secure
sudo a2ensite www
vi /var/www/www/secure/.htaccess
</pre>
</pre>
 
Ja lisame .htaccess faili järgmised read:
* Kui soovid keelata vaikimisi serveri (üldjuhul siis n. http://firma.ee), siis käivita:
<pre>
<pre>
sudo a2dissite default
SSLVerifyClient require
SSLVerifyDepth 2
</pre>
</pre>


'''Nüüdseks on mõlemad virtuaalserverid seadistatud töötama pordil 80 (http).'''
Põhimõtteliselt on nüüd kõik seadistatud '''AGA''' kui sul on tõesti kõik nii seadistatud nagu [[Veebiserveri labor v.2]]-s nõutud, siis on võimalik '''/var/www/www/secure''' kataloogile siiski ligi pääseda kasutades http protokolli ning järgmist URL-i: <nowiki>http://<serverinimi>/www/secure/</nowiki> .
Selle vältimiseks lisa kõikide, väljaarvatud HTTPS (443 port), virtuaalsaitide konfiguratsioonidesse,  <VirtualHost> sektsioonidesse, teiste kataloogiõiguste juurde järgmised read:


==SSL keskkonna loomine==
<pre>
        <Directory "/var/www/www/secure">
              Order allow,deny
              deny from all
        </Directory>
</pre>


===Sertifikaadi genereerimine===
Arvesta, et ligipääs on vaikimisi lubatud kõikide lubatud (enabled) virtuaalsaitide kaudu. [[Veebiserveri labor v.2]]-s seadistati '''www''' ja '''sales''' ning lisaks on ka vaikimisi sait nimega '''default'''. Käi kindlasti kõik konfid üle.


* Kõigepealt genereerime serverile võtmepaari:
Kõige lõpuks restardime veebiserveri:
<pre>
<pre>
sudo ssh-keygen -t rsa -b 1024
/etc/init.d/apache2 restart
</pre>
</pre>


* Kui küsitakse, kuhu võtmed salvestada, sisesta /etc/apache2/<võtmenimi> . Parool jäta tühjaks.
<pre>
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.
</pre>


''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 .''
'''Nüüdseks peaks SSL ja ID-kaardi osa olema seadistatud. '''
 
=Tulemuse kontroll=


* Edasi on meil vaja serveri salajase võtme abil genereerida CSR - Certificate Signing Request mõlema virtuaalse serveri jaoks:
Loome index.php lehe, mida peaks kuvatama peale edukat autentimist.


** www.firma.ee:
Piisab näiteks phpinfo funktsiooni väljundist:
<pre>
<pre>
sudo openssl req -new -key /etc/apache2/id_rsa.key -out /etc/apache2/www.firma.ee.csr
sudo echo "<?php phpinfo(); ?>" > /var/www/www/secure/index.php
</pre>
</pre>


Küsimustele võid vastata nii nagu allolevas näites
Istu nüüd mõne arvuti taha, kus on kiipkaardilugeja ja brauser, millele on ID-kaardi asi selgeks tehtud ning katseta ligipääsu.
<pre>
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
Võta ühendust oma serveriga: https://ip_aadress/secure või https://www.firma.ee/secure
to be sent with your certificate request
A challenge password []:
An optional company name []:
</pre>


** sales.firma.ee:
(eelnevalt on vaja serveri nimi defineerida kas oma arvuti hosts failis või enda võrgu nimeserveris)
<pre>
sudo openssl req -new -key /etc/apache2/id_rsa.key -out /etc/apache2/sales.firma.ee.csr
</pre>


Küsimustele võid vastata nii nagu allolevas näites
Server peaks nüüd sellele kataloogile ligi lubama AINULT eesti ID-kaardiga.
<pre>
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
'''Veendu, et ligipääsu ei ole lubatud mõne teise virtuaalsaidi kaudu n. http://www.firma.ee/secure/ ja http://firma.ee/www/secure/ !'''
to be sent with your certificate request
A challenge password []:
An optional company name []:
</pre>


''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.''
=Tühistusnimekirjade uuendamine=


''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.''
Tühistusnimekirju tuleb uuendada regulaarselt, kuna neid täiendatakse pidevalt.  


Vastasel juhul võib juhtuda, et kasutaja sertifikaat enam ei kehti, kuid sinu server aksepteerib seda jätkuvalt. 


* Allkirjastame mõlemad request-id kehtivusajaga 1 aasta ja salvestame saadud sertifikaadid vastavate nimedega:
Järgnevalt loome lihtsa skripti ning laseme süsteemil seda regulaarselt ise jooksutada.  
<pre>
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
</pre>


* Huvi korral võid vaadata/kontrollida sertifikaatide sisu. Vastavad käsud on toodud all.
'''Tähelepanu!''' Skript luuakse alloleva näite põhjal '''root''' kasutaja kodukataloogi ning käivitatakse hiljem '''root''' kasutaja õigustes!
<pre>
openssl x509 -in /etc/apache2/www.firma.ee.crt -noout -text
openssl x509 -in /etc/apache2/sales.firma.ee.crt -noout -text
</pre>


===SSL seadistamine===
Keerame ennast '''root''' kasutajaks ning loome skripti:  
* Et lubada apache-l SSL mooduli kasutamine käivita järgmine käsk:
<pre>
<pre>
sudo a2enmod ssl
sudo -i
vi uuenda.sh
</pre>
</pre>


* 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:
Skripti lisa järgmised käsud:
<pre>
<pre>
Listen 444
#!/bin/bash
cd /etc/apache2/crl/
rename -vf 's/\.crl$/\.old/' *.crl
wget http://www.sk.ee/crls/esteid/esteid.crl
wget http://www.sk.ee/crls/esteid/esteid2007.crl
wget http://www.sk.ee/crls/juur/crl.crl
wget http://www.sk.ee/crls/eeccrca/eeccrca.crl
wget http://www.sk.ee/repository/crls/esteid2011.crl
openssl crl -in esteid.crl -out esteid.crl -inform DER
openssl crl -in esteid2007.crl -out esteid2007.crl -inform DER
openssl crl -in crl.crl -out crl.crl -inform DER
openssl crl -in eeccrca.crl -out eeccrca.crl -inform DER
openssl crl -in esteid2011.crl -out esteid2011.crl -inform DER
rm -f *.r?
n="0";for f in `ls *.crl`;do ln -s $f `openssl crl -hash -noout -in $f`.r$n ;let n=n+1;done
/etc/init.d/apache2 restart
</pre>
</pre>


''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:
<pre> 
<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>


Peale skripti tekitamist ära unusta sellele käivitusõigust anda:
<pre>
chmod 700 uuenda.sh
</pre>
</pre>
Sagedamini, kui kord ööpäevas, ei ole mõtet tühistusnimekirju alla laadida, kuna need ei pruugi sagedamini uueneda.


** sales: lisa '''/etc/apache2/sites-enabled/sales''' faili lõppu, peale viimast '''</VirtualHost>''' rida uus sektsioon:
Arvestama peab ka sellega, et peale igat uuendamist taaskäivitatakse veebiserver. Seadete uuesti laadimine (kill -HUP) ei aita!
<pre> 
<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
Taaskäivituse tõttu lähevad kaotsi kõik kasutajate sessioonid.


    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
Loome root kasutajale uue cron-i töö ning paneme selle käivituma igal öösel kell 3:
  SSLCertificateFile /etc/apache2/sales.firma.ee.crt
  SSLCertificateKeyFile /etc/apache2/id_rsa.key
  SSLOptions +StdEnvVars


 
Avame cron-i tööde nimekirja:
</VirtualHost>
 
</pre>
 
''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:
<pre>
sudo service apache2 start
</pre>
või
<pre>
<pre>
sudo /etc/init.d/apache2 start
crontab -e
</pre>
</pre>


* Veebiserveri seiskamine:
Cron-i tööde avamisel võidakse küsida kasutajale sobivat editori:
<pre>
sudo service apache2 stop
</pre>
või
<pre>
<pre>
sudo /etc/init.d/apache2 stop
Select an editor.  To change later, run 'select-editor'.
</pre>
  1. /bin/ed
 
  2. /bin/nano        <---- easiest
* Siinkohal oleks mõistlik uurida, kas veebiserver peale serveri (re)starti automaatselt käivitub:
  3. /usr/bin/vim.tiny


** Üsna lihtne on seda teha '''sysvconfig''' utiliidi abil. Kui sul seda ei ole, siis paigalda see apti abil:
Choose 1-3 [2]:
<pre>
sudo apt-get install sysvconfig
</pre>
</pre>


* 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:
Vali endale sobiv editor ning lisa tööde nimekirja järgmine rida:
<pre>
sudo service apache2 restart
</pre>
või
<pre>
<pre>
sudo /etc/init.d/apache2 restart
0 3 * * * /root/uuenda.sh
</pre>
</pre>


** Saab ka ilma restardita:
Töö käivitamise kella ja päeva saad vajadusel ise mudida, cron-i formaat on järgmine:
<pre>
sudo service apache2 reload
</pre>
või
<pre>
sudo /etc/init.d/apache2 reload
</pre>
 
'' '''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:
<pre>
<pre>
sudo echo "<?php phpinfo(); ?>" > /var/www/phpinfo.php
minut<0-59> tund<0-23> kuupäev<1-31> kuu<1-12> nädalapäev<0-6> käsk
</pre>
</pre>


Tuleb luua index.html fail nii /var/www/www/ kui /var/www/sales/ kataloogi:
Salvesta ära ja kontrolli järgmise käsuga:
<pre>
<pre>
sudo echo "<h1>Firma pealeht</h1>" > /var/www/www/index.html
crontab -l
sudo echo "<h1>Myygiosakond</h1>" > /var/www/sales/index.html
</pre>
</pre>


*Kontrollimiseks mine veebilehitsejaga järgmistele aadressidele:
=Sertifikaatide info edasine kasutus=
kui tahta, et server sertifikaatide andmed muutujatesse kannaks (et need oleks skriptides kasutatavad), võiks lisada .htaccess faili midagi sellist:
<pre>
<pre>
links http://firma.ee/phpinfo.php
<Files ~ "\.(cgi|shtml|php)$">
links http://www.firma.ee
SSLOptions +StdEnvVars +ExportCertData
links https://www.firma.ee
</Files>
links http://sales.firma.ee
links https://sales.firma.ee:444/
links http://www.firma.ee/phpmyadmin/
</pre>
</pre>
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=
=Varundus ja taastamine=


Varundamiseks kopeeri allolevates kataloogides asuvad failid alternatiivsele andmekandjale.  
Varundamiseks kopeeri allolevates kataloogides asuvad failid alternatiivsele andmekandjale.  
Taastamiseks toimi vastupidiselt.


Failiõiguste säilitamiseks ja andmete tihendamiseks kasuta '''tar''' käsku.
Failiõiguste säilitamiseks ja andmete tihendamiseks kasuta '''tar''' käsku.


==Andmete asukohad==
==Andmete asukohad==
Veebide sisu: /var/www  
Veebilehekülje failid: /var/www/www/secure
Veebi sales.firma sisu: /var/www/sales
 
Apache2 konfiguratsioon: /etc/apache2
Apache2 konfiguratsioon: /etc/apache2
Veebiserveri logifailid: /var/log/apache2
Veebiserveri logifailid: /var/log/apache2


==Varundamise ja taastamise näited==
==Varundamise ja taastamise näited==
Varundame kõik veebid juurkataloogis asuvasse faili veebid.tar.gz
Varundame secure kataloogi sisu juurkataloogis asuvasse faili secure.tar.gz
<pre>
<pre>
sudo tar -cvvf /veebid.tar.gz /var/www/*
sudo tar -cvzf /secure.tar.gz /var/www/www/secure/*
</pre>
</pre>
Taastame kõik veebid juurkataloogis olevast failist veebid.tar.gz endisesse asukohta:
Taastame secure kataloogi sisu juurkataloogis olevast failist secure.tar.gz endisesse asukohta:
<pre>
<pre>
sudo tar -xvvf /veebid.tar.gz
sudo tar -xvzf /secure.tar.gz
</pre>
</pre>


=Mis saab edasi?=
=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
* Kui sinu veebirakendus ei tohi mitte mingil juhul tühistatud sertifikaatidega autentijaid ligi lubada, siis seadista [http://id.ee/?id=10821 Sertifikaadi kehtivuse kontroll OCSP-ga]
* Tekita ümbersuunamine, kui sa soovid näiteks kõik http kasutajad automaatselt https-i peale ümber suunata.
* Loe ka http://www.arvutikaitse.ee/?p=2772
* Seadista veebiserveri logide roteerumine ja arhiveerimine
 
* Installi mingi vahend, mis genereeriks apache logide põhjal veebilehtede kasutamis-statistikat n webalizer.
=Chromiumile autentimine=
* Seadista [[ID kaardiga autentimine Apache2 veebiserveriga]]
 
<pre>
sudo apt-get install libnss3-tools
modutil  -dbdir sql:$HOME/.pki/nssdb -delete opensc-pkcs11
modutil  -dbdir sql:$HOME/.pki/nssdb -add opensc-pkcs11 -libfile /usr/lib/onepin-opensc-pkcs11.so -mechanisms FRIENDLY
</pre>
=Juhendist=
 
Juhendi koostasid:
 
* Andres Pelešev
* Argo Ellisson


Versioonide ajalugu:
{| class="wikitable" border="1"
|-
!  Versioon
!  Kuupäev
!  Muudatused
|-
|  1.0
|  16:31, 26 December 2009 (EET)
|  Algne versioon
|-
|  1.1
|  17:17, 29 December 2009 (EET)
|  Lisatud secure kataloogile http kaudu ligipääsu keelamine
|-
|  1.2
|  [[User:Apelesev|Apelesev]] 04:40, 17 January 2010 (EET)
|  Eemaldatud üleliigsed sudo käsud
|-
|  1.3
|  [[User:Kkalder|Kkalder]] 13:34, 11 September 2011 (EET)
|  Sertifikaatide asukoht on muutnud ja sertifikaate on juurde tulnud
|}


[[Category:IT infrastruktuuri teenused]]
[[Category:IT infrastruktuuri teenused]]

Latest revision as of 12:17, 7 March 2012

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 kuhu laseme kasutaja ligi ainult ID-kaardiga edukalt autentides ning ainult SSL protokolli kasutades.

Üldinformatsioon

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. Tõenäoliselt sobib see juhend kasutamiseks ka eelnimetatud tarkvara paljude vanemate ja uuemate versioonidega.

Sertifikaatide kehtivuse kontroll ei toimu online OCSP (Online Certificate Status Protocol) 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://sk.ee/upload/files/JUUR-SK.PEM.cer
sudo wget http://sk.ee/upload/files/EECCRCA.pem.cer
sudo wget http://sk.ee/upload/files/ESTEID-SK.PEM.cer
sudo wget http://sk.ee/upload/files/ESTEID-SK%202007.PEM.cer
sudo wget http://sk.ee/upload/files/ESTEID-SK%202011.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/juur/crl.crl
sudo wget http://www.sk.ee/crls/esteid/esteid2007.crl
sudo wget http://www.sk.ee/crls/eeccrca/eeccrca.crl
sudo wget http://www.sk.ee/repository/crls/esteid2011.crl

Seadistamine

ID kaardi juursertifikaatide seadistamine

Pane kõik 3 juursertifikaati kokku ühte faili, et veebiserveril oleks lihtsam neid lugeda:

cd /etc/apache2
sudo cat JUUR-SK.PEM.cer EECCRCA.pem.cer ESTEID-SK.PEM.cer ESTEID-SK\ 2007.PEM.cer ESTEID-SK\ 2011.pem.cer > juur.crt

Sertifikaatide tühistusnimekirjade seadistamine

Kuna allalaetavad tühistusnimekirjad on apache jaoks loetamatul kujul, siis on vaja need konverteerida PEM formaati:

sudo -i
cd /etc/apache2/crl
openssl crl -in esteid.crl -out esteid.crl -inform DER
openssl crl -in esteid2007.crl -out esteid2007.crl -inform DER
openssl crl -in crl.crl -out crl.crl -inform DER
openssl crl -in eeccrca.crl -out eeccrca.crl -inform DER
openssl crl -in esteid2011.crl -out esteid2011.crl -inform DER

Apache dokumentatsioonis nõutakse ka räsi-linkide loomist. Genereerime need käsuga:

cd /etc/apache2/crl
rm *.r?
n="0";for f in `ls *.crl`;do ln -s $f `openssl crl -hash -noout -in $f`.r$n ;let n=n+1;done


Kuna tühistusnimekirju on vaja pidevalt uuendada, siis on selle artikli lõpus kirjeldatud ka sobiva skripti tegemine ning käivitamine.

SSL keskkonna seadistamine

Lisa apache konfiguratsioonifaili /etc/apache2/sites-enabled/www , SSL virtuaalsaidi osasse, read:

SSLCACertificateFile  /etc/apache2/juur.crt
SSLCARevocationPath /etc/apache2/crl

Lisa SSL virtuaalsaidi <Directory> sektsioonide juurde järgmine directory sektsioon:

        <Directory /var/www/www/secure>
                Options Indexes FollowSymLinks MultiViews
                AllowOverride AuthConfig Options
                Order allow,deny
                allow from all
        </Directory>

Ülaltoodud sektsioonis määratakse ära kataloog, kuhu sisenedes nõutakse ID kaardiga autentimist. Antud juhul siis /var/www/www/secure Loome selle kataloogi ning nõuame secure kataloogi sisenedes ID-kaarti, luues sinna .htaccess faili:

mkdir /var/www/www/secure
vi /var/www/www/secure/.htaccess

Ja lisame .htaccess faili järgmised read:

SSLVerifyClient require
SSLVerifyDepth 2 

Põhimõtteliselt on nüüd kõik seadistatud AGA kui sul on tõesti kõik nii seadistatud nagu Veebiserveri labor v.2-s nõutud, siis on võimalik /var/www/www/secure kataloogile siiski ligi pääseda kasutades http protokolli ning järgmist URL-i: http://<serverinimi>/www/secure/ . Selle vältimiseks lisa kõikide, väljaarvatud HTTPS (443 port), virtuaalsaitide konfiguratsioonidesse, <VirtualHost> sektsioonidesse, teiste kataloogiõiguste juurde järgmised read:

        <Directory "/var/www/www/secure">
               Order allow,deny
               deny from all
        </Directory>

Arvesta, et ligipääs on vaikimisi lubatud kõikide lubatud (enabled) virtuaalsaitide kaudu. Veebiserveri labor v.2-s seadistati www ja sales ning lisaks on ka vaikimisi sait nimega default. Käi kindlasti kõik konfid üle.

Kõige lõpuks restardime veebiserveri:

/etc/init.d/apache2 restart


Nüüdseks peaks SSL ja ID-kaardi osa olema seadistatud.

Tulemuse kontroll

Loome index.php lehe, mida peaks kuvatama peale edukat autentimist.

Piisab näiteks phpinfo funktsiooni väljundist:

sudo echo "<?php phpinfo(); ?>" > /var/www/www/secure/index.php

Istu nüüd mõne arvuti taha, kus on kiipkaardilugeja ja brauser, millele on ID-kaardi asi selgeks tehtud ning katseta ligipääsu.

Võta ühendust oma serveriga: https://ip_aadress/secure või https://www.firma.ee/secure

(eelnevalt on vaja serveri nimi defineerida kas oma arvuti hosts failis või enda võrgu nimeserveris)

Server peaks nüüd sellele kataloogile ligi lubama AINULT eesti ID-kaardiga.

Veendu, et ligipääsu ei ole lubatud mõne teise virtuaalsaidi kaudu n. http://www.firma.ee/secure/ ja http://firma.ee/www/secure/ !

Tühistusnimekirjade uuendamine

Tühistusnimekirju tuleb uuendada regulaarselt, kuna neid täiendatakse pidevalt.

Vastasel juhul võib juhtuda, et kasutaja sertifikaat enam ei kehti, kuid sinu server aksepteerib seda jätkuvalt.

Järgnevalt loome lihtsa skripti ning laseme süsteemil seda regulaarselt ise jooksutada.

Tähelepanu! Skript luuakse alloleva näite põhjal root kasutaja kodukataloogi ning käivitatakse hiljem root kasutaja õigustes!

Keerame ennast root kasutajaks ning loome skripti:

sudo -i
vi uuenda.sh

Skripti lisa järgmised käsud:

#!/bin/bash
cd /etc/apache2/crl/
rename -vf 's/\.crl$/\.old/' *.crl
wget http://www.sk.ee/crls/esteid/esteid.crl
wget http://www.sk.ee/crls/esteid/esteid2007.crl
wget http://www.sk.ee/crls/juur/crl.crl
wget http://www.sk.ee/crls/eeccrca/eeccrca.crl
wget http://www.sk.ee/repository/crls/esteid2011.crl
openssl crl -in esteid.crl -out esteid.crl -inform DER
openssl crl -in esteid2007.crl -out esteid2007.crl -inform DER
openssl crl -in crl.crl -out crl.crl -inform DER
openssl crl -in eeccrca.crl -out eeccrca.crl -inform DER
openssl crl -in esteid2011.crl -out esteid2011.crl -inform DER
rm -f *.r?
n="0";for f in `ls *.crl`;do ln -s $f `openssl crl -hash -noout -in $f`.r$n ;let n=n+1;done
/etc/init.d/apache2 restart


Peale skripti tekitamist ära unusta sellele käivitusõigust anda:

chmod 700 uuenda.sh

Sagedamini, kui kord ööpäevas, ei ole mõtet tühistusnimekirju alla laadida, kuna need ei pruugi sagedamini uueneda.

Arvestama peab ka sellega, et peale igat uuendamist taaskäivitatakse veebiserver. Seadete uuesti laadimine (kill -HUP) ei aita!

Taaskäivituse tõttu lähevad kaotsi kõik kasutajate sessioonid.


Loome root kasutajale uue cron-i töö ning paneme selle käivituma igal öösel kell 3:

Avame cron-i tööde nimekirja:

crontab -e

Cron-i tööde avamisel võidakse küsida kasutajale sobivat editori:

Select an editor.  To change later, run 'select-editor'.
  1. /bin/ed
  2. /bin/nano        <---- easiest
  3. /usr/bin/vim.tiny

Choose 1-3 [2]:


Vali endale sobiv editor ning lisa tööde nimekirja järgmine rida:

0 3 * * * /root/uuenda.sh

Töö käivitamise kella ja päeva saad vajadusel ise mudida, cron-i formaat on järgmine:

minut<0-59> tund<0-23> kuupäev<1-31> kuu<1-12> nädalapäev<0-6> käsk

Salvesta ära ja kontrolli järgmise käsuga:

crontab -l

Sertifikaatide info edasine kasutus

kui tahta, et server sertifikaatide andmed muutujatesse kannaks (et need oleks skriptides kasutatavad), võiks lisada .htaccess faili midagi sellist:

<Files ~ "\.(cgi|shtml|php)$">
 SSLOptions +StdEnvVars +ExportCertData
</Files>

Varundus ja taastamine

Varundamiseks kopeeri allolevates kataloogides asuvad failid alternatiivsele andmekandjale.

Taastamiseks toimi vastupidiselt.

Failiõiguste säilitamiseks ja andmete tihendamiseks kasuta tar käsku.

Andmete asukohad

Veebilehekülje failid: /var/www/www/secure

Apache2 konfiguratsioon: /etc/apache2

Veebiserveri logifailid: /var/log/apache2


Varundamise ja taastamise näited

Varundame secure kataloogi sisu juurkataloogis asuvasse faili secure.tar.gz

sudo tar -cvzf /secure.tar.gz /var/www/www/secure/*

Taastame secure kataloogi sisu juurkataloogis olevast failist secure.tar.gz endisesse asukohta:

sudo tar -xvzf /secure.tar.gz

Mis saab edasi?

Chromiumile autentimine

sudo apt-get install libnss3-tools 
modutil  -dbdir sql:$HOME/.pki/nssdb -delete opensc-pkcs11 
modutil  -dbdir sql:$HOME/.pki/nssdb -add opensc-pkcs11 -libfile /usr/lib/onepin-opensc-pkcs11.so -mechanisms FRIENDLY

Juhendist

Juhendi koostasid:

  • Andres Pelešev
  • Argo Ellisson

Versioonide ajalugu:

Versioon Kuupäev Muudatused
1.0 16:31, 26 December 2009 (EET) Algne versioon
1.1 17:17, 29 December 2009 (EET) Lisatud secure kataloogile http kaudu ligipääsu keelamine
1.2 Apelesev 04:40, 17 January 2010 (EET) Eemaldatud üleliigsed sudo käsud
1.3 Kkalder 13:34, 11 September 2011 (EET) Sertifikaatide asukoht on muutnud ja sertifikaate on juurde tulnud