Jeśli otrzymujesz ten błąd z powodu nowej domeny, którą utworzyłeś
W adresie URL, do którego jesteś przekierowywany (być może będziesz musiał poszukać tego adresu URL w narzędziach programistycznych Chrome), zmień dziedzinę z master
na tę, którą właśnie utworzyłeś, a jeśli nie używasz https
, upewnij się, że redirect_uri również używahttp
.
Jeśli otrzymujesz ten błąd, ponieważ próbujesz skonfigurować Keycloak w publicznej domenie (nie na lokalnym hoście)
Krok 1)
Postępuj zgodnie z tą dokumentacją, aby skonfigurować bazę danych MySql. Konieczne może być również odwołanie się do oficjalnej dokumentacji .
Krok 2)
Uruchom polecenieupdate REALM set ssl_required = 'NONE' where id = 'master';
Uwaga: w
tym momencie powinieneś być technicznie w stanie się zalogować, ale wersja 4.0 Keycloak używa protokołu HTTPS do przekierowania uri, mimo że właśnie wyłączyliśmy obsługę protokołu HTTPS. Dopóki Keycloak nie naprawi tego, możemy obejść ten problem za pomocą odwrotnego proxy. Odwrotne proxy to coś, czego i tak będziemy chcieli użyć, aby łatwo tworzyć certyfikaty SSL / TLS bez martwienia się o magazyny kluczy Java.
Uwaga 2: Keycloak od tego czasu wyszedł z własnym proxy. Jeszcze tego nie próbowałem, ale w tym momencie możesz przestać postępować zgodnie z moimi wskazówkami i sprawdzić (keycloak gatekeeper) [ https://www.keycloak.org/downloads.html] . Jeśli masz problemy ze skonfigurowaniem Keycloak Gatekeeper, zachowam instrukcje dotyczące konfigurowania odwrotnego serwera proxy w Apache.
Krok 3) Zainstaluj Apache. Będziemy używać Apache jako odwrotnego proxy (próbowałem NGINX, ale NGINX miał pewne ograniczenia, które przeszkadzały). Zobacz yum instalowanie Apache (CentOs 7) i apt-get install Apache (Ubuntu 16) lub znajdź instrukcje dotyczące konkretnej dystrybucji.
Krok 4) Uruchom Apache
Użyj sudo systemctl start httpd
(CentOs) lub sudo systemctl start apache2
(Ubuntu)
Użyj sudo systemctl status httpd
(CentOs) lub sudo systemctl status apache2
(Ubuntu), aby sprawdzić, czy Apache jest uruchomiony. Jeśli widzisz na zielono słowa active (running)
lub jeśli Started The Apache HTTP Server.
czytasz ostatni wpis , jesteś dobry.
Krok 5) Nawiążemy połączenie SSL z odwrotnym proxy, a następnie zwrotne proxy będzie komunikowało się z keyCloak przez http. Ponieważ ta komunikacja HTTP odbywa się na tym samym komputerze, nadal jesteś bezpieczny. Możemy użyć Certbota, aby skonfigurować automatyczne odnawianie certyfikatów.
Jeśli ten typ szyfrowania nie jest wystarczająco dobry, a Twoja polityka bezpieczeństwa wymaga szyfrowania od końca do końca, będziesz musiał dowiedzieć się, jak skonfigurować SSL przez WildFly , zamiast korzystać z odwrotnego proxy.
Uwaga:
tak naprawdę nigdy nie udało mi się uzyskać prawidłowego działania protokołu https z portalem administracyjnym. Być może to był błąd w wersji beta Keycloak 4.0, którego używam. Przypuszczasz, że możesz ustawić poziom SSL tak, aby wymagał go tylko dla żądań zewnętrznych, ale to nie zadziałało, dlatego w kroku 2 ustawiliśmy https na none. Odtąd będziemy nadal używać protokołu HTTP przez tunel SSH do zarządzania ustawieniami administratora.
Krok 6)
Za każdym razem, gdy spróbujesz odwiedzić witrynę przez https, uruchomisz zasadę HSTS, która automatycznie wymusi przekierowanie żądań http na https. Postępuj zgodnie z tymi instrukcjami, aby usunąć regułę HSTS z przeglądarki Chrome , a następnie na razie nie odwiedzaj ponownie wersji witryny https.
Krok 7)
Skonfiguruj Apache. Najpierw znajdź lokalizację twojego pliku httpd.conf . Twój plik httpd.conf prawdopodobnie zawiera pliki konfiguracyjne z oddzielnego katalogu. W moim przypadku znalazłem cały plik konfiguracyjny w conf.d
katalogu znajdującym się obok folderu, w którym znajdował się plik httpd.conf.
Po znalezieniu plików conf zmień lub dodaj następujące wpisy hostów wirtualnych w plikach conf. Upewnij się, że nie zastępujesz już istniejących opcji SSL, które zostały wygenerowane przez certbot. Kiedy skończysz, twój plik konfiguracyjny powinien wyglądać mniej więcej tak.
<VirtualHost *:80>
RewriteEngine on
#change https redirect_uri parameters to http
RewriteCond %{request_uri}\?%{query_string} ^(.*)redirect_uri=https(.*)$
RewriteRule . %1redirect_uri=http%2 [NE,R=302]
#uncomment to force https
#does not currently work
#RewriteRule ^ https://%{SERVER_NAME}%{REQUEST_URI}
#forward the requests on to keycloak
ProxyPreserveHost On
ProxyPass / http://127.0.0.1:8080/
ProxyPassReverse / http://127.0.0.1:8080/
</VirtualHost>
<IfModule mod_ssl.c>
<VirtualHost *:443>
RewriteEngine on
#Disable HSTS
Header set Strict-Transport-Security "max-age=0; includeSubDomains;" env=HTTPS
#change https redirect_uri parameters to http
RewriteCond %{request_uri}\?%{query_string} ^(.*)redirect_uri=https(.*)$
RewriteRule . %1redirect_uri=http%2 [NE,R=302]
#forward the requests on to keycloak
ProxyPreserveHost On
ProxyPass / http://127.0.0.1:8080/
ProxyPassReverse / http://127.0.0.1:8080/
#Leave the items added by certbot alone
#There should be a ServerName option
#And a bunch of options to configure the location of the SSL cert files
#Along with an option to include an additional config file
</VirtualHost>
</IfModule>
Krok 8) Uruchom ponownie Apache. Użyj sudo systemctl restart httpd
(CentOs) lub sudo systemctl restart apache2
(Ubuntu).
Krok 9)
Zanim będziesz miał okazję spróbować zalogować się na serwer, ponieważ powiedzieliśmy Keycloak, aby używał protokołu http, musimy ustawić inną metodę bezpiecznego łączenia. Można to zrobić, instalując usługę VPN na serwerze Keycloak lub używając SOCKS. Użyłem proxy SOCKS. Aby to zrobić, musisz najpierw skonfigurować dynamiczne przekierowanie portów.
ssh -N -D 9905 user@example.com
Lub skonfiguruj za pomocą Putty .
Cały ruch wysyłany do portu 9905 będzie teraz bezpiecznie kierowany przez tunel SSH do Twojego serwera. Upewnij się, że na białej liście znajduje się port 9905 w zaporze serwera.
Po skonfigurowaniu dynamicznego przekierowania portów należy skonfigurować przeglądarkę do korzystania z serwera proxy SOCKS na porcie 9905. Instrukcje tutaj .
Krok 10) Teraz powinieneś być w stanie zalogować się do portalu administratora Keycloak. Aby połączyć się ze stroną internetową, przejdź do http://127.0.0.1 , a proxy SOCKS przeniesie Cię do konsoli administratora. Upewnij się, że wyłączasz serwer proxy SOCKS, gdy skończysz, ponieważ wykorzystuje on zasoby serwera i spowoduje wolniejszą prędkość Internetu, jeśli będzie dalej.
Krok 11) Nie pytaj mnie, ile czasu zajęło mi rozgryzienie tego wszystkiego.