
Autoryzacja do www za
pomocą certyfikatu Data:
05-09-2003 o godz. 21:22:11 Temat: Konfiguracje
Apache
O zaletach
certyfikatów zarówno tych osobistych jak i dla serwerów www
nikogo chyba nie trzeba przekonywać. Ale połączenie tych dwóch
rozwiązań daje nam całkiem niezłe rezultaty. Wyobraźmy sobie,
że prawie każdego dnia przybywa nam jakieś hasło do
zapamiętania zaczynając od kodu PIN do karty bankomatowej,
kredytowej, identyfikacyjnej poprzez hasła do zalogowania się
do domeny w firmie, hasła do poczty służbowej, prywatnej. Do
tego co jakiś czas część z tych haseł musimy zmieniać. Jak
wiemy tworzenie haseł wszędzie identycznych nie jest
najlepszym rozwiązaniem. Poniższy opis który dotyczy
autoryzacji do zasobów www za pomocą certyfikatu to tylko
jedno z wielu zastosowań. Inne zastosowania które należy tutaj
wymienić to:
podpisywanie wiadomości e-mail
szyfrowanie wiadomości e-mail
logowanie do domeny Windows NT
autoryzacja użytkowników w aplikacjach
itd ..... A wszystko mógłby zastąpić certyfikat
zapisany na karcie i tylko jeden kod PIN
Ale do
rzeczy. Mamy certyfikat osobisty który jest zapisany na karcie
kryptograficznej obsługiwanej przez czytnik (podłączony do
gniazda RS232 lub USB) lub zapisany na twardym dysku naszej
stacji roboczej. Na razie używamy tego certyfikatu do
podpisywania wiadomości e-mail lub do szyfrowania. Gdzieś w
innym miejscu stoi serwer (FreeBSD z zainstalowanym Apachem i
mod_ssl) który posiada certyfikat www. Pewnego dnia
oznajmiamy, że dostęp do zasobów intranetowych w firmie jest
możliwy tylko i wyłącznie za pomocą certyfikatu.
W
poniższym przykładzie użytkownicy posiadają certyfikat
osobisty EnergoCert
który jest globalnie rozpoznawalny przez wszystkie
przeglądarki internetowe, natomiast certyfikat dla serwera www
został wygenerowany tak jak to zostało opisane w artykule Apache
+ SSL.
Konfigurujemy VirtualHosta dla naszej
strony:
< IfDefine SSL >
## ## SSL
Virtual Host Context ##
< VirtualHost
11.22.33.44:443 >
# General setup for the virtual
host DocumentRoot "/usr/local/www/data/cert" ServerName
cert.domena.pl ServerAdmin admin@domena.pl ErrorLog
/var/log/httpd-error.ssl.log TransferLog
/var/log/httpd-access.ssl.log
SSLEngine
on SSLCipherSuite
ALL:!ADH:!EXPORT56:RC4+RSA:+HIGH:+MEDIUM:+LOW:+SSLv2:+EXP:+eNULL SSLCertificateFile
/usr/local/etc/apache/ssl.crt/server.crt SSLCertificateKeyFile
/usr/local/etc/apache/ssl.key/server.key SSLCACertificatePath
/usr/local/etc/apache/ssl.crt SSLCACertificateFile
/usr/local/etc/apache/ssl.crt/ca.crt
SSLVerifyClient
require # require oznacza, że do danego zasobu możemy
się dostać # tylko z certyfikatem
SSLVerifyDepth
10
< Location / > # ścieżka względem
katalogu ustawionego w DocumentRoot
SSLRequire (
%{SSL_CLIENT_S_DN_Email} eq "jacek@domena.pl" or
%{SSL_CLIENT_S_DN_Email} eq "piotr@domena.pl" or
%{SSL_CLIENT_S_DN_Email} eq "test@domena.pl"
and
%{TIME_WDAY} >= 1 and %{TIME_WDAY} <= 5 # tutaj
ustawiliśmy logowanie od poniedziałku do piątku
and
%{TIME_HOUR} >= 8 and %{TIME_HOUR} <= 16 ) # w
godzinach od 8 do 16.
< /Location
>
Opcję SSLRequire można sobie skonfigurować w
zależności od własnych potrzeb, ja na razie ustawiłem dostęp
do zasobu trzem adresom e-mail oraz w określone dni i godziny.
Można jeszcze ustawić w zależności kto wydał certyfikat, jaki
ma numer seryjny itp. Szczegóły znajdziecie tutaj.
Poniżej jeszcze kilka opcji z sekcji SSL które
odkomentowałem a których nie będę opisywał:
SSLOptions +FakeBasicAuth +ExportCertData
+CompatEnvVars +StrictRequire
... SetEnvIf
User-Agent ".*MSIE.*" nokeepalive ssl-unclean-shutdown
downgrade-1.0 force-response-1.0
Cały
fragment SSL z pliku httpd.conf można zobaczyć tutaj. Jeszcze
jedna uwaga na koniec (przez to straciłem kilka cennych
minut). Gdyby certyfikaty dla www i osobiste były
podpisane przez to samo CA byłoby OK, natomiast w tym
przypadku trzeba do
pliku: /usr/local/etc/apache/ca.crt wkleić całą
ścieżkę certyfikacji dla certyfikatu osobistego którą
ściągnąłem z repozytorium dostępnego na stronach EnergoCert. W tym
konkretnym przypadku do pliku ca.crt wkleiłem 5 dodatkowych
certyfikatów poleceniem:
cat root.pem >>
/usr/local/etc/apache/ssl.crt/ca.crt
i tak wszystkie po
kolei.
Następnie edytujemy plik ca.crt i zostawiamy
tylko to co znajduje się pomiędzy
liniami:
-----BEGIN CERTIFICATE----- -----END
CERTIFICATE-----
Na koniec restartujemy Apache.
Pozdrawiam Jacek
| |