Shibboleth IdP wersja 5, instalacja w środowisku dockerowym

Z PIONIER.Id
Przejdź do nawigacji Przejdź do wyszukiwania


Opis

W tym podejściu przygotowywane są trzy środowiska dockerowe:

  • baza mysql - zawiera bazę i tablice używane przez Shibboleth v. 5
  • baza LDAP - zawiera prostą bazę danych użytkowników w celu zobrazowania procesu uwierzytelniania i dostarczania atrybutów w Shibboleth IdP; docelowo instalacja IdP może korzystać z dowolnej bazy danych użytkowników
  • środowisko działania Shibboleth IdP: jetty jako serwer WWW i aplikacja Shibboleth IdP

Wymagania systemowe

Paczka instalacyjna i uruchomieniowa serwera IdP

<span id="gettgz"Pobranie aktualnej paczki pionier-id-idp.tar.gz

Paczka jest dostępna pod adresem https://aai.pionier.net.pl/PIONIER.Id/pionier-id-idp.tar.gz

Rozpakowanie paczki

np. w katalogu /opt

cd /opt
tar xfv pionier-id-idp.tar.gz
cd /opt/PIONIER.Id-IdP

Opis zawartości paczki

  • w podkatalogu jetty/credentials/ jest umieszczony plik jetty.p12 zawierający testowy certyfikat serwera, wystawiony na nazwę aai.example.pl przez niezaufane CA; w tym katalogu należy umieścić plik jetty.p12 zawierający certyfikat przeznaczony dla instalowanego serwera (wskazówki umieszczono poniżej)
  • trzy pliki docker-compose-init.yaml, docker-compose-upgrade.yaml, docker-compose.yaml służą uruchamianiu środowiska w trybie inicjalizacji (docker-compose-init.yaml), upgrate'u (docker-compose-upgrade.yaml) oraz gotowej usługi (docker-compose.yaml)
  • w pliku docker-compose.yaml jest zdefiniowany start poszczególnych usług, definicja współdzielonych wolumnenów oraz definicja zmiennych środowiskowych (sekcja environment):
  1. usługa mariadb - start serwera mysql, tworzona jest baza shibboleth_pionier i potrzebne tablice
  2. usługa openldap - start serwera openLDAP - serwer dostępny jest na portach 1389 i 1636, korzysta ze schematów znajdujących się w podkatalogu ldap-schemas, inicjowana jest zawartość bazy zgodnie z plikiem w podkatalogu ldifs
  3. idp - start serwera jetty oraz aplikacji Shibboleth IdP
  4. wspólne wolumeny są zdefiniowane dla usług mariadb oraz openldap i gwarantują trwałość baz danych
  5. dla usługi idp w atrybucie environment są podawane ustawienia:
- JETTY_IP_ADDR to adres IP serwera IdP
- JETTY_HTTP to port nasłuchu http, domyślnie 8081
- JETTY_HTTPS to port nasłuchu https, domyślnie 9444
- JETTY_PASS to hasło dla pliku jetty/credentials/jetty.p12

Przygotowanie obrazów

Po dostosowaniu zawartości plików wykonujemy tworzymy obraz Shibboleth IdP:

cd /opt/PIONIER.Id-IdP
docker compose build

Po poprawnym zakończeniu sprawdzamy za pomocą polecenia:

docker images

że istnieje obraz pionier-idp-5

Zainicjowanie instalacji Shibboleth IdP

Przeprowadzamy instalację inicjującą. Na głównej maszynie zostanie utworzony katalog /opt/shibboleth-idp-pionier, w którym będzie umieszczona instalowana wersja Shibboleth IdP (plik uruchomieniowy oraz cała konfiguracja). Instalacja odbywa się w trybie interakcyjnym, należy odowiedzieć na zadane pytania lub potwierdzić wybór przez Enter. Uruchamiamy:

docker compose -f ./docker-compose-init.yaml run idp-init

Interakcja wygląda następująco:

