Neos WEB po https¶
Od wersji 4.1.11 możliwe jest uruchomienie klienta WEB po protokole https. Zabezpieczona jest komunikacja na porcie HttpServerService oraz komunikacja danych po odata. Aby mechanizm zadziałał należy go odpowiednio skonfigurować.
Konfiguracja w pliku .smd¶
Konfiguracja obowiązkowa¶
Aby serwer mógł działać w oparciu o protokół https należy do pliku .smd w sekcji HTTPServer dodać wpis:
[HTTPServer]
WWWEnableHttps=yes
Konfiguracja zalecana¶
Od wersji 6.0.14 możliwe jest automatyczne dodawanie do odpowiedzi serwera nagłówka StrictTransportSecurity, który informuje przeglądarkę, że strona powinna być dostępna tylko przez HTTPS. Wszystkie próby dostępu po HTTP automatycznie zostaną przekierowane na HTTPS.
[HTTPServer]
StrictTransportSecurity=yes
Od wersji 6.1.3 dostępne są wpisy, które pozwalają wymusić na użytkowniku odpowiednią siłę hasła podczas jego zmiany i resetowania:
[Profile:my_profile]
ShowErrorDetails=no
PasswordValidationPattern=(?=.*[a-z])(?=.*[A-Z])(?=.*[0-9])(?=.*[^A-Za-z0-9])(?=.{8,})
PasswordValidationLeakAndStrengthMeter=Y
ShowErrorDetails konfiguruje to, czy informacje o szczegółach błędów będa widoczne dla użytkownika. Wyłączenie tej flagi powoduje, że błędy bazodanowe i neosowe w postaci MessageBox'a są pozbawione szczegółów wskazujących na konkretny fragment kodu. Błędy javascriptowe zawierające wrażliwe dane i kod nie będą pojawiały się w konsoli.
Aby zachować pełny poziom bezpieczeństwa i nie pokazywać użytkownikowi nagłówka błędów bazodanowych i neosowych, należy:
1. W aplikacji Teneum przejść do Panelu tłumaczeń.
2. Dodać tłumaczenie kontekstowe w dowolnym obiekcie z kluczem = ERROR, tłumaczeniem1 = #1, a w tłumaczeniach umieścić tekst, który będzie domyślnie wyświetlany w danym języku np. j.polski: "Wystąpił błąd, spróbuj za chwilę, jeśli błąd będzie się powtarzał zgłoś problem do administratora systemu.".
PasswordValidationPattern jest wzorem typu Regex. Umożliwia dowolną konfigurację wymaganej siły hasła. Na powyższym przykładzie użytkownik będzie musiał podać hasło składające się z conajmniej: * jednej małej litery, * jednej dużej litery, * jednej cyfry, * jednego znaku specjalnego * 8 znaków.
Do skonfigurowania pozostanie tekst wyświetlający się w przypadku błędnej weryfikacji wzoru regex. Aby to zrobić należy przeciążyć domyślnie pokazywany tekst "Hasło musi zawierać:" wg. instrukcji z http://docs.dbr.local/neos/master/articles/technical-supports/multilanguage/neos-multilang/#zmiana-t%C5%82umacze%C5%84-systemowych.
PasswordValidationLeakAndStrengthMeter konfiguruje, czy sprawdzać hasło z ogólnodostępną bazą wycieków. Jeżeli hasło np. admin znajduje się w tej bazie, nie będzie możliwości jego ustawienia.
Konfiguracja w pliku .app¶
Konfiguracja zalecana¶
W pliku .app w sekcji General też można skonfigurować regex, który będzie sprawdzany podczas zmiany hasła w aplikacji Teneum:
PasswordValidationPattern - podobnie jak w przypadku Neosa.
W aplikacji Teneum nie mamy dostępu do Panelu tłumaczeń więc tekst, który będzie się pojawiał w przypadku błędnej weryfikacji wzoru regex należy skonfigurować za pomocą parametru PasswordValidationPatternInfo. Np. "Hasło zbyt proste. Musi zawierać conajmniej 8 znaków, duże i małe litery oraz cyfry i znak specjalny.".
Konfiguracja serwera hostującego¶
Generowanie certyfikatu zaufania dla witryny¶
W środowisku produkcyjnym zalecane jest skontaktowanie się z odpowiednim zaufanego pośrednikiem, u którego można otrzymać certyfikat SSL. Odpowiednio dodany do witryny certyfikat spowoduje, że przeglądarka nie będzie wyświetlać witryny jako niebezpiecznej.
Na potrzeby testów i środowiska lokalnego można wygenerować własnoręcznie podpisany certyfikat:
- Otworzyć konsolę Windows PowerShell z prawami administratora.
- Uruchomić polecenie:
New-SelfSignedCertificate -Subject "localhost" -TextExtension @("2.5.29.17={text}DNS=localhost&IPAddress=127.0.0.1&IPAddress=::1") -NotAfter (Get-Date).AddYears(25) -CertStoreLocation "cert:\LocalMachine\My"
- Wpisać w wyszukiwarce menu start Windowsa:
Zarządzaj certyfikatami komputerówi otworzyć ten program. - Przejść do
Osobisty-Certyfikaty.
W folderze powinien być widoczny certyfikat localhost.
- Klikamy
PPMna certyfikacie -Wszystkie zadania-Eksportuj-Dalej- ZaznaczamyNie eksportuj klucza prywatnego-Dalej- ZaznaczamyCertyfikat X.509 szyfrowany binarnie algorytmem DER (CER)-Dalej- KlikamyPrzeglądaji wybieramy nazwę i lokalizację dla eksportowanego pliku certyfikatu -Dalej-Zakończ. - Na drzewku po lewej, przechodzimy do folderu
Zaufane główne urzędy certyfikacji-Certyfikaty. - Klikamy
PPMna folderzeCertyfikaty-Wszystkie zadania-Importuj-Dalej- Wybieramy uprzednio utworzony plik certyfikatu -Dalej- ZaznaczamyUmieść wszystkie certyfikaty w następującym magazyniei spośród magazynów wybieramyZaufane główne urzędy certyfikacji-Dalej-Zakończ.
Przypisanie certyfikatu do aplikacji/usługi Neosa:¶
- Mając uruchomioną powyższą przystawkę
Zarządzaj certyfikatami komputerówszukamy naszego certyfikatulocalhost, klikamyPPM-Otwórz-Szczegóły- szukamy parametruOdcisk palcai kopiujemy do schowka jego wartość usuwając spacje. - Uruchamiamy konsolę (
cmd, niePowerShell) z prawami administratora. - Informujemy system, że serwer będzie teraz nasłuchiwał na adresie https poleceniem:
netsh http add urlacl url=https://+:9001/ user=wszyscy` uwaga w niespolszczonych systemach nie ma 'user=wszyscy'
- Wiążemy certyfikat z Neosem poleceniem:
netsh http add sslcert ipport=adres:port certhash=w_certhash appid={w_appid}
Przy czym: * adres:port - adres i porty Neosa. Certyfikat dodać dla portów Neosa odpowiedzialnych za serwer, profil i OData (powtarzamy polecenie w konsoli tyle razy ile portów). * w_certhash - skopiowana wartość 'Odcisk palca' z certyfikatu. * w_appid - 4e151b7c-16ba-4a95-91d2-b42ee2f45063 jest dla Neos.Runtime, * w_appid - f75df4f6-2fc6-44c5-8c36-839be478320e jest dla Neosa jako usługi.
Po tych operacjach przy uruchamianiu neosa w logach powinniśmy zobaczyć komunikat HTTP Server waiting for request on adress(es): https://+:9001/ oraz OData Server waiting on addres https://localhost:9002/ i przegladarka powinna bez problemu przyjmować https na localhoscie.
Uwaga!
Jeśli wpisanie https://localhost:9001 w pasku adresu przeglądarki nie działa, użyj adresu https://127.0.0.1:9001.
Uwaga!
Może się zdarzyć sytuacja, że profil działał po http i po hostowaniu go jako https przeglądarka dalej nie widzi zmian i usilnie próbuje odpalić profil po http. Należy wtedy usunąć pliki cookies z przeglądarki dotyczące profilu. Możliwe że będzie też wymagany restart przeglądarki.
Uwaga!
Jeżeli użyjemy certyfikatu tymczasowego i ktoś inny będzie chciał wyświetlić naszego klienta z innego komputera zobaczy w chrome przekreśloną kłódkę przy https gdyż certyfikat nie jest zaufany. Można wtedy poprosić go aby zaimportował nasz certyfikat do magazynu Zaufane główne urzędy certyfikacji (niepolecane) albo zdobyć prawdziwy.
Uwaga!
Żeby klient Teneum był w stanie otworzyć zasoby z serwera HTTP, certyfikat musi być poprawny, tj. podczas otwierania klienta webowego przez przeglądarkę, nie może ona zwracać żadnych błędów dotyczących certyfikatu. Chromium Embeded Framework, wykorzystywany do wyświetlania tych zasobów w Teneum, nie ma wbudowanej obsługi komunikatów związanych z błędami certyfikatów. W przeciwieństwie do zewnętrznej przeglądarki, nie wyświetli strony błędu z opcją wczytania strony pomimo błędu. Zamiast tego, wyświetli pustą stronę i przy podpięciu się do niego debuggerem nie zobaczymy w konsoli żadnych błędów.
Uwaga!
Jeśli pomimo poprawnego skonfigurowania zaufanego certyfikatu, przeglądarka będzie wyświetlać informację o tym, że witryna jest niezabezpieczona, może to być spowodowane działaniem oprogramowania antywirusowego firm trzecich. Niektóre programy antywirusowe dokonują inspekcji ruchu szyfrowanego. W tym celu instalują własny certyfikat, na który nasz wygenerowany certyfikat może zostać automatycznie przez antywirusa podmieniony. Możemy to sprawdzić wyświetlając szczegóły użytego certyfikatu w przeglądarce (ikona kłódki w pasku adresu przeglądarki). Żeby obejść ten problem, należy na czas testowania wyłączyć filtrowanie ruchu SSL w oprogramowaniu antywirusowym. Dla programu ESET instrukcję jak to zrobić można znaleźć pod tym adresem: https://support.eset.com/pl/kb3126-wylaczanie_filtrowania-protokolu-ssl-w-produktach-eset-for-windows
Uwaga!
Gdyby się okazało że w logach Neosa nie ma komunikatów o pomyślnej rejstracji https tylko, że koliduje z rejestracją już zarejestrowaną w systemie, to znaczy że mamy już jakieś powiązanie na porty 9001 lub 9002 lub odpowiednio inne. Należy zobaczyć poleceniem:
netsh http show urlacl
netsh http delete urlacl url=...
Konfiguracja websocketów¶
Websockety umożliwiają komunikację klienta .js z serwerem Neos w czasie rzeczywistym. Między innymi są używane w mechanizmach dynamicznych powiadomień w menu, zliczaniu liczby wierszy w gridach oraz do pokazywania timera odliczającego czas do wygaśnięcia sesji użytkownika. W chwili obecnej websockety nie działają po https.
Jeżeli któraś z w.w funkcji nie działa, to należy pochylić się nad poprawną konfiguracją adresu i portu websocket-ów (port musi być otwarty).
Jeżeli chcemy uruchomić WebSockety produkcjnie dla klientów z zewnątrz, to należy skontaktować się z administratorem i skonfigurować ReverseProxy, które wystawi WebSockety po https. Wtedy w pliku .smd należy dodatkowo dodać wpis w sekcji AppServer np. na przykładzie witryny Raw-Pol reiven.store:
[AppServer]
WebsocketExplicitUrl=wss://websocket.reiven.store/