Gestiunea Serviciilor de Rețea

Laborator 11 - Servicii web

1. Configurări Apache de bază (2p)

  • Comenzi/concepte/fișiere
    • apachectl
    • /etc/apache2/ports.conf
    • a2enmod

Tutorial

  • Pe mașina fizică instalați serverul apache2 și documentația pentru acesta
    root@mjolnir:~# apt-get update; apt-get install apache2 apache2-doc
    [...]
  • Odată cu serverul apache este instalat și un site implicit. Verificați funcționarea acestui site accesând adresa http://localhost într-un browser.
  • Configurările site-ului default al apache se găsesc în fișierul /etc/apache2/sites-available/default. Analizați conținutul acestui fișier.
  • Directorul unde se găsesc fișierele unui site este specificat prin directiva DocumentRoot în cadrul fișierului de configurare al site-ului. Gasiți aceasta directivă pentru site-ul default al apache.
  • Modificați conținutul fișierului /var/www/index.html astfel încât la accesarea site-ului default să fie afișat mesajul “GSR Rulez. Gen.”.
  • Verificați aplicarea modificărilor anterioare accesând adresa http://localhost într-un browser.

Exerciții

  • [01]. Instalați severul web apache2, dacă nu este deja instalat în urma tutorialului.
Rezolvare
root@mjolnir:~# apt-get update; apt-get install apache2
[...]
  • [02]. Inspectând conexiunile TCP active, aflați portul pe care ascultă serverul apache
Rezolvare
root@mjolnir:~# netstat -lntp | grep apache
tcp6       0      0 :::80                   :::*                    LISTEN      4330/apache2 
  • [03]. modificați interfețele pe care ascultă serverul apache astfel încât:
  • [03].a. să asculte pe toate interfețele pe portul 80
  • [03].b. să asculte pe interfața eth0 (172.16.X.Y) pe portul 8080, unde 172.16.X.Y este adresa IP a interfeței eth0
  • [03].c. nu uitați să modificați și directivele NameVirtualHost în mod corespunzător.
  • [03].d. Hint: /etc/apache2/ports.conf
  • [03].e. Testați modificările verificând conexiunile TCP active
Rezolvare
root@mjolnir:~# cat /etc/apache2/ports.conf | grep -v '^#' | grep -v '^$' | head -n 4
NameVirtualHost *:80
Listen 80
NameVirtualHost 172.16.7.133:8080
Listen 172.16.7.133:8080

root@mjolnir:~# /etc/init.d/apache2 restart
Restarting web server: apache2[Fri Jan 27 18:12:08 2012] [warn] NameVirtualHost 172.16.7.133:8080 has no VirtualHosts
 ... waiting [Fri Jan 27 18:12:09 2012] [warn] NameVirtualHost 172.16.7.133:8080 has no VirtualHosts

root@mjolnir:~# netstat -lntp | grep apache
tcp        0      0 172.16.7.133:8080       0.0.0.0:*               LISTEN      4569/apache2    
tcp6       0      0 :::80                   :::*                    LISTEN      4569/apache2 
  • [04]. Activați modulul apache dir (Hint: a2enmod)
Rezolvare
root@mjolnir:~# a2enmod dir
Module dir already enabled
  • [05]. În directorul /var/www/ creați un fișier numit main.html care să conțină textul “A Patchy Web Server”.
Rezolvare
root@mjolnir:~# echo "A Patchy Web Server" > /var/www/main.html
  • [06]. Configurați modulul dir în așa fel încât fișierul main.html să aibă precedență în fața lui index.html.
  • [06].a. Hint: /etc/apache2/mods-enabled/dir.conf
  • [06].b. Testați accesând adresa http://localhost într-un browser.
Rezolvare
root@mjolnir:~# cat /etc/apache2/mods-available/dir.conf
<IfModule mod_dir.c>

          DirectoryIndex main.html index.html index.cgi index.pl index.php index.xhtml index.htm

</IfModule>

root@mjolnir:~# /etc/init.d/apache2 restart
Restarting web server: apache2[Fri Jan 27 18:14:43 2012] [warn] NameVirtualHost 172.16.7.133:8080 has no VirtualHosts
 ... waiting [Fri Jan 27 18:14:44 2012] [warn] NameVirtualHost 172.16.7.133:8080 has no VirtualHosts
  • [07]. Adăugați utilizatorul alice. Realizați configurările necesare pentru a putea accesa, la adresa http://localhost/~alice, fișierele html private ale lui alice
  • [07].a. Hint: /home/alice/public_html
  • [07].b. Hint: modulul userdir
Rezolvare
root@mjolnir:~# groupadd alice

root@mjolnir:~# useradd -d /home/alice -m -g alice -s /bin/bash alice

root@mjolnir:~# echo "alice:student" | chpasswd

root@mjolnir:~# su - alice

alice@mjolnir:~$ ls -l
total 0

alice@mjolnir:~$ pwd
/home/alice

alice@mjolnir:~$ mkdir public_html

alice@mjolnir:~$ cd public_html/

alice@mjolnir:~/public_html$ echo "Hello" > index.html

alice@mjolnir:~/public_html$ logout

root@mjolnir:~# a2enmod userdir
Enabling module userdir.
To activate the new configuration, you need to run:
  service apache2 restart

root@mjolnir:~# /etc/init.d/apache2 restart
Restarting web server: apache2[Fri Jan 27 18:15:35 2012] [warn] NameVirtualHost 172.16.7.133:8080 has no VirtualHosts
 ... waiting [Fri Jan 27 18:15:36 2012] [warn] NameVirtualHost 172.16.7.133:8080 has no VirtualHosts
.

2. Configurări pentru un site (1.5p)

  • Comenzi/concepte/fișiere
    • N/A

Tutorial

Exerciții

  • [01]. Adăugați un alias în sistem astfel încât gsr.ro și www.gsr.ro să fie mapate pe 127.0.0.1
Rezolvare
root@mjolnir:~# cat /etc/hosts | head -n 3
127.0.0.1	localhost
127.0.1.1	mjolnir.labs.cs.pub.ro	mjolnir
127.0.0.1	gsr.ro www.gsr.ro
  • [02]. Adăugați un site în apache pentru domeniul gsr.ro
  • [02].a. Virtual host-ul să fie mapat pe portul 80
  • [02].b. Fișierul de configurare al site-ului trebuie să se numească gsr.ro
  • [02].c. ServerName-ul este gsr.ro
  • [02].d. ServerAlias-ul este www.gsr.ro
  • [02].e. Adresa de email a administratorului este admin@gsr.ro
  • [02].f. Fișierele corespunzătoare site-ului se găsesc în directorul /var/www/gsr.ro. Creați un fișier index.html corespunzător.
  • [02].g. Fișierele de log sunt /var/log/apache2/gsr.log și /var/log/apache2/gsr.err.log
  • [02].h. Hint: puteți pleca de la configurația site-ului default
Rezolvare
root@mjolnir:~# mkdir /var/www/gsr.ro

root@mjolnir:~# echo "GSR is live" > /var/www/gsr.ro/index.html

