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





  • Artykuł jest z FreeBSD na www.malisz.eu.org
    http://www.malisz.eu.org/

    Adres tego artykułu to:
    http://www.malisz.eu.org/7_Apache+AUTH+CERT.htm