ex10 s3 25052009, Uczelnia, Sprawozdania - Sieci komputerowe
[ Pobierz całość w formacie PDF ]
ĆWICZENIE X
KONFIGURACJA SERWERA APACHE, SSL
Kamil Michalak
ID 4.3
25.05.2009
Zajęcia laboratoryjne w dniu 25.05.2009 zostały stworzyły możliwość zapoznania się z
instalacją, konfiguracją oraz administracją serwera HTTP jakim jest Apache.
Jak zwykle pierwsze kroki polegały na sprawdzeniu zainstalowanego na maszynie
oprogramowania.
$ rpm q httpd openssl mod_ssl
Polecenie powinno zwrócić wynik podobny do poniższego
httpd2.2.112.fc10.i386
openssl0.9.8g13.fc10.i686
mod_ssl2.2.112.fc10.i386
W przeciwnym wypadku konieczne jest doinstalowania powyższych pakietów przy pomocy yuma
lub ze źródeł. Dodatkowo możemy również zainstalować pakiet PHP5. Przyda się on w
późniejszych testach wydajności serwera.
Jeżeli instalacja przebiegnie pomyślnie w pasku adresu przeglądarki internetowej możemy
wpisać adres
Powinniśmy zobaczyć taką stronę
Ilustracja 1: Strona testowa serwera Apache
APACHE
Otwieramy teraz plik /etc/httpd/conf/httpd.conf. Plik konfiguracyjny jest bardzo długi, więc
na nasze potrzeby kierujemy zainteresowanie wyłącznie na kilka linijek.
Pierwszą z nich jest
ServerTokens Min
. Upewniamy się, że przypisaną mamy tu wartość
Min
. Linia ta informuje jakie informacje wysyłane będą do przeglądarki przez serwer. Aby
zwiększyć bezpieczeństwo zmniejszamy wiedzę otoczenia
Następnie ustawiamy wartość
Timeout
na
120
. Jest to czas oczekiwania na odebranie żądania GET,
maksymalny czas pomiędzy odebraniem kolejnych pakietów żądania PUT lub POST.
Zaraz potem ustawiamy
KeepAlive On, MaxKeepAliveRequests 100
oraz
KeepAliveTimeout 15.
Pierwsza opcja odpowiada za to czy należy podtrzymać połączenie pomiędzy żądaniami od klienta.
Druga ile żądań będzie obsłużonych podczas jednego połączenia z klientem. Tutaj sugerowane duże
wartości dla dużej wydajności serwera. Ostatnia zaś mówi serwerowi ile sekund czekać przed
zamknięciem połączenia po zakończeniu obsługi żądania.
W kolejnym kroku kierujemy swoje spojrzenie na linię
Listen 80
dopisując zaraz za nią kolejną
linię
Listen 8080.
Dodajemy w ten sposób kolejny port nasłuchiwania serwera.
Czasami taka konfiguracja jest wystarczająca. Zdarza się jednak, że nasze strony
internetowe mają problemy z poprawnym wyświetlaniem polskich znaków. Korzystamy w tedy z
linijki
AddDefaultCharset UTF-8.
To kodowanie zapewnia poprawną obsługę polskich liter.
Zostaje nam tylko zmienić kodowanie plików stron na UTF-8, co swoją drogą w coraz większej
skali staje się standardem internetowym.
Innym, konkurencyjnym serwerem HTTP jest Lighttpd. Faktem godnym zauważenia jest
jego wydajność. Krótki test przeprowadzony przy pomocy programu
ab
(Apache HTTP server
benchmarking tool) pokazał, że Lighttpd jest szybszy od Apache'a. Wynik testu renderowania
prostej strony napisanej w PHP (kalendarz roczny) przedstawiają poniższe tabele.
APACHE
This is ApacheBench, Version 2.0.40dev <$Revision: 1.146 $> apache2.0
Benchmarking 127.0.0.1 (be patient).....done
Server Software: Apache/2.2.3
Server Hostname: 127.0.0.1
Server Port: 80
Document Path: /index.php
Document Length: 400 bytes
Concurrency Level: 1
Time taken for tests: 0.7221 seconds
Complete requests: 1
Failed requests: 0
Write errors: 0
Non2xx responses: 1
Total transferred: 579 bytes
HTML transferred: 400 bytes
Requests per second: 138.48 [#/sec] (mean)
Time per request: 7.221 [ms] (mean)
Time per request: 7.221 [ms] (mean, across all concurrent requests)
Transfer rate: 0.00 [Kbytes/sec] received
Connection Times (ms)
min mean[+/sd] median max
Connect: 0 0 0.0 0 0
Processing: 7 7 0.0 7 7
Waiting: 6 6 0.0 6 6
Total: 7 7 0.0 7 7
LIGHTTPD
This is ApacheBench, Version 2.0.40dev <$Revision: 1.146 $> apache2.0
Benchmarking 127.0.0.1 (be patient).....done
Server Software: lighttpd/1.4.22
Server Hostname: 127.0.0.1
Server Port: 80
Document Path: /index.php
Document Length: 345 bytes
Concurrency Level: 1
Time taken for tests: 0.749 seconds
Complete requests: 1
Failed requests: 0
Write errors: 0
Non2xx responses: 1
Total transferred: 498 bytes
HTML transferred: 345 bytes
Requests per second: 1335.11 [#/sec] (mean)
Time per request: 0.749 [ms] (mean)
Time per request: 0.749 [ms] (mean, across all concurrent requests)
Transfer rate: 0.00 [Kbytes/sec] received
Connection Times (ms)
min mean[+/sd] median max
Connect: 0 0 0.0 0 0
Processing: 0 0 0.0 0 0
Waiting: 0 0 0.0 0 0
Total: 0 0 0.0 0 0
SSL
Kiedy podstawową konfigurację serwera mamy już za sobą, pora na zwiększenie
bezpieczeństwa.
Otwórzmy raz jeszcze plik
/etc/httpd/conf/httpd.conf
. Upewniamy się, czy obecna jest linia
Include conf.d/*.conf
. Pozwoli ona na wykorzystanie plików konfiguracyjnych w katalogu
/etc/httpd/conf.d/
.
Otwieramy plik
/etc/httpd/conf.d/ssl.conf
. Sprawdzamy, gdzie przetrzymywane są pliki
kluczy. W tym przypadku jest to
/etc/httpd/conf/ssl.crt/server.crt
i
/etc/httpd/conf/ssl.key/server.key
.
Następnie przystępujemy do utworzenia certyfikatu.
Najpierw tworzymy nowy katalog i tworzymy w nim kopię plików serwera Apache
# mkdir /tmp/apache
# cp r /etc/httpd/conf/* /tmp/apache/.
Potem wydajemy kolejno polecenia:
# mkdir /etc/httpd/conf/tmp
# cd /etc/httpd/conf/tmp
# openssl genrsa des3 out server.key 2048
Generating RSA private key, 2048 bit long modulus
................+++
...................................................................
..............+++
e is 65537 (0x10001)
Enter pass phrase for server.key:
[nasze hasło]
Verifying Enter pass phrase for server.key:
[nasze hasło]
To polecenie wygeneruje prywatny 2048 bitowy klucz RSA przy użyciu biblioteki
OpenSSL. Klucz jest kodowany algorytmem des3.
# openssl rsa in server.key out server.pem
Enter pass phrase for server.key:
[nasze hasło]
writing RSA key
Usuwamy hasło z prywatnego klucza i umieszcza go w pliku server.pem.
# openssl req new key server.key out server.csr (answer the
series of questions)
Enter pass phrase for server.key:
[jeszcze raz to samo hasło]
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) [GB]:
PL
State or Province Name (full name) [Berkshire]:
lubelskie
Locality Name (eg, city) [Newbury]:
Lublin
Organization Name (eg, company) [My Company Ltd]:
[puste]
Organizational Unit Name (eg, section) []:
[puste]
Common Name (eg, your name or your server's hostname)[]:
[localhost]
Email Address []:
root@localhost
Please enter the following 'extra' attributes
to be sent with your certificate request
A challenge password []:
[puste]
An optional company name []:
[puste]
Generujemy podpisany klucz
# openssl x509 req days 365 in server.csr signkey server.key
out server.crt
Signature ok
subject=/C=PL/ST=lubelskie/L=Lublin/O=My Company
Ltd/emailAddress=kmichalak8@gmail.com
Getting Private key
Enter pass phrase for server.key:
[hasło]
i tworzymy certyfikat, którego ważność trwa 365 dni.
Na koniec wchodzimy do katalogu
/etc/httpd/conf
i kopiujemy otworzone przez nas pliki i
restartujemy serwer HTTP.
# cd /etc/httpd/conf && cp tmp/server.crt ./ssl.crt && cp
tmp/server.key ./ssl.key
# cp tmp/server.csr ./ssl.csr && service httpd restart
Jeżeli wpiszemy teraz w pasku przeglądarki adres
otrzymamy niestety
komunikat o niepoprawnym certyfikacie.
Ilustracja 2: Komunikat błędu uwierzytelniania
Dzieje się tak ze względu na fakt, że certyfikat udzielony stronie został podpisany przez nas
samych. Aby uniknąć tego problemu konieczne jest uzyskanie certyfikatu autentyczności strony z
zewnętrznego źródła.
SERWERY WIRTUALNE
Ostatnim już i najbardziej chyba interesującym zagadnieniem związanym z serwerem
Apache jest pomysł serwerów wirtualnych. Aby utworzyć dwa przykładowe wirtualne serwery
należy w głównym pliku konfiguracyjnym (
/etc/httpd/conf/httpd.conf
) umieścić wpis
NameVirtualHost 192.168.0.1:80
<VirtualHost 192.168.0.1>
ServerAdmin kmichalak8@gmail.lab1.com
ServerName www.lab1.com
DocumentRoot /www/lab1/htdocs
TransferLog /var/log/www/access_log.lab1
ErrorLog /var/log/www/error_log.lab1
</VirtualHost>
[ Pobierz całość w formacie PDF ]