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.