root@mjolnir:~# cat /etc/apache2/sites-available/gsr.ro
<VirtualHost *:80>
        ServerAdmin admin@gsr.ro
        ServerName gsr.ro
        ServerAlias www.gsr.ro

        DocumentRoot /var/www/gsr.ro
        <Directory />
                Options FollowSymLinks
                AllowOverride None
        </Directory>
        <Directory /var/www/gsr.ro/>
                Options Indexes FollowSymLinks MultiViews
                AllowOverride None
                Order allow,deny
                allow from all
        </Directory>

        ScriptAlias /cgi-bin/ /usr/lib/cgi-bin/

        ErrorLog /var/log/apache2/gsr.err.log

        LogLevel warn

        CustomLog /var/log/apache2/gsr.log combined

    Alias www.gsr.ro "/var/www/gsr.ro"

</VirtualHost>
  • [03]. Activați site-ul gsr.ro (Hint: a2ensite)
Rezolvare
root@mjolnir:~# a2ensite gsr.ro
Enabling site gsr.ro.
To activate the new configuration, you need to run:
  service apache2 reload

root@mjolnir:~# /etc/init.d/apache2 restart
Restarting web server: apache2[Fri Jan 27 18:29:34 2012] [warn] NameVirtualHost 172.16.7.133:8080 has no VirtualHosts
 ... waiting [Fri Jan 27 18:29:35 2012] [warn] NameVirtualHost 172.16.7.133:8080 has no VirtualHosts
.
  • [04]. Testați accesând adresa http://gsr.ro într-un browser.
Rezolvare
http://gsr.ro

GSR is live
  • [05]. Configurați site-ul gsr.ro astfel încât la accesarea adresei http://gsr.ro/config să fie afișat conținutul directorului /var/www/gsr.ro/configfiles
  • [05].a. Va trebui să creați directorul /var/www/gsr.ro/configfiles și în acesta să creați fișierele file1, file2 și file3
  • [05].b. Hint: folosiți ca model alias-ul doc → /usr/share/doc din fișierul de configurare al site-ului default al apache
  • [05].c. Testați accesând adresa http://gsr.ro/config într-un browser.
Rezolvare
root@mjolnir:~# mkdir /var/www/gsr.ro/configfiles

root@mjolnir:~# cd $_

root@mjolnir:/var/www/gsr.ro/configfiles# touch file1 file2 file3

root@mjolnir:/var/www/gsr.ro/configfiles# ls -l
total 0
-rw-r--r-- 1 root root 0 Jan 27 18:30 file1
-rw-r--r-- 1 root root 0 Jan 27 18:30 file2
-rw-r--r-- 1 root root 0 Jan 27 18:30 file3

root@mjolnir:/var/www/gsr.ro/configfiles# cd -
/root

root@mjolnir:~# cat /etc/apache2/sites-available/gsr.ro | tail -n 7
    Alias /config "/var/www/gsr.ro/configfiles/"
    <Directory "/var/www/gsr.ro/configfiles/">
        Options Indexes MultiViews FollowSymLinks
        AllowOverride None
    </Directory>

</VirtualHost>

root@mjolnir:~# /etc/init.d/apache2 restart
Restarting web server: apache2[Fri Jan 27 18:32:57 2012] [warn] NameVirtualHost 172.16.7.133:8080 has no VirtualHosts
 ... waiting [Fri Jan 27 18:32:58 2012] [warn] NameVirtualHost 172.16.7.133:8080 has no VirtualHosts
.
Rezolvare
root@mjolnir:~# mkdir /var/www/gsr.ro/redirect

root@mjolnir:~# mkdir /var/www/gsr.ro/labs

root@mjolnir:~# echo "redirect" > /var/www/gsr.ro/redirect/index.html

root@mjolnir:~# echo "labs" > /var/www/gsr.ro/labs/index.html

root@mjolnir:~# cat /etc/apache2/sites-available/gsr.ro | tail -n 3
    redirect /redirect http://gsr.ro/labs

</VirtualHost>

root@mjolnir:~# /etc/init.d/apache2 restart
Restarting web server: apache2[Fri Jan 27 18:41:54 2012] [warn] NameVirtualHost 172.16.7.133:8080 has no VirtualHosts
 ... waiting [Fri Jan 27 18:41:55 2012] [warn] NameVirtualHost 172.16.7.133:8080 has no VirtualHosts
.

3. Controlul accesului, .htaccess (1p)

  • Comenzi/concepte/fișiere
    • N/A

Tutorial

Exerciții

  • [01]. Configurați site-ul gsr.ro astfel încât la accesarea link-ului http://gsr.ro/labs să fie cerut un nume de utilizator și o parolă. Orice alt link de pe gsr.ro trebuie să fie accesibil public.
  • [01].a. Realizați configurările de apache în fișierul de configurare al site-ului gsr.ro
  • [01].b. Numele de utilizator valid va trebui sa fie alice, cu parola p4ss
  • [01].c. Hint: curs, slide 35
  • [01].c. Hint: man htpasswd
Rezolvare
root@mjolnir:~# cat /etc/apache2/sites-available/gsr.ro | tail -n 9
    <Directory "/var/www/gsr.ro/labs">
        Options Indexes MultiViews FollowSymLinks
        AuthType basic
        AuthName "restricted"
        AuthUserFile /usr/local/my.htpasswd
        Require valid-user
    </Directory>

</VirtualHost>

root@mjolnir:~# htpasswd -c /usr/local/my.htpasswd alice
New password: 
Re-type new password: 
Adding password for user alice

root@mjolnir:~# cat /usr/local/my.htpasswd
alice:$apr1$PQeI8sm3$YPxnNNl.YAD0tOEm18T3k0

root@mjolnir:~# /etc/init.d/apache2 restart
Restarting web server: apache2[Fri Jan 27 18:44:15 2012] [warn] NameVirtualHost 172.16.7.133:8080 has no VirtualHosts
 ... waiting .[Fri Jan 27 18:44:17 2012] [warn] NameVirtualHost 172.16.7.133:8080 has no VirtualHosts
.
Rezolvare
root@mjolnir:~# cat /etc/apache2/sites-available/gsr.ro | tail -n 22 | head -n 10
    Alias /config "/var/www/gsr.ro/configfiles/"
    <Directory "/var/www/gsr.ro/configfiles/">
        Options Indexes MultiViews FollowSymLinks
        AllowOverride AuthConfig
        AuthType basic
        AuthName "restricted"
        AuthUserFile /usr/local/my.htpasswd
        Require valid-user
    </Directory>

root@mjolnir:~# htpasswd -c /usr/local/my.htpasswd bob
New password: 
Re-type new password: 
Adding password for user bob

root@mjolnir:~# /etc/init.d/apache2 restart
Restarting web server: apache2[Fri Jan 27 19:05:37 2012] [warn] NameVirtualHost 172.16.7.133:8080 has no VirtualHosts
 ... waiting [Fri Jan 27 19:05:38 2012] [warn] NameVirtualHost 172.16.7.133:8080 has no VirtualHosts
.

