Czasem jest tak, że do pewnej strony www chcemy, aby mieli dostęp tylko posiadacze klucza.

Jest to uproszczona wersja – jeden klucz na wirtualny serwer. To ograniczenie wynika z mechanizmu autoryzacji, który najpierw certyfikuje adres strony (certyfikat go zawiera), a następnie dopiero daje dostęp do katalogu. Nie możemy w ten sposób nadać różnym katalogom różne certyfikaty. Można natomiast nadać różne certyfikaty różnym serwerom wirtualnym.

Powiedzmy, że chcemy zabezpieczyć część serwisu, np. program /phpmyadmin/

Generowanie klucza w konsoli za pomocą skryptu

Na początek generujemy klucz, który będzie służył tylko zabezpieczeniu strony,
plik tworzklucz:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
#/bin/bash
#1. tworzymy swoj klucz CA admina
openssl genrsa -out $1.KEY

#2. tworzymy żądanie certyfikatu:
openssl req -new -key $1.KEY -out $1.CSR
#Teraz podajemy kraj, region, miasto itd.
#WAZNE jest podać Common Name: adres.domena.com

#3. Tworzymy podpisany przez siebie certyfikat na 2 lata
openssl x509 -req -days 720 -in $1.CSR -out $1.CRT -signkey $1.KEY

#4. Dla Firefoxa:
openssl  pkcs12 -export -in $1.CRT -inkey $1.KEY -certfile $1.CRT -name "Uzytkownik PhpMyAdmin" -out $1.p12

stosujemy: ./tworzklucz nazwaklucza
Na koniec zostaniemy poproszeni o hasło.
Klucz zapisujemy w katalogu poza public_html.

Generowanie klucza SSL

Tym powyższym skryptem można też wygenerować klucz SSL dla obsługi serwera https:// pamiętając o prawidłowym wpisie domeny przy generowaniu: Common Name: domena.com , pliki KEY i CRT trzeba skopiować do katalogu, np. /etc/ssl/certyfikaty, a w konfiguracji Apache podmienić, pamiętając o uprawnieniach do odczytu 755:

1
2
        SSLCertificateFile    /etc/ssl/certyfikaty/sslserver.CRT
        SSLCertificateKeyFile /etc/ssl/certyfikaty/sslserver.KEY

Konfiguracja Apache2

W pliku konfiguracji dla SSL np. /etc/apache2/sites-enabled/001-serverssl
w sekcji Directory dodajemy

1
2
3
4
5
6
7
8
9
#Po SSLEngine on:
        SSLVerifyClient none
        SSLCACertificateFile /home/uzytkownik/katalogzkluczem/klucz.CRT
# Tu zamiast Location lepiej podać <Directory ....> i ścieżkę bezwzględną
        <Location /phpmyadmin>
                SSLVerifyClient require
                SSLVerifyDepth 1
#Jeśli zmienimy na Directory to tu też trzeba:
        </Location>

Sprawi to, że pozostałe podstrony SSL będą dostępne bez pliku klucza.

Wyłączanie dostępu przez HTTP

Wszystko byłoby na nic, gdyby szło wejść na phpmyadmin przez http://…
W pliku etc/apache2/conf.d/phpmyadmin
w sekcji Directory dopisujemy

1
SSLRequireSSL

Można też zabronić dostępu w pliku wirtualnego hosta http://… W sekcji Directory piszemy tam deny from all

Używanie z przeglądarką

Firefox->Opcje->Zaawansowane->Certyfikaty->Wyświetl certyfikaty->Użytkownik->Importuj
Podajemy nazwę pliku z certyfikatem, następnie jego hasło. Teraz wchodząc na stronę phpMyAdmin Firefox prosi nas o potwierdzenie certyfikatu.
Podobnie IE->Opcje internetowe->Zawartość->Certyfikaty->Importuj->Dalej->Plik z certyfikatem wybieramy->Hasło i uwaga, ponieważ nasz certyfikat nie jest wystawiony w centrum certyfikacji (choć równie trudno go złamać) musimy po wejściu na stronę wybrać „Kontynuuj (Niezalecane)”.

Na urządzeniach mobilnych w Androidzie…

Android nie obsługuje domyślnie certyfikatów tego typu, ale jest darmowa francuska wtyczka Firefox, można ją zainstalować AddCertificate.