Archiwa tagów: bezpieczeństwo

Przedłużanie ważności darmowego certyfikatu StartCom

Kilka osób pytało się już mnie, co zrobić, gdy skończy się ważność certyfikatu zarejestrowanego w firmie StartCom. Otóż należy przeprowadzić od początku dokładnie taką samą procedurę, jak przy tworzeniu nowego certyfikatu. Prawdopodobnie czynność tą będziemy musieli poprzedzić również ponownym założeniem konta w serwisie StartSSL.

Tak się akurat złożyło, że certyfikat na mojego bloga generowałem nieco ponad rok temu, więc kilka dni temu wygasł. Wraz z nim skończył się również okres ważności dla certyfikatu prywatnego niezbędnego do zalogowania się na stronę startssl.com – pamiętamy, że logowanie na niej odbywa się właśnie za pomocą certyfikatu, a nie loginu i hasła. Szybko przejrzałem więc FAQ i forum w poszukiwaniu informacji, jak dostać się ponownie na swoje konto. Okazało się, że nie można :) No prawie, bo jeśli założymy nowe konto podając ten sam adres email, możemy napisać do administratora serwisu, aby przeniósł dane o certyfikatach ze starego konta na te dopiero co utworzone. Tak też zrobiłem, po czym po niedługim czasie dostałem odpowiedź, abym radził sobie sam :) Na moim starym koncie nie było już w sumie żadnych ważnych certyfikatów, więc strata ze starego konta żadna. Pewnie inaczej by było, gdyby na koncie zostało coś ważnego – wtedy zapewne też konta zostałyby połączone. Mimo wszystko czuje pewien niedosyt, bo na stronie mogłoby się znaleźć nieco więcej informacji na temat odzyskiwania starego konta wraz z jakimś automatem do tego.

Zgodnie z poleceniem wygenerowałem na nowo niezbędny certyfikat. Trochę szkoda, że nie jest już podpisany imieniem i nazwiskiem, ale w tej chwili nie chce mi się szukać notariuszy, aby mnie zweryfikowali :) Taka weryfikacja również jest ważna przez rok czasu – szkoda, że tak krótko.

Tym też sposobem na blogu nie pojawia się już wkurzający komunikat o wygaśnięciu ważności certyfikatu, a ja mam spokój na kolejny rok.

Apache Shiro – uwierzytelnić lepiej?

shiro-logo.jpg

Jakiś czas temu opisywałem, jak szybko zaimplementować uwierzytelnianie w aplikacji GWT przy pomocy JAAS’a. Wtedy byłem trochę zafascynowany tym ostatnim i nie dostrzegałem wielu jego wad. Prosty moduł uwierzytelniania (mniej więcej taki, jaki wtedy stworzyliśmy) nie przysparza jeszcze większych trudności, jednak każde dodatkowe wymagania sprawiły, że JAAS coraz bardziej zaczął mnie zniechęcać. Nie twierdzę, że jest zły, tylko jego silna integracja z mechanizmami serwerów aplikacji sprawia, że aplikacja staje się mało przenaszalna i praktycznie przed każdym wdrożeniem na inny serwer moduł logowania trzeba implementować od nowa. Najgorsze w tym wszystkim jest to, że niektóre serwery udostępniają łatwe i przyjazne API do rozszerzania funkcjonalności uwierzytelniania, a inne z kolei utrudniają bądź wręcz to uniemożliwiają. Jeśli wiemy, że nasza aplikacja od początku do końca będzie współpracować z jednym tylko serwerem – problem znika, nie mniej i tak się namęczymy z implementacją kilku rzeczy.

Użerając się wciąż z JAAS’em w końcu postanowiłem spróbować czegoś innego. Padło na Apache Shiro – framework ułatwiający implementację uwierzytelniania, autoryzacji, szyfrowania i zarządzania sesjami w aplikacjach Java. Shiro wywodzi się ze starej biblioteki JSecurity i obecnie jest aktywnie rozwijane przez wielu deweloperów. Może być użyte w zwykłych aplikacjach Java oraz aplikacjach webowych, a mocna modularyzacja kodu pozwala na łatwe podstawianie swoich implementacji do tego co potrzebujemy. Przy okazji zawiera też wiele podstawowych metod uwierzytelniania, z których można skorzystać praktycznie od razu. Dodatkowo jeśli nasza aplikacja musi obsługiwać mechanizmy serwerowe, w Shiro można napisać własną implementację modułu logowania JAAS.