root@mjolnir:~# cat /var/www/gsr.ro/configfiles/.htaccess
AuthName "restricted"
AuthType Basic
AuthUserFile /usr/local/my.htpasswd
require valid-user

4. VirtualHost bazate pe IP (2p)

  • Comenzi/concepte/fișiere
    • N/A

Tutorial

Exerciții

  • [01]. Pe mașina fizică adăugați un alias în sistem astfel încât sric.ro și www.sric.ro să fie mapate pe adresa IP a interfeței vmnet8 – interfața de comunicare cu mașina virtuală)
Rezolvare
root@mjolnir:~# cat /etc/hosts | head -n 4
127.0.0.1	localhost
127.0.1.1	mjolnir.labs.cs.pub.ro	mjolnir
127.0.0.1	gsr.ro www.gsr.ro
192.168.48.1    sric.ro www.sric.ro
  • [02]. Verificați că Apache2 ascultă pe portul 80.
Rezolvare
root@mjolnir:~# netstat -lntp | grep apache
tcp        0      0 172.16.7.133:8080       0.0.0.0:*               LISTEN      6041/apache2    
tcp6       0      0 :::80                   :::*                    LISTEN      6041/apache2 
  • [03]. Adăugați un site în apache pentru domeniul sric.ro
  • [03].a. Virtual host-ul să fie mapat pe portul 80
  • [03].b. fișierul de configurare al site-ului trebuie să se numească sric.ro
  • [03].c. ServerName-ul este sric.ro
  • [03].d. ServerAlias-ul este www.sric.ro
  • [03].e. Adresa de email a administratorului este admin@sric.ro
  • [03].f. Fișierele corespunzătoare site-ului se găsesc în directorul /var/www/sric.ro
  • [03].g. Fișierele de log sunt /var/log/apache2/sric.log și /var/log/apache2/sric.err.log
  • [03].h. Hint: puteți pleca de la configurația site-ului gsr.ro
  • [03].i. Testați funcționarea site-ului accesând într-un browser adresa sric.ro
Rezolvare
root@mjolnir:~# mkdir /var/www/sric.ro

root@mjolnir:~# echo "SRIC is live" >  /var/www/sric.ro/index.html

root@mjolnir:~# cat /etc/apache2/sites-available/sric.ro
<VirtualHost *:80>
        ServerAdmin admin@sric.ro
        ServerName sric.ro
        ServerAlias www.sric.ro

        DocumentRoot /var/www/sric.ro
        <Directory />
                Options FollowSymLinks
                AllowOverride None
        </Directory>
        <Directory /var/www/sric.ro/>
                Options Indexes FollowSymLinks MultiViews
                AllowOverride None
                Order allow,deny
                allow from all
        </Directory>

        ErrorLog /var/log/apache2/sric.err.log
        LogLevel warn
        CustomLog /var/log/apache2/sric.log combined

    Alias www.sric.ro "/var/www/sric.ro"
</VirtualHost>

root@mjolnir:~# a2ensite sric.ro
Enabling site sric.ro.
To activate the new configuration, you need to run:
  service apache2 reload

root@mjolnir:~# /etc/init.d/apache2 restart
Restarting web server: apache2[Fri Jan 27 19:21:58 2012] [warn] NameVirtualHost 172.16.7.133:8080 has no VirtualHosts
 ... waiting [Fri Jan 27 19:21:59 2012] [warn] NameVirtualHost 172.16.7.133:8080 has no VirtualHosts
.
  • [04]. Configurați site-ul sric.ro pentru a i se permite accesul numai de la adresa IP a mașinii virtuale.
  • [04].a. Porniți mașina virtuală
  • [04].b. În mașina virtuală realizați un alias astfel încât sric.ro și www.sric.ro să fie mapate pe IP-ul interfeței vmnet8 de pe mașina fizică (IP din aceeași rețea ca interfața eth0 a mașinii virtuale)
  • [04].c. Realizați restul configurărilor pe mașina fizică
  • [04].f. Nu uitați de directiva Order deny,allow, care specifică ordinea în care sunt interpretate directivele Deny și Allow
  • [04].g. Testați accesând sric.ro de pe mașina fizică și de pe mașina virtuală (elinks)
Rezolvare
root@heimdall:~# cat /etc/hosts | head -n 3
127.0.0.1	localhost
127.0.1.1	heimdall.localdomain	heimdall
192.168.48.1    sric.ro www.sric.ro



root@mjolnir:~# cat /etc/apache2/sites-available/sric.ro 
<VirtualHost *:80>
        ServerAdmin admin@sric.ro
        ServerName sric.ro
        ServerAlias www.sric.ro

        DocumentRoot /var/www/sric.ro
        <Directory />
                Options FollowSymLinks
                AllowOverride None
        </Directory>
        <Directory /var/www/sric.ro/>
                Options Indexes FollowSymLinks MultiViews
                AllowOverride None
                Order deny,allow
                allow from 192.168.48.128
                deny from all
        </Directory>

        ErrorLog /var/log/apache2/sric.err.log
        LogLevel warn
        CustomLog /var/log/apache2/sric.log combined

    Alias www.sric.ro "/var/www/sric.ro"
</VirtualHost>

root@mjolnir:~# /etc/init.d/apache2 restart
Restarting web server: apache2[Fri Jan 27 19:27:55 2012] [warn] NameVirtualHost 172.16.7.133:8080 has no VirtualHosts
 ... waiting [Fri Jan 27 19:27:56 2012] [warn] NameVirtualHost 172.16.7.133:8080 has no VirtualHosts
.



root@heimdall:~# apt-get install elinks
[...]

student@heimdall:~$ elinks sric.ro
[...]
De pe masina fizică, serverul returneaza acum 403 Forbidden la accesarea sric.ro. Mașina virtuală are acces la site.

5. SSL / TLS (2p)

  • Comenzi/concepte/fișiere
    • N/A

Tutorial

Exerciții

  • [01]. Activați modulul SSL pentru Apache2 (Hint: a2enmod)
Rezolvare
root@mjolnir:~# a2enmod ssl
Enabling module ssl.
See /usr/share/doc/apache2.2-common/README.Debian.gz on how to configure SSL and create self-signed certificates.
To activate the new configuration, you need to run:
  service apache2 restart

root@mjolnir:~# /etc/init.d/apache2 restart
Restarting web server: apache2[Fri Jan 27 19:55:02 2012] [warn] NameVirtualHost 172.16.7.133:8080 has no VirtualHosts
 ... waiting [Fri Jan 27 19:55:03 2012] [warn] NameVirtualHost 172.16.7.133:8080 has no VirtualHosts
.
  • [02]. Inspectând conexiunile TCP active, aflați portul pe care funcționează HTTPS.
Rezolvare
root@mjolnir:~# netstat -lntp | grep apache
tcp        0      0 172.16.7.133:8080       0.0.0.0:*               LISTEN      7747/apache2    
tcp6       0      0 :::80                   :::*                    LISTEN      7747/apache2    
tcp6       0      0 :::443                  :::*                    LISTEN      7747/apache2 
  • [03]. Activați site-ul default Apache care are suport pentru SSL.
  • [03].a. Verificați funcționarea acestuia accesând link-ul https://localhost într-un browser.