Installation Directory
[/opt/shibboleth-idp] ?
Enter
Host Name
[973fd3996aaa] ?
Podajemy pełną nazwę hosta, np. idp.uczelnia.pl
SAML EntityID
[ https://idp.uczelnia.pl/idp/shibboleth ] ?
Enter

Attribute Scope: [uczelnia.pl] ?

Enter

Następuje instalacja pluginów, na którą należy wyrazić zgodę odpowiadając dwukrotnie Y

Po zakończeniu instalacji w katalogu /opt/shibboleth-idp-pionier znajduje się instalacja i wstępna konfiguracja Shibboleth IdP. Proces dockera związany z inicjalizacją Shibboleth IdP zostaje zakończony, ale zaleca się wykonanie polecenia:

docker compose -f ./docker-compose-init.yaml down --remove-orphans

Ponowna inicjalizacja Shibboleth IdP

Jeśli „coś poszło nie tak” i potrzebna jest ponowna inicjalizacja środowiska Shibboleth IdP:

  • zatrzymujemy usługę
cd /opt/PIONIER.Id-IdP
docker compose down
  • usuwamy zawartość katalogu /opt/shibboleth-idp-pionier
  • jeśli jest potrzebne wyczyszczenie bazy mysql czy openLDAP
- sprawdzamy, jakie są nazwy wolumenów i wykonujemy:
docker volume rm nazwa_wolumenu

Uruchomienie Shibboleth IdP

Aby uruchomić usługę serwera IdP należy wykonać polecenie:

docker compose up -d

Przy pierwszym uruchomieniu zostanie pobrany obraz mariadb oraz openldap, zostaną utworzone wolumeny wspólne i następnie jest uruchamiany obraz pionierid-id, czyli startowany jest serwer webowy jetty i w ramach tego serwera jest udostępniana aplikacja Shibboleth IdP.

W pliku docker-compose.yaml odpowiedzialnym za przebieg uruchamiania usługi jest umieszczony wpis:

restart: always

co oznacza, że system dockerowy będzie samodzielnie startował usługę - nie są potrzebne żadne dodatkowe działania, by zapewnić startowanie po reboocie maszyny podstawowej.

Aktualizacja konfiguracji Shibboleth IdP

Po zainicjowaniu usługi Shiiboleth IdP w katalogu w katalogu /opt/shibboleth-idp-pionier serwera podstawowego znajdują się wszystkie pliki usługi IdP. Aktualizacja konfiguracji odbywa się poprzez modyfikację potrzebnych plików, np. /opt/shibboleth-idp-pionier/conf/idp.properties. Po dokonanych zmianach należy zrestartować obraz dockera:

docker compose restart

Zmiana certyfikatu serwera jetty

Zmiana certyfikatu polega na:

  1. przygotowaniu nowego pliku jetty.p12 zawierającego nowy certyfikat (wskazówki poniżej) i wgraniu go do katalogu jetty/credentials/
  2. modyfikacji zmiennej środowiskowej JETTY_PASS w pliku docker-compose.yaml, jeśli do utworzenia pliku p12 użyto innego hasła niż podane w tym pliku
  3. wykonanie restartu obrazu
docker compose restart

Udostępnienie usługi IdP na porcie 443

Po uruchomieniu dockera serwer jetty będący silnikiem webowym udostępniającym usługę IdP nasłuchuje na porcie https o numerze 9444. Ponieważ serwer jetty działa z uprawnieniami użytkownika jetty nie jest możliwe użycie portu 443 w konfiguracji dockera. Aby serwer był dostępny pod standardowym portem 443 należy wykonac odpowiednie przekierowanie w usłudze firewalla.

Przykładowym rozwiązaniem jest użycie polecenia iptables

iptables -t nat -A PREROUTING -p tcp -m tcp --dport 443 -d ip_serwera_głównego -j REDIRECT --to-ports 9444 

Przygotowanie certyfikatu na potrzeby serwera jetty

Certyfikat serwera musi spełniać standardowe wymagania dot. certyfikatu serwera WWW. Konfiguracja jetty wymaga, by certyfikat był przygotowany w postaci p12.

Załóżmy, że w pliku serwer.pem mamy certyfikat serwera, w pliku serwer.key klucz prywatny, a w ca-chain.pem łańcuch certyfikatów pośrednich. Przygotowanie pliku p12 odbywa się następująco:

cat serwer.pem ca-chain.pem  > jetty-chain.pem
openssl pkcs12 -export -inkey test.key -in jetty-chain.pem -out jetty.p12

Plik ca-chain.pem zawiera certyfikaty pośrednie, czyli wszystkie poza certyfikatem nadrzędnego CA. Np. jeśli certyfikat serwera został wystawiony przez C=GR, O=Hellenic Academic and Research Institutions CA, CN=HARICA DV TLS RSA, to w pliku ca-chain.pem umieszczamy:

  • certyfikat C=GR, O=Hellenic Academic and Research Institutions CA, CN=HARICA DV TLS RSA
  • certyfikat C=GR, O=Hellenic Academic and Research Institutions CA, CN=HARICA TLS RSA Root CA 2021 (ponieważ on jest wystawcą powyższego certyfikatu), którego wystawcą jest C=GR, L=Athens, O=Hellenic Academic and Research Institutions Cert. Authority, CN=Hellenic Academic and Research Institutions RootCA 2015

Certyfikat C=GR, L=Athens, O=Hellenic Academic and Research Institutions Cert. Authority, CN=Hellenic Academic and Research Institutions RootCA 2015 nie jest już potrzebny, bo jest to certyfikat nadrzędnego CA, umieszczony w magazynach systemowych.

Polecenie pkcs12 będzie wymagało podania hasła klucza prywatnego (jeśli klucz jest zaszyfrowany) oraz hasła przeznaczonego do utworzenia pliku p12 i używanego następnie do odczytania tego pliku.

Aktualizacja wersji Shibboleth IdP

Przygotowany obraz dockerowy instaluje wersję 5.1.4 Shibboleth IdP.

Aktualizacja wersji Shibboleth IdP, po pojawieniu się nowej wersji odbywa się w następujący sposób:

  • zamykamy usługę:
cd /opt/PIONIER.Id-IdP
docker compose down
  • dostosowujemy plik docker-compose-upgrade.yaml, by zmienna środowiskowa UPGRADE wskazywała nową wersję Shibboleth IdP, dostępną na stronie https://shibboleth.net/downloads/identity-provider/
  • wykonujemy polecenie aktualizacji, w trakcie wykonywania pojawi się pytanie o katalog instalacyjny, należy nasisnąć Enter
docker compose -f ./docker-compose-upgrade.yaml run idp-upgrade
  • uruchamiamy ponownie usługę IdP, dodając opcję czyszczenia kontenerów uruchamianych poprzednio
docker compose up -d