Czytaj więcej »

Implementacja weryfikacji obrazkowej CAPTCHA w GWT i JAAS

Istotnym problemem stron internetowych są nieproszone boty, które często uprzykrzają życie nie tylko administratorom serwisu, ale też użytkownikom, którzy chcieliby mieć dostęp do treści jak najwyższej jakości. Nic przecież tak nie drażni jak mnogość bezsensowych komentarzy z reklamami przy wpisie, dla którego np. toczyła się ciekawa dyskusja. Od lat podejmuje się próby rozróżnienia użytkownika będącego po drugiej stronie i stwierdzenia, czy mamy do czynienia z człowiekiem czy komputerem. Jednym ze sposobów jest zastosowanie CAPTCHA. Czy jest to sposób w pełni skuteczny? Jak się domyślasz, bądź wiesz – nie, jednak z pewnością eliminuje zdecydowaną większość mało zaawansowanych botów. Ważne jest też, aby CAPTCHA nie była zbytnim utrudnieniem dla właściwego użytkownika, bo nic tak nie irytuje, jak kilkukrotne odświeżanie obrazka, aby w końcu trafić na ten w miarę czytelny.

W niniejszym wpisie nie będę rozwodził się na temat skuteczności CAPTCHA, jak i przekonywał do używania tego typu zabezpieczenia lub nie. Nie chcę też sugerować konkretnego rodzaju zabezpieczenia, bo przecież oprócz najpopularniejszych  obrazków z mało czytelnymi literami i cyframi, istnieją jeszcze zabezpieczenia głosowe, czy takie polegające na wykonaniu jakiegoś zadania matematycznego, bądź inne bardziej wyrafinowane. Po prostu dostałem zadanie w firmowym projekcie polegające na implementacji weryfikacji obrazkowej i zanim się do tego zabiorę, postanowiłem nieco wcześniej rozeznać się w temacie.

Czytaj więcej »

Szyfrowanie danych w bazie danych za pomocą Jasypt + Hibernate

Jasypt Logo

Bezpieczeństwo danych przechowywanych w naszej aplikacji polega nie tylko na należytym zabezpieczeniu ekranu logowania oraz implementacji dobrego mechanizmu uwierzytelniania i autoryzacji użytkowników. Te dwa ostatnie zagadnienia można zrealizować chociażby przy pomocy certyfikatu SSL i usługi JAAS. Czasami wymaga się jednak, aby same dane były składowane w formie zaszyfrowanej. Najczęściej stosuje się tą metodę, jeśli dostęp do bazy danych może być uzyskany w jakikolwiek inny sposób, niż przez naszą aplikację. Odpowiednio zaimplementowany mechanizm zabezpiecza też dane w bazie przed nieautoryzowanym dostępem za pomocą potencjalnych luk w zaufanej aplikacji.

Szyfrowanie danych w bazie można zrealizować na wiele sposobów. Jednym z nich jest po prostu dopisanie do getterów i setterów naszych klas encji odpowiednich operacji szyfrowania i deszyfracji. Od stopnia zaawansowania poziomu zabezpieczenia zależy, jak duży bałagan w kodzie zrobimy i jak ciężko będzie to utrzymać. Z pomocą przychodzą biblioteki, które pozwalają na przeźroczyste szyfrowanie danych na poziomie np. Hibernate’a. Jedną z takich bibliotek jest Jasypt – narzędzie upraszczające operacje szyfrowania do niezbędnego minimum (przy czym oferujące równie zaawansowane możliwości, co API JCE – Java Cryptography Architecture). Jasypt doskonale sprawdza się w implementacjach własnych mechanizmów szyfrowania oraz integruje się z wieloma popularnymi technologiami jak Hibernate, Spring, Wicket czy JBoss Seam. Sam z siebie nie dostarcza żadnych algorytmów szyfrowania, jednak pozwala na dołączanie dodatkowych dostawców JCE umożliwiających korzystanie z bardziej zaawansowanych algorytmów jak AES czy WHIRLPOOL.