Rezolvare
root@mjolnir:~# ls /etc/apache2/sites-available/
default  default-ssl  gsr.ro  sric.ro

root@mjolnir:~# a2ensite default-ssl
Enabling site default-ssl.
To activate the new configuration, you need to run:
  service apache2 reload
  • [04]. Adăugați aliasuri în sistem astfel încât zangief.net, www.zangief.net, dalshim.net și www.dalshim.net să fie mapate peste 127.0.0.1.
Rezolvare
root@mjolnir:~# cat /etc/hosts | head -n 8
127.0.0.1	localhost
127.0.1.1	mjolnir.labs.cs.pub.ro	mjolnir
127.0.0.1	gsr.ro www.gsr.ro
192.168.48.1    sric.ro www.sric.ro
127.0.0.1	zangief.net
127.0.0.1	www.zangief.net
127.0.0.1	dalshim.net
127.0.0.1	www.dalshim.net
  • [05]. Creați în /etc/apache2/ssl-certs/, un certificat self-signed pentru domeniul zangief.net. Folosiți o cheie pe 2048 de biți.
  • [05].a. Hint: cheie, CSR, certificat
  • [05].b. Urmăriți slide-ul 22 din cursul 6.
Rezolvare
root@mjolnir:~# openssl genrsa -out zangief.net.key 2048
Generating RSA private key, 2048 bit long modulus
................+++
..................................+++
e is 65537 (0x10001)

root@mjolnir:~# openssl req -new -key zangief.net.key -out zangief.net.csr
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]:RO
State or Province Name (full name) [Some-State]:Bucharest
Locality Name (eg, city) []:Bucharest
Organization Name (eg, company) [Internet Widgits Pty Ltd]:UPB
Organizational Unit Name (eg, section) []:CS
Common Name (eg, YOUR name) []:GSR
Email Address []:contact@gsr.cs.pub.ro

Please enter the following 'extra' attributes
to be sent with your certificate request
A challenge password []:student
An optional company name []:

root@mjolnir:~# openssl x509 -req -days 365 -in zangief.net.csr -signkey zangief.net.key -out zangief.net.crt
Signature ok
subject=/C=RO/ST=Bucharest/L=Bucharest/O=UPB/OU=CS/CN=GSR/emailAddress=contact@gsr.cs.pub.ro
Getting Private key

root@mjolnir:~# ls -l
total 20
-rw-r--r-- 1 root root   34 Oct 12 21:53 bibi
-rw-r--r-- 1 root root  150 Oct 12 21:53 gogu
-rw-r--r-- 1 root root 1281 Jan 27 20:16 zangief.net.crt
-rw-r--r-- 1 root root 1078 Jan 27 20:15 zangief.net.csr
-rw-r--r-- 1 root root 1679 Jan 27 20:15 zangief.net.key

root@mjolnir:~# mkdir /etc/apache2/ssl-certs

root@mjolnir:~# cp zangief.net.* /etc/apache2/ssl-certs/
  • [06]. Creați în /etc/apache2/ssl-certs/, un certificat self-signed pentru domeniul dalshim.net. Folosiți o cheie pe 2048 de biți.
  • [06].a. Hint: cheie, CSR, certificat
  • [06].b. Urmăriți slide-ul 22 din cursul 6.
Rezolvare
root@mjolnir:~# openssl genrsa -out dalshim.net.key 2048
Generating RSA private key, 2048 bit long modulus
......................................................................................................................+++
............................................+++
e is 65537 (0x10001)

root@mjolnir:~# openssl req -new -key dalshim.net.key -out dalshim.net.csr
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]:RO
State or Province Name (full name) [Some-State]:Bucharest
Locality Name (eg, city) []:Bucharest
Organization Name (eg, company) [Internet Widgits Pty Ltd]:UPB
Organizational Unit Name (eg, section) []:CS
Common Name (eg, YOUR name) []:GSR
Email Address []:contact@gsr.cs.pub.ro

Please enter the following 'extra' attributes
to be sent with your certificate request
A challenge password []:student
An optional company name []:

root@mjolnir:~# openssl x509 -req -days 365 -in dalshim.net.csr -signkey dalshim.net.key -out dalshim.net.crt
Signature ok
subject=/C=RO/ST=Bucharest/L=Bucharest/O=UPB/OU=CS/CN=GSR/emailAddress=contact@gsr.cs.pub.ro
Getting Private key

root@mjolnir:~# cp dalshim.net.* /etc/apache2/ssl-certs/
  • [07]. Activați suportul de SNI din Apache.
  • [07].a. Versiunea de Apache2 disponibilă în Debian Testing suportă SNI, astfel încât fiecare site HTTPS va putea folosi certificatul propriu.
  • [07].b Verificați comentariile din /etc/apache2/ports.conf.
Rezolvare
root@mjolnir:~# cat /etc/apache2/ports.conf | grep -v '^.*#' | grep -v '^$' | head -n 8 | tail -n 4
<IfModule mod_ssl.c>
    NameVirtualHost *:443
    Listen 443
</IfModule>

root@mjolnir:~# cat /etc/apache2/sites-available/default-ssl | grep -v '^#' | head -n 3
<IfModule mod_ssl.c>
<VirtualHost *:443>
	ServerAdmin webmaster@localhost

root@mjolnir:~# /etc/init.d/apache2 restartRestarting web server: apache2[Fri Jan 27 20:53:57 2012] [warn] NameVirtualHost 172.16.7.133:8080 has no VirtualHosts
 ... waiting [Fri Jan 27 20:53:58 2012] [warn] NameVirtualHost 172.16.7.133:8080 has no VirtualHosts
.
  • [09]. Dezactivați site-urile implicite (default și default-ssl).
Rezolvare
root@mjolnir:~# a2dissite default
Site default disabled.
To activate the new configuration, you need to run:
  service apache2 reload

root@mjolnir:~# a2dissite default-ssl
Site default-ssl disabled.
To activate the new configuration, you need to run:
  service apache2 reload

root@mjolnir:~# /etc/init.d/apache2 restartRestarting web server: apache2[Fri Jan 27 21:02:04 2012] [warn] NameVirtualHost 172.16.7.133:8080 has no VirtualHosts
[Fri Jan 27 21:02:04 2012] [warn] NameVirtualHost *:443 has no VirtualHosts
[Fri Jan 27 21:02:04 2012] [warn] NameVirtualHost *:80 has no VirtualHosts
 ... waiting [Fri Jan 27 21:02:05 2012] [warn] NameVirtualHost 172.16.7.133:8080 has no VirtualHosts
[Fri Jan 27 21:02:05 2012] [warn] NameVirtualHost *:443 has no VirtualHosts
[Fri Jan 27 21:02:05 2012] [warn] NameVirtualHost *:80 has no VirtualHosts
.
  • [10]. Adăugați un site în Apache pentru domeniul zangief.net peste HTTP și unul pentru HTTPS.
  • [10].a. Creați, în sites-available/, fișierele zangief.net și zangief.net-ssl, ca fișiere de configurare, respectiv, pentru site-ul HTTP și cel HTTPS. Porniți de la copii ale fișierelor aferente site-urilor implicite (default și default-ssl).
  • [10].b. DocumentRoot-ul este /var/www/zangief.net/.
  • [10].c. Pentru site-ul peste HTTPS, folosiți certificatul și cheia generate anterior. Pentru SSLCertificateFile folosiți fișierul CRT.
  • [10].d. Testați accesând link-urile http://zangief.net, respectiv https://zangief.net. ATENȚIE Folosiți IceWeasel deoarece oferă suport pentru SNI.
  • [10].e. Inspectați certificatul site-ului peste HTTPS în cadrul IceWeasel.
  • [10].e.1. Apăsați pe zona albastră din stânga barei de adrese
  • [10].e.2. Apăsați pe More Information
  • [10].e.3. Apăsați pe View Certificate
Rezolvare
root@mjolnir:~# mkdir /var/www/zangief.net

root@mjolnir:~# echo "zangief website" > /var/www/zangief.net/index.html

root@mjolnir:~# cd /etc/apache2/sites-available/

root@mjolnir:/etc/apache2/sites-available# cat zangief.net | grep -v '^.*#' | grep -v '^$'
<VirtualHost *:80>
	ServerAdmin webmaster@localhost
        ServerName zangief.net
        ServerAlias www.zangief.net
	DocumentRoot /var/www/zangief.net
	<Directory />
		Options FollowSymLinks
		AllowOverride None
	</Directory>
	<Directory /var/www/zangief.net/>
		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 ${APACHE_LOG_DIR}/error.log
	LogLevel warn
	CustomLog ${APACHE_LOG_DIR}/access.log combined
</VirtualHost>


root@mjolnir:/etc/apache2/sites-available# cat zangief.net-ssl | grep -v '^.*#' | grep -v '^$'
<IfModule mod_ssl.c>
<VirtualHost _default_:443>
	ServerAdmin webmaster@localhost
        ServerName zangief.net
        ServerAlias www.zangief.net
	DocumentRoot /var/www/zangief.net
	<Directory />
		Options FollowSymLinks
		AllowOverride None
	</Directory>
	<Directory /var/www/zangief.net/>
		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 ${APACHE_LOG_DIR}/error.log
	LogLevel warn
	CustomLog ${APACHE_LOG_DIR}/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/ssl-certs/zangief.net.crt
	SSLCertificateKeyFile /etc/apache2/ssl-certs/zangief.net.key
	<FilesMatch "\.(cgi|shtml|phtml|php)$">
		SSLOptions +StdEnvVars
	</FilesMatch>
	<Directory /usr/lib/cgi-bin>
		SSLOptions +StdEnvVars
	</Directory>
	BrowserMatch "MSIE [2-6]" \
		nokeepalive ssl-unclean-shutdown \
		downgrade-1.0 force-response-1.0
	BrowserMatch "MSIE [17-9]" ssl-unclean-shutdown
</VirtualHost>
</IfModule>


root@mjolnir:/etc/apache2/sites-available# a2ensite zangief.net
Enabling site zangief.net.
To activate the new configuration, you need to run:
  service apache2 reload

root@mjolnir:/etc/apache2/sites-available# a2ensite zangief.net-ssl 
Enabling site zangief.net-ssl.
To activate the new configuration, you need to run:
  service apache2 reload

root@mjolnir:/etc/apache2/sites-available# /etc/init.d/apache2 restart
Restarting web server: apache2[Fri Jan 27 21:13:02 2012] [warn] NameVirtualHost 172.16.7.133:8080 has no VirtualHosts
[Fri Jan 27 21:13:02 2012] [warn] NameVirtualHost *:443 has no VirtualHosts
[Fri Jan 27 21:13:02 2012] [warn] NameVirtualHost *:80 has no VirtualHosts
 ... waiting [Fri Jan 27 21:13:03 2012] [warn] NameVirtualHost 172.16.7.133:8080 has no VirtualHosts
[Fri Jan 27 21:13:03 2012] [warn] NameVirtualHost *:443 has no VirtualHosts
[Fri Jan 27 21:13:03 2012] [warn] NameVirtualHost *:80 has no VirtualHosts
.
  • [11]. Configurați și activați un site HTTP și un site HTTPS pentru domeniul dalshim.net similar cu zangief.net.
  • [11].a. Inspectați certificatul site-ului peste HTTPS în cadrul IceWeasel. Comparați-l cu certificatul site-ului https://zangief.net.
Rezolvare
root@mjolnir:~# mkdir /var/www/dalshim.net

root@mjolnir:~# echo "dalshim website" > /var/www/dalshim.net/index.html

root@mjolnir:~# cd /etc/apache2/sites-available/

root@mjolnir:/etc/apache2/sites-available# cat dalshim.net | grep -v '^.*#' | grep -v '^$'
<VirtualHost *:80>
	ServerAdmin webmaster@localhost
        ServerName dalshim.net
        ServerAlias www.dalshim.net
	DocumentRoot /var/www/dalshim.net
	<Directory />
		Options FollowSymLinks
		AllowOverride None
	</Directory>
	<Directory /var/www/dalshim.net/>
		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 ${APACHE_LOG_DIR}/error.log
	LogLevel warn
	CustomLog ${APACHE_LOG_DIR}/access.log combined
</VirtualHost>


root@mjolnir:/etc/apache2/sites-available# cat dalshim.net-ssl | grep -v '^.*#' | grep -v '^$'
<IfModule mod_ssl.c>
<VirtualHost _default_:443>
	ServerAdmin webmaster@localhost
        ServerName dalshim.net
        ServerAlias www.dalshim.net
	DocumentRoot /var/www/dalshim.net
	<Directory />
		Options FollowSymLinks
		AllowOverride None
	</Directory>
	<Directory /var/www/dalshim.net/>
		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 ${APACHE_LOG_DIR}/error.log
	LogLevel warn
	CustomLog ${APACHE_LOG_DIR}/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/ssl-certs/dalshim.net.crt
	SSLCertificateKeyFile /etc/apache2/ssl-certs/dalshim.net.key
	<FilesMatch "\.(cgi|shtml|phtml|php)$">
		SSLOptions +StdEnvVars
	</FilesMatch>
	<Directory /usr/lib/cgi-bin>
		SSLOptions +StdEnvVars
	</Directory>
	BrowserMatch "MSIE [2-6]" \
		nokeepalive ssl-unclean-shutdown \
		downgrade-1.0 force-response-1.0
	BrowserMatch "MSIE [17-9]" ssl-unclean-shutdown
</VirtualHost>
</IfModule>


root@mjolnir:/etc/apache2/sites-available# a2ensite dalshim.net
Enabling site dalshim.net.
To activate the new configuration, you need to run:
  service apache2 reload

root@mjolnir:/etc/apache2/sites-available# a2ensite dalshim.net-ssl 
Enabling site dalshim.net-ssl.
To activate the new configuration, you need to run:
  service apache2 reload