Czytaj więcej »

Certyfikat SSL podpisany własnym nazwiskiem

Całkiem niedawno opisywałem, jak  utworzyć darmowy certyfikat SSL dla swojej strony WWW. Certyfikat taki wystawiony był przez firmę StartCom, jednak nie posiadał sprecyzowanego właściciela certyfikatu, tzn. jako właściciel widoczny był tylko adres witryny, bez naszego imienia i nazwiska. Taki certyfikat jest oczywiście ważny i w pełni funkcjonalny, jednak jeśli jeszcze bardziej chcesz go uwiarygodnić, StartCom daje taką możliwość – za darmo. Jedyne co trzeba zrobić, to uzyskać status potwierdzenia naszego konta na stronie StartSSL.

W tym miejscu należy zaznaczyć w jaki sposób StartCom potwierdza autentyczność użytkowników. Cały mechanizm opiera się na tzw. sieci zaufania, wewnątrz której można wyróżnić normalnych użytkowników oraz notariuszy – ludzi posiadających uprawnienia weryfikacji innych użytkowników. Weryfikacja polega na spotkaniu się z notariuszem i przedstawieniu mu dwóch ważnych dokumentów ze zdjęciem, po tej czynności notariusz oznacza nasze konto jako zweryfikowane. Aby nasze konto uzyskało status potwierdzenia, trzeba poddać się weryfikacji przynajmniej dwóch notariuszy. Każdy potwierdzony użytkownik może uzyskać status notariusza, jeśli wypełni poprawnie test udostępniony na stronie StartSSL WoT (Web-of-Trust) oraz wykupić opcję StartSSL Verified (na chwilę obecną kosztuje ona 59,90$).

Czytaj więcej »

Darmowy certyfikat SSL dla Twojej strony!

Jako że przywiązuje dużą wagę do bezpieczeństwa na stronach internetowych, niedopuszczalne jest dla mnie przesyłanie jakichkolwiek haseł czystym tekstem. Nie ważne, czy jest to strona banku, czy zwykły blog, nie powinno się tego robić i tyle. Sam na swoim blogu umożliwiam rejestrację użytkowników (jeśli jeszcze się nie zarejestrowałeś, to zapraszam), dlatego dbam o to, abyś czuł się bezpieczny przy podawaniu swojego hasła. Rozwiązanie jest proste, wystarczy serwować stronę rejestracji i logowania za pomocą protokołu https z wykorzystaniem certyfikatu SSL. Taki certyfikat każdy może wygenerować sobie sam, niestety objawiać się to będzie nieznośnym komunikatem przeglądarki o niezaufanym dostawcy certyfikatu. Certyfikaty podpisane przez zewnętrzne firmy, które są już dodane do zaufanych we wszystkich popularnych przeglądarkach, niestety trochę kosztują, a przynajmniej tak do niedawna myślałem.

Zacząłem się przekopywać poprzez różnych dostawców certyfikatów w celu znalezienia najtańszej oferty – wymagania nie były duże, certyfikat miał pokrywać tylko jedną domenę, w wariancie z przedrostkiem www i bez niego. Fajnie byłoby oczywiście móc obsłużyć więcej subdomen (wariant certyfikatu z tzw. WildCard), jednak tutaj niskich cen się nie spodziewałem. Przewinęło mi się kilka darmowych certyfikatów, które oferowane były w ramach 30-dniowego testu – no cóż, ze względu na siedzącego we mnie lenia co miesiąc bawić się w to nie będę. Nie spodziewałem się, że znajdę coś w pełni darmowego, co będzie spełniało moje oczekiwania, jednak po dłuższych poszukiwaniach trafiłem na dwie ciekawe oferty: CAcert oraz StartCom. Pierwsza z nich w celu uwierzytelnienia użytkownika opiera się na sieci zaufania, niestety certyfikaty w ramach niej wystawiane nie są domyślnie zaufane w najpopularniejszych przeglądarkach. Jeśli to się zmieni, CAcert będzie naprawdę ciekawą ofertą (przede wszystkim darmową), póki co te same efekty przyniesie wygenerowanie własnego certyfikatu. Na szczęście druga z ofert okazała się jednak znacznie ciekawsza…