root@mjolnir:/etc/apache2/sites-available# /etc/init.d/apache2 restart
Restarting web server: apache2[Fri Jan 27 21:56:17 2012] [warn] NameVirtualHost 172.16.7.133:8080 has no VirtualHosts
 ... waiting [Fri Jan 27 21:56:18 2012] [warn] NameVirtualHost 172.16.7.133:8080 has no VirtualHosts
.

6. mod_rewrite (1.5p)

  • Comenzi/concepte/fișiere
    • N/A

Tutorial

Exerciții

Rezolvare
root@mjolnir:/etc/apache2/sites-available# a2enmod rewrite
Enabling module rewrite.
To activate the new configuration, you need to run:
  service apache2 restart

root@mjolnir:/etc/apache2/sites-available# cat gsr.ro | tail -n 7
    RewriteEngine On
    RewriteOptions Inherit
    RewriteCond %{HTTP_HOST}   !^www\.gsr\.ro [NC]
    RewriteCond %{HTTP_HOST}   !^$
    RewriteRule ^/?(.*)         http://www.gsr.ro/$1 [L,R,NE]

</VirtualHost>

root@mjolnir:/etc/apache2/sites-available# /etc/init.d/apache2 restart
Restarting web server: apache2[Fri Jan 27 21:59:08 2012] [warn] NameVirtualHost 172.16.7.133:8080 has no VirtualHosts
 ... waiting [Fri Jan 27 21:59:09 2012] [warn] NameVirtualHost 172.16.7.133:8080 has no VirtualHosts
.
Rezolvare
root@mjolnir:/etc/apache2/sites-available# cat dalshim.net | tail -n 6
        RewriteEngine On
        RewriteOptions Inherit
        RewriteRule ^/u/([^/]+)/?(.*) /~$1 [R]
        RewriteRule ^/~/([^/]+)$ /~$1/ [R]

</VirtualHost>
Rezolvare
root@mjolnir:/etc/apache2/sites-available# cat zangief.net-ssl | tail -n 7
        RewriteEngine On
        RewriteOptions Inherit
        RewriteCond %{SERVER_PORT} 443
        RewriteRule  ^www.zangief.net$ https://www.dalshim.net  [R]

</VirtualHost>
</IfModule>

root@mjolnir:/etc/apache2/sites-available# /etc/init.d/apache2 restart
Restarting web server: apache2[Fri Jan 27 22:12:41 2012] [warn] NameVirtualHost 172.16.7.133:8080 has no VirtualHosts
 ... waiting [Fri Jan 27 22:12:42 2012] [warn] NameVirtualHost 172.16.7.133:8080 has no VirtualHosts
.

7. Autentificare în apache folosind LDAP (1p)

  • Comenzi/concepte/fișiere
    • N/A

Tutorial

  • N/A

Exerciții

  • [01]. Creați directorul /var/www/gsr.ro/2953 și în el fișierul index.html cu conținutul 42.
Rezolvare
root@mjolnir:~# mkdir /var/www/gsr.ro/2953

root@mjolnir:~# echo "42" > /var/www/gsr.ro/2953/index.html
  • [02]. Configurați accesul la adresa http://gsr.ro/2953/index.html astfel încât doar utilizatorii care au cont valid în LDAP să o poată accesa (Hint: curs, slide 33) (Hint: creți o directivă de tip Directory în /etc/apache2/sites-available/gsr.ro)
    • Folosiți serverul de LDAP de la adresa ldap://mamba.cs.pub.ro:61089
    • Serverul de LDAP are configurat un utilizator uid=morco,ou=snow,dc=fenrir,dc=cs,dc=pub,dc=ro, cu parola gsrrules
Rezolvare
root@mjolnir:/etc/apache2/sites-enabled# a2enmod authnz_ldap
Considering dependency ldap for authnz_ldap:
Enabling module ldap.
Enabling module authnz_ldap.
To activate the new configuration, you need to run:
  service apache2 restart

root@mjolnir:/etc/apache2/sites-enabled# cat gsr.ro | tail -n 12
    Alias /2953 "/var/www/gsr.ro/2953/"
    <Directory "/var/www/gsr.ro/2953/">
        Options Indexes MultiViews FollowSymLinks
        AllowOverride AuthConfig
        AuthType basic
        AuthName "restricted"
        AuthBasicProvider ldap
        AuthzLDAPAuthoritative on
        AuthLDAPURL "ldap://mamba.cs.pub.ro:61089/ou=snow,dc=fenrir,dc=cs,dc=pub,dc=ro?uid"
        Require valid-user
    </Directory>
</VirtualHost>

root@mjolnir:/etc/apache2/sites-enabled# /etc/init.d/apache2 restart
Restarting web server: apache2[Fri Jan 27 22:25:45 2012] [warn] NameVirtualHost 172.16.7.133:8080 has no VirtualHosts
 ... waiting [Fri Jan 27 22:25:47 2012] [warn] NameVirtualHost 172.16.7.133:8080 has no VirtualHosts
.


== Bonus: OpenSSL ==


* Comenzi/concepte/fișiere
** certificate
** CSR
** openssl
** /etc/ssl/openssl.cnf
** Apache2
** mod_ssl
** HTTPS

=== Tutorial ===

* Tutorial
** Folosiți comanda {{{openssl s_client -connect swarm.cs.pub.ro:443}}} pentru a obține informații despre certificatul aferent swarm.cs.pub.ro.

<solution><code>
student@mjolnir:~$ openssl s_client -connect swarm.cs.pub.ro:443
CONNECTED(00000003)
depth=3 C = SE, O = AddTrust AB, OU = AddTrust External TTP Network, CN = AddTrust External CA Root
verify error:num=19:self signed certificate in certificate chain
verify return:0
---
Certificate chain
 0 s:/C=RO/L=Bucuresti/O=Universitatea Politehnica Bucuresti/OU=Computer Science and Engineering Department/CN=swarm.cs.pub.ro
   i:/C=NL/O=TERENA/CN=TERENA SSL CA
 1 s:/C=NL/O=TERENA/CN=TERENA SSL CA
   i:/C=US/ST=UT/L=Salt Lake City/O=The USERTRUST Network/OU=http://www.usertrust.com/CN=UTN-USERFirst-Hardware
 2 s:/C=US/ST=UT/L=Salt Lake City/O=The USERTRUST Network/OU=http://www.usertrust.com/CN=UTN-USERFirst-Hardware
   i:/C=SE/O=AddTrust AB/OU=AddTrust External TTP Network/CN=AddTrust External CA Root
 3 s:/C=SE/O=AddTrust AB/OU=AddTrust External TTP Network/CN=AddTrust External CA Root
   i:/C=SE/O=AddTrust AB/OU=AddTrust External TTP Network/CN=AddTrust External CA Root
---
Server certificate
-----BEGIN CERTIFICATE-----
MIIE2TCCA8GgAwIBAgIQbcvftZ8UtunDFNcODXiUPTANBgkqhkiG9w0BAQUFADA2
MQswCQYDVQQGEwJOTDEPMA0GA1UEChMGVEVSRU5BMRYwFAYDVQQDEw1URVJFTkEg
U1NMIENBMB4XDTEwMTEwOTAwMDAwMFoXDTEzMTEwODIzNTk1OVowgZ8xCzAJBgNV
BAYTAlJPMRIwEAYDVQQHEwlCdWN1cmVzdGkxLDAqBgNVBAoTI1VuaXZlcnNpdGF0
ZWEgUG9saXRlaG5pY2EgQnVjdXJlc3RpMTQwMgYDVQQLEytDb21wdXRlciBTY2ll
bmNlIGFuZCBFbmdpbmVlcmluZyBEZXBhcnRtZW50MRgwFgYDVQQDEw9zd2FybS5j
cy5wdWIucm8wggEiMA0GCSqGSIb3DQEBAQUAA4IBDwAwggEKAoIBAQDCrAgFDN/Y
55QgDBGd9sWYrEg1Zrr8IbMkO0kaUVejyHExaWoJ4pV9KLqimJT1bt5Cmb+bcHDf
HmS3MGodmP+gXnzEOJ3N7ru/TXystGt5tE8QMIXGPj5U5eGYIMTtf4/kiyQgY7MI
vDMIQtNB/L8pZ3mkEPihxY+ehUqaMS+RVk3pf22jsE0d33H9BkzYg86Ekg4lTcwO
UBZjey57VqaQb7c3n+6DJJlA6xi6dvO15bydKdgtmGRnud3jsTxo1brkkXJuSBVW
I3RnuWJLop9MtOZJxF4oWsRoEL1+zapkMGnNHhMlVYNMCHy/uYpYZekNFhYaxbVa
7sW/0cyDSi51AgMBAAGjggF3MIIBczAfBgNVHSMEGDAWgBQMvZNoDPPeq6NJays3
V0fqkOO57TAdBgNVHQ4EFgQUYWPJKL15SDPgm8t1XPQpsZH/OxswDgYDVR0PAQH/
BAQDAgWgMAwGA1UdEwEB/wQCMAAwHQYDVR0lBBYwFAYIKwYBBQUHAwEGCCsGAQUF
BwMCMBgGA1UdIAQRMA8wDQYLKwYBBAGyMQECAh0wOgYDVR0fBDMwMTAvoC2gK4Yp
aHR0cDovL2NybC50Y3MudGVyZW5hLm9yZy9URVJFTkFTU0xDQS5jcmwwbQYIKwYB
BQUHAQEEYTBfMDUGCCsGAQUFBzAChilodHRwOi8vY3J0LnRjcy50ZXJlbmEub3Jn
L1RFUkVOQVNTTENBLmNydDAmBggrBgEFBQcwAYYaaHR0cDovL29jc3AudGNzLnRl
cmVuYS5vcmcwLwYDVR0RBCgwJoIPc3dhcm0uY3MucHViLnJvghN3d3cuc3dhcm0u
Y3MucHViLnJvMA0GCSqGSIb3DQEBBQUAA4IBAQB9r4N7/fHbqlJn/SuJkFQSjZDv
ipWvei3pJf/PwUa4PWXCzilxc2iK10ET0XMvAsPeEozFR681mFTDQnh2PhyE6IiF
VHn5x766lIzR8s+Q5cZJGPWk18W0/R5aF22dn4anEBTpDpSiKIxjxoyqiw5rY/KT
s5PISBcyS7pZLJAILu9jzTXeMT8Il8U4UK2i3MoL8wx3rAGHlFwoO8WR+f50GPfF
I8Es+mG6k+Aml8Hr22eTRxezmwaIKspXTKEe2tdEyYVy/tS6PT6FcAe5dqYA3n6N
WXJuYta31kPhRxqRQWAdaDEXvYM2BFDH0em5ngRF/2bnar2455wop7AZSVLM
-----END CERTIFICATE-----
subject=/C=RO/L=Bucuresti/O=Universitatea Politehnica Bucuresti/OU=Computer Science and Engineering Department/CN=swarm.cs.pub.ro
issuer=/C=NL/O=TERENA/CN=TERENA SSL CA
---
No client certificate CA names sent
---
SSL handshake has read 5335 bytes and written 369 bytes
---
New, TLSv1/SSLv3, Cipher is DHE-RSA-AES256-SHA
Server public key is 2048 bit
Secure Renegotiation IS supported
Compression: zlib compression
Expansion: zlib compression
SSL-Session:
    Protocol  : SSLv3
    Cipher    : DHE-RSA-AES256-SHA
    Session-ID: AAC85D5F2D30D9ACB6515DF154F2D38476733DEA9ED9B037838C0C76506DB320
    Session-ID-ctx: 
    Master-Key: 6E54425037D583095935C43099CAF482CE9F84DD53C53F996D6AD853AA4E587FDED07713DFF2A377B9E468F1D3327274
    Key-Arg   : None
    PSK identity: None
    PSK identity hint: None
    Compression: 1 (zlib compression)
    Start Time: 1321476651
    Timeout   : 7200 (sec)
    Verify return code: 19 (self signed certificate in certificate chain)
---
closed
  • Pe mașina virtuală, folosiți comanda apt-get install apache2 pentru a instala serverul web Apache2, dacă acesta nu este instalat deja.

Exerciții

Atenție: Primele două seturi de task-uri se rezolvă în cadrul mașinii virtuale.

  • [01] Pe mașina virtuală creați un certificat self signed pentru domeniul test.gsr.cs.pub.ro.
    • Hint: urmăriți slide-ul 22 din curs.
    • [01].a. Creați directoarele /etc/apache2/ssl.key/, /etc/apache2/ssl.csr/, /etc/apache2/ssl.crt/.
    • [01].b. Generați o cheie folosind openssl genrsa ... pentru domeniul test.gsr.cs.pub.ro în fișierul /etc/apache2/ssl.key/test.gsr.cs.pub.ro.key.
    • [01].c. Generați o cerere de semnare (CSR) folosind openssl req și cheia generată anterior pentru domeniul test.gsr.cs.pub.ro în fișierul /etc/apache2/ssl.csr/test.gsr.cs.pub.ro.csr.
      • Hint: câmpul Common Name trebuie să conțină numele domeniului, adică test.gsr.cs.pub.ro.
    • [01].d. Generați un certificat self-signed folosind openssl x509 și CSR-ul și cheia generată anterior pentru domeniul test.gsr.cs.pub.ro în fișierul /etc/apache2/ssl.crt/test.gsr.cs.pub.ro.crt.
Rezolvare
root@heimdall:~# mkdir /etc/apache2/ssl.key

root@heimdall:~# mkdir /etc/apache2/ssl.csr

root@heimdall:~# mkdir /etc/apache2/ssl.crt

root@heimdall:~# openssl genrsa -out /etc/apache2/ssl.key/test.gsr.cs.pub.ro.key 2048
Generating RSA private key, 2048 bit long modulus
....................................................................+++
....................................................+++
e is 65537 (0x10001)