Czytaj więcej »

Zapamiętywanie i walidacja danych w formularzu logowania GWT + JAAS

Widząc rosnące zainteresowanie tematyką bezpieczeństwa w GWT, postanowiłem jak najszybciej dostarczyć Ci kolejną przydatną dawkę informacji. Pamiętasz pewnie wpis o uwierzytelnianiu i autoryzacji w GWT – powstał wtedy mały projekt pokazujący, w jaki sposób połączyć aplikację napisaną w GWT z autoryzacją poprzez mechanizm Javy, a dokładniej użyliśmy JAAS (Java Authentication and Authorization Service). Tamten projekt miał jednak pewne wady, m. in. brak walidacji danych na formularzu logowania oraz nie obsługiwał zapamiętywania tych danych przez przeglądarkę. Pierwszy problem wynikał z użycia przycisku „submit”, który automatycznie wysyłał formularz, nie było więc momentu na sprawdzenie poprawności wysyłanych danych. Natomiast drugi problem jest bardziej złożony i związany z naturą samego GWT. W poszukiwaniu rozwiązania będziemy więc kontynuowali rozpoczęty wcześniej projekt.

Przeszukałem najpierw zasoby internetu, aby sprawdzić, czy występują już jakieś znane rozwiązania wyżej wymienionych problemów. Praktycznie wszystkie przykłady implementacji formularza logowania używają GWT RPC do przesyłania danych, więc nie było w czym przebierać. Jeśli zaś chodzi o zapamiętywanie danych logowania, problemem jest brak bezpośredniej możliwości skorzystania z mechanizmów przeglądarki, bo do tego potrzebny jest formularz wraz z polami loginu i hasła oraz przyciskiem „submit”, który musi znajdować się bezpośrednio w pliku html, a żaden z jego elementów nie może być wstrzykiwany javascript’em. Wszystkie moduły GWT są wstrzykiwane javascript’em w treść strony, dlatego przeglądarka nawet nie proponuje możliwości zapamiętania danych. Czytaj więcej »

Uwierzytelnianie i autoryzacja w GWT za pomocą JAAS

Czas na pierwszy artykuł związany z tym, czym zajmuje się na co dzień. Tym wpisem chcę również zapoczątkować ciąg artykułów na temat GWT, w których będę starał się pokazać co ciekawsze sposoby wykorzystania tej biblioteki. Na dzień dzisiejszy przygotowałem dość ważny temat z punktu widzenia aplikacji webowych, którym jest implementacja mechanizmu bezpieczeństwa za pomocą JAAS (Java Authentication and Authorization Service).

Zaczynając pisać jakąkolwiek aplikację w pewnym momencie zaczynasz myśleć o jej zabezpieczeniu. Piszesz własny formularz logowania, implementujesz obsługę żądania logowania i wylogowywania użytkownika, tworzysz własną obsługę sesji. Jak zapewne wiesz, ten element kodu jest często powtarzalny w każdej nowej aplikacji. Czemu więc nie wyciągnąć go na zewnątrz i nie wykorzystywać jednego fragmentu kodu wszędzie? Z pomocą przychodzi JAAS, framework pozwalający na zapewnienie bezpieczeństwa w każdej aplikacji pisanej w Java. Co daje nam JAAS? Ano to, że nie musimy za każdym razem pisać wielu zbliżonych do siebie linijek kodu, że nie musimy martwić się o błędne zaimplementowanie całego mechanizmu. JAAS pozwala również na wydelegowanie zarządzania użytkownikami i rolami do serwera aplikacji lub innego systemu. Ważnym elementem jest również tak zwane SSO (Single Sing-On), czyli mechanizm jednokrotnego uwierzytelniania do wielu aplikacji korzystających z tych samych dostawców bezpieczeństwa. W tym artykule chcę Ci zaprezentować, jak wdrożyć JAAS w aplikacji opartej na GWT.

Czytaj więcej »