root@heimdall:~# openssl req -new -key /etc/apache2/ssl.key/test.gsr.cs.pub.ro.key -out /etc/apache2/ssl.csr/test.gsr.cs.pub.ro.csr
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]:RO
State or Province Name (full name) [Some-State]:Bucharest     
Locality Name (eg, city) []:Bucharest
Organization Name (eg, company) [Internet Widgits Pty Ltd]:UPB
Organizational Unit Name (eg, section) []:CS
Common Name (eg, YOUR name) []:test.gsr.cs.pub.ro         
Email Address []:contact@gsr.cs.pub.ro

Please enter the following 'extra' attributes
to be sent with your certificate request
A challenge password []:heimdall
An optional company name []:GSR

root@heimdall:~# openssl x509 -req -days 365 -in /etc/apache2/ssl.csr/test.gsr.cs.pub.ro.csr -signkey /etc/apache2/ssl.key/test.gsr.cs.pub.ro.key -out /etc/apache2/ssl.crt/test.gsr.cs.pub.ro.crt
Signature ok
subject=/C=RO/ST=Bucharest/L=Bucharest/O=UPB/OU=CS/CN=test.gsr.cs.pub.ro/emailAddress=contact@gsr.cs.pub.ro
Getting Private key
  • [02] Pe mașina virtuală Configurați suport SSL în Apache2.
    • [02].a. Activați suportul SSL. Reporniți serverul Apache.
      • Hint: Folosiți a2enmod și /etc/init.d/apache2.
    • [02].b. Configurați în fișierul /etc/apache2/sites-available/default-ssl directivele aferente pentru suportul SSL.
      • Hint: este vorba de directivele SSLCertificateKeyFile și SSLCertificateFile.
    • [02].c. Activați virtual host-ul default-ssl. Reporniți serviciul Apache.
      • Hint: folosiți a2ensite.
Rezolvare
root@heimdall:~# a2enmod ssl
Enabling module ssl.
See /usr/share/doc/apache2.2-common/README.Debian.gz on how to configure SSL and create self-signed certificates.
To activate the new configuration, you need to run:
  service apache2 restart

root@heimdall:~# a2ensite default-ssl
Enabling site default-ssl.
To activate the new configuration, you need to run:
  service apache2 reload

root@heimdall:~# cat /etc/apache2/sites-available/default-ssl | sed -n '/^[ \t]*SSLC/p'
	SSLCertificateFile    /etc/apache2/ssl.crt/test.gsr.cs.pub.ro.crt
	SSLCertificateKeyFile /etc/apache2/ssl.key/test.gsr.cs.pub.ro.key

root@heimdall:~# /etc/init.d/apache2 restart
Restarting web server: apache2 ... waiting ..
  • [03] Folosind mașina fizică, testați suportul SSL configurat în mașina virtuală.
    • [03].a. Realizați maparea între adresa IP a mașinii virtuale și numele test.gsr.cs.pub.ro.
      • Hint: /etc/hosts.
    • [03].b. Folosiți Firefox/IceWeasel pentru a vă conecta la URL-ul https://test.gsr.cs.pub.ro.
    • [03].c. Folosiți wget pentru a obține pagina implicită aferentă https://test.gst.cs.pub.ro (folosiți opțiunile necesare pentru obținerea paginii).
Rezolvare
root@mjolnir:~# cat /etc/hosts | grep test.gsr.cs.pub.ro
192.168.48.128  test.gsr.cs.pub.ro

[Se deschide pagina https://test.gsr.cs.pub.ro într-un browser]

student@mjolnir:~$ wget https://test.gsr.cs.pub.ro -O out.html 
--2011-11-16 23:11:09--  https://test.gsr.cs.pub.ro/
Resolving test.gsr.cs.pub.ro (test.gsr.cs.pub.ro)... 192.168.48.128
Connecting to test.gsr.cs.pub.ro (test.gsr.cs.pub.ro)|192.168.48.128|:443... connected.
ERROR: The certificate of `test.gsr.cs.pub.ro' is not trusted.
ERROR: The certificate of `test.gsr.cs.pub.ro' hasn't got a known issuer.

student@mjolnir:~$ wget --no-check-certificate https://test.gsr.cs.pub.ro -O out.html
--2011-11-16 23:12:29--  https://test.gsr.cs.pub.ro/
Resolving test.gsr.cs.pub.ro (test.gsr.cs.pub.ro)... 192.168.48.128
Connecting to test.gsr.cs.pub.ro (test.gsr.cs.pub.ro)|192.168.48.128|:443... connected.
WARNING: The certificate of `test.gsr.cs.pub.ro' is not trusted.
WARNING: The certificate of `test.gsr.cs.pub.ro' hasn't got a known issuer.
HTTP request sent, awaiting response... 200 OK
Length: 80 [text/html]
Saving to: `out.html'

100%[======================================>] 80          --.-K/s   in 0s      

2011-11-16 23:12:46 (2.05 MB/s) - `out.html' saved [80/80]

Bonus

  • [01]. Configurați site-ul gsr.ro astfel încât la accesarea oricărui link de tipul http://gsr.ro/XXXX, unde XXXX poate conține 4 cifre și trebuie să înceapă cu 1, 4 sau 9, să fie afișat conținutul directorului /etc.
Rezolvare
root@mjolnir:/etc/apache2/sites-enabled# cat gsr.ro | tail -n 9
    Alias /etc      /etc/
    <Directory "/etc/">
        Options Indexes MultiViews FollowSymLinks
        AllowOverride None
    </Directory>
    RewriteEngine On
    RewriteRule   ^/[149][0-9]{3}$ /etc/ [L,R,NE]

</VirtualHost>

root@mjolnir:/etc/apache2/sites-enabled# /etc/init.d/apache2 restart
Restarting web server: apache2[Fri Jan 27 22:28:33 2012] [warn] NameVirtualHost 172.16.7.133:8080 has no VirtualHosts
 ... waiting [Fri Jan 27 22:28:34 2012] [warn] NameVirtualHost 172.16.7.133:8080 has no VirtualHosts
.
  • [02]. Configurați site-ul gsr.ro astfel încât la accesarea oricărui link de tipul http://gsr.ro/XXXX-YYYY, unde XXXX este orice repetiție de 4 litere și YYYY este un an în intervalul 2005-2009 să fie făcută o redirectare către http://gsr.ro/labs
Rezolvare
root@mjolnir:/etc/apache2/sites-enabled# cat gsr.ro | tail -n 4
    RewriteEngine On
    RewriteRule  ^/[a-zA-Z]{4}-200[5-9]$ /labs [L,R,NE]

</VirtualHost>

root@mjolnir:/etc/apache2/sites-enabled# /etc/init.d/apache2 restart
Restarting web server: apache2[Fri Jan 27 22:31:51 2012] [warn] NameVirtualHost 172.16.7.133:8080 has no VirtualHosts
 ... waiting [Fri Jan 27 22:31:52 2012] [warn] NameVirtualHost 172.16.7.133:8080 has no VirtualHosts
.
laboratoare/laborator-11.txt · Last modified: 2012/01/27 22:34 by george.milescu