Technologie internetowe laboratorium nr 5. Zabezpieczanie usług sieciowych z wykorzystaniem HTTP Basic Authentication oraz HTTPS

Podobne dokumenty
Technologie internetowe laboratorium nr 4. Instalacja i uruchomienie usługi sieciowej w serwerze Tomcat/AXIS

Katedra Architektury Systemów Komputerowych Wydział Elektroniki, Telekomunikacji i Informatyki Politechniki Gdańskiej

Katedra Architektury Systemów Komputerowych Wydział Elektroniki, Telekomunikacji i Informatyki Politechniki Gdańskiej

JAVA I SIECI. MATERIAŁY:

Narzędzia i aplikacje Java EE. Usługi sieciowe Paweł Czarnul pczarnul@eti.pg.gda.pl

Wykład 3 Inżynieria oprogramowania. Przykład 1 Bezpieczeństwo(2) wg The Java EE 5 Tutorial Autor: Zofia Kruczkiewicz

Programowanie komponentowe. Przykład 1 Bezpieczeństwo wg The Java EE 5 Tutorial Autor: Zofia Kruczkiewicz

Sposoby tworzenia projektu zawierającego aplet w środowisku NetBeans. Metody zabezpieczenia komputera użytkownika przed działaniem apletu.

Wykład 4. Metody uwierzytelniania - Bezpieczeństwo (3) wg The Java EE 5 Tutorial Autor: Zofia Kruczkiewicz

Wprowadzenie do technologii Web Services: SOAP, WSDL i UDDI

Zaawansowane aplikacje WWW - laboratorium

Łukasz Przywarty Wrocław, r. Grupa: WT/N 11:15-14:00. Sprawozdanie z zajęć laboratoryjnych: OpenSSL - API

Bezpieczne uruchamianie apletów wg

Architektury Usług Internetowych. Laboratorium 2 RESTful Web Services

Java wybrane technologie

Architektury Usług Internetowych. Laboratorium 2. Usługi sieciowe

Podejście obiektowe do budowy systemów rozproszonych

Java RMI. Dariusz Wawrzyniak 1. Podejście obiektowe do budowy systemów rozproszonych. obiekt. interfejs. kliencka. sieć

Wywoływanie metod zdalnych

Aplikacje www laboratorium

Katalog książek cz. 2

Obiektowe programowanie rozproszone Java RMI. Krzysztof Banaś Systemy rozproszone 1

Remote Method Invocation 17 listopada 2010

Wieloplatformowe aplikacje sieciowe. dr inż. Juliusz Mikoda mgr inż. Anna Wawszczak

Podejście obiektowe do budowy systemów rozproszonych

Remote Method Invocation 17 listopada Dariusz Wawrzyniak (IIPP) 1

Java RMI. Dariusz Wawrzyniak 1. Podejście obiektowe do budowy systemów rozproszonych. obiekt. interfejs. kliencka. sieć

Bezpieczeństwo systemów informatycznych

Wywoływanie metod zdalnych

11. Autoryzacja użytkowników

Instrukcja pobrania i instalacji. certyfikatu Microsoft Code Signing. wersja 1.4

Programowanie w języku Java - Wyjątki, obsługa wyjątków, generowanie wyjątków

Gatesms.eu Mobilne Rozwiązania dla biznesu

Remote Method Invocation 17 listopada rozproszonych. Dariusz Wawrzyniak (IIPP) 1

Zdalne wywołanie metod - koncepcja. Oprogramowanie systemów równoległych i rozproszonych Wykład 7. Rodzaje obiektów. Odniesienie do obiektu

Oprogramowanie systemów równoległych i rozproszonych Wykład 7

Aplikacje RMI

Certyfikat niekwalifikowany zaufany Certum Silver. Instalacja i użytkowanie pod Windows Vista. wersja 1.0 UNIZETO TECHNOLOGIES SA

Instrukcja dla użytkowników Windows Vista Certyfikat Certum Basic ID

Certyfikat Certum Basic ID. Instrukcja dla użytkowników Windows Vista. wersja 1.3 UNIZETO TECHNOLOGIES SA

TelCOMM Wymagania. Opracował: Piotr Owsianko Zatwierdził: IMIĘ I NAZWISKO

Krótka instrukcja instalacji

Dokumentacja SMS przez FTP

Jarosław Kuchta Administrowanie Systemami Komputerowymi. Internetowe Usługi Informacyjne

Instrukcja wgrywania Certyfikatu Klienta do przeglądarki Mozilla Firefox. System Bankowości Internetowej KIRI BS 2012

Bramka płatnicza. Dokumentacja techniczna. wersja 1.0

i-bank Mobile Banking INSTRUKCJA OBSŁUGI v3

Przykłady interfejsu TCP i UDP w Javie

Instrukcja konfigurowania poczty Exchange dla klienta pocztowego użytkowanego poza siecią uczelnianą SGH.

Serwer SSH. Wprowadzenie do serwera SSH Instalacja i konfiguracja Zarządzanie kluczami

Programowanie obiektowe zastosowanie języka Java SE

Programowanie rozproszone w języku Java

1. Podstawowe usługi bezpieczeństwa. 2. Użytkownicy i role. przydzielanie uprawnie ń metodom, role komponentów, korzystanie i konfiguracja

Podpisywanie i bezpieczne uruchamianie apletów wg

Zaawansowane aplikacje internetowe - laboratorium Web Services (część 1).

Wyjątki. Streszczenie Celem wykładu jest omówienie tematyki wyjątków w Javie. Czas wykładu 45 minut.

Połączenie VPN aplikacji SSL. 1. Konfiguracja serwera VPN 1.1. Ustawienia ogólne 1.2. Profile aplikacji SSL 1.3. Konto SSL 1.4. Grupa użytkowników

Konfiguracja klienta Lotus Notes R6 z certyfikatami i kluczami na karcie kryptograficznej lub w pliku.

Język JAVA podstawy. wykład 2, część 1. Jacek Rumiński. Politechnika Gdańska, Inżynieria Biomedyczna

RMI-2. Java Remote Method Invocation (RMI) na podstawie m.in. podręcznika firmy Sun Microsystems SYSTEMY ROZPROSZONE

INSTRUKCJA AKTYWACJI I INSTALACJI CERTYFIKATU ID

Oracle9iAS: instalacja i konfiguracja aplikacji J2EE

Sprawozdanie nr 4. Ewa Wojtanowska

Dodawanie nowego abonenta VOIP na serwerze Platan Libra

Badania poziomu bezpieczeństwa portalu dostępowego do infrastruktury projektu PL-Grid

Zaawansowane aplikacje internetowe laboratorium

Aplikacje RMI. Budowa aplikacji rozproszonych. Część 2.

Katalog książek cz. 3: Web Service

Programowanie obiektowe. Literatura: Autor: dr inŝ. Zofia Kruczkiewicz

AXIS2 - tworzenie usługi sieciowej i klienta Axis Data Binding. dr inż. Juliusz Mikoda mgr inż. Anna Wawszczak

Aplikacje internetowe i rozproszone - laboratorium

Spis treści INTERFEJS (WEBSERVICES) - DOKUMENTACJA TECHICZNA 1

ź Ć Ż

Ę Ż ż Ł ź ż ż ż ż

ć ć ć

Ą Ę Ł Ą Ż

ć Ę ć Ę ź Ę

Ż ź Ł

Ą ŚĆ Ś Ś Ę ć

ź Ź Ź ć ć ć ź ć ć ć ć ć Ź

ś ś ś ź ć ś ś

Ł

Ę

ś ś ś ś ś ś ś ś ś ś ć ś Ż Ż ć ś ś Ż ć

Ł Ż ś ć ż ż ś ś ż ś Ę ś Ę ż ź Ż ść Ż

ś ść ść ś ść ść ś ś ś ś ść ś ś ś ść ść

Aplikacja wielowątkowa prosty komunikator

Programowanie w Javie

Pierwsze logowanie do systemu I-Bank

Instrukcja 10 Laboratorium 13 Testy akceptacyjne z wykorzystaniem narzędzia FitNesse

Instrukcja instalacji środowiska testowego na TestingCup wersja 1.0

Ćwiczenie 9 - Zaawansowane metody programowania w sieci komputerowej

Certyfikat niekwalifikowany zaufany Certum Silver. Instrukcja dla uŝytkowników Windows Vista. wersja 1.1 UNIZETO TECHNOLOGIES SA

Dokumentacja techniczna API systemu SimPay.pl

Ś ć ż ż ż ż Ą Ę Ę Ę

Usługi sieciowe systemu Linux

DESlock+ szybki start

Throwable. Wyjatek_1(int x_) { x = x_; } int podaj_x()

Laboratorium Programowania Kart Elektronicznych

Języki i metody programowania Java INF302W Wykład 3 (część 1)

Transkrypt:

Technologie internetowe laboratorium nr 5 Zabezpieczanie usług sieciowych z wykorzystaniem HTTP Basic Authentication oraz HTTPS 1. Wprowadzenie Pawe ł Czarnul, KASK, WETI, Politechnika Gdańska pczarnul@eti.pg.gda.pl Celem niniejszego laboratorium jest zabezpieczenie usług sieciowych dostępnych na serwerze za pomoc ą mechanizmów HTTP Basic Authentication oraz HTTPS ([2], [1]). Wywołanie metody dostępnej w ramach usługi sieciowej zainstalowanej na serwerze np. Tomcat/AXIS jak pokazano w ćwiczeniu 4, następuje z wykorzystaniem protokołu SOAP, w którym zakodowane s ą argumenty wejściowe jak i wyniki działania metody. Do przekazania danych pomiędzy klientem a serwerem wykorzystywany jest protokó ł HTTP. Z punktu widzenia zabezpieczenia usługi rodzi to następujące problemy: 1. Klient nie jest identyfikowany, wywołania metody tej samej usługi przez np. różne osoby nie s ą rozróżniane. Stąd niemożliwe staje si ę np. naliczanie opłat za wywołanie metody. 2. Argumenty wejściowe i wyjściowe metody przekazywane s ą z wykorzystaniem protokołu HTTP, nie s ą więc szyfrowane co potencjalnie umożliwia podsłuchanie komunikacji pomiędzy klientem a serwerem. W ramach przykładów, które rozwi ążą ww. kwestie, wykorzystany zostanie serwer Tomcat/AXIS, który pozwoli na zainstalowanie usługi sieciowej napisanej w Javie. Podstawowa konfiguracja serwera Tomcat/AXIS jak równie ż kod klienta wywołującego metod ę usługi sieciowej i jego kompilacja i uruchomienie objęte są instrukcj ą ćwiczenia nr 4. 2. Wykorzystanie mechanizmu HTTP Basic Authentication Mechanizm ten umożliwia wymuszenie zalogowania si ę przez klienta na serwerze poprzez podanie loginu użytkownika oraz hasła. Niestety, login i hasła nie s ą szyfrowane w sposób uniemożliwiający ich odczytanie. Mechanizm ten pozwala jednak na identyfikacj ę użytkownika przy założeniu, i ż różni użytkownicy dysponuj ą różnymi identyfikatorami użytkownika w postaci ciągu znaków login. Ww. sposób wymaga konfiguracji serwera w postaci określenia użytkowników, którzy mog ą si ę do systemu logowa ć, a w szczególności: 1. Login, has o oraz rol u ytkownika w postaci linii w pliku jakarta-tomcatł ę ż 4.1.18/conf/tomcat-users.xml:

<?xml version='1.0' encoding='utf-8'?> <tomcat-users> <role rolename="tomcat"/> <role rolename="role1"/> <role rolename="runtaskuser"/> <role rolename="onjavauser"/> <user username="tomcat" password="tomcat" roles="tomcat"/> <user username="both" password="tomcat" roles="tomcat,role1"/> <user username="role1" password="tomcat" roles="role1"/> <user username="runtaskuser" password="uio9" roles="runtaskuser"/> <user username="bob" password="password" roles="onjavauser"/> </tomcat-users> Zdefiniowano użytkownika runtaskuser, określono hasło oraz rol ę, do której referencja występuje z kolei w pliku katalogu systemu AXIS tj.: jakarta-tomcat-4.1.18/webapps/axis/web-inf/web.xml W pliku tym, na końcu elementu </web-app> należy zdefiniowa ć URL, który obejmować będzie rola określona powyżej poprzez umieszczenie np.: <security-constraint> <web-resource-collection> <web-resource-name>runtaskapplication</web-resource-name> <url-pattern>/*</url-pattern> </web-resource-collection> <auth-constraint> <role-name>runtaskuser</role-name> </auth-constraint> </security-constraint> <login-config> <auth-method>basic</auth-method> <realm-name>runtask Application</realm-name> </login-config> login-config określa metod ę identyfikacji użytkownika, web-resource-collection określa zbiór adresów URL (w tym przypadku wszystkie strony w danym katalogu systemu AXIS), auth-constraint określa rol ę, dla której zezwala si ę na dostęp do podanego URL. Należy zauważy ć, i ż kod metod usługi sieciowej nie odwołuje si ę do roli, która ma dostęp do usługi, uprawnienia s ą więc w tym przypadku elementem konfiguracji serwera. Kod usługi sieciowej, wykorzystywany w niniejszej instrukcji, umożliwia uruchomienie na serwerze polecenia podanego jako argument: import java.io.*;

public class RunTaskServer { public int RunTask(String taskname) { try { Process p = Runtime.getRuntime().exec(taskname); catch (IOException e1) { System.err.println(e1); System.exit(1); return 0; Kod klienta wywołujący metod ę podan ą powyżej i zainstalowan ą jako plik JWS (Java Web Service) w katalogu jakarta-tomcat-4.1.18/webapps/axis/runtaskserver.jws, uzupełniony jest o zdefiniowanie loginu i przekazanie hasła w celu uwierzytelnienia na serwerze: import org.apache.axis.client.call; import org.apache.axis.client.service; import org.apache.axis.encoding.xmltype; import org.apache.axis.utils.options; import javax.xml.rpc.parametermode; public class RunTaskClientBASIC { public static void main(string [] args) throws Exception { Options options = new Options(args); String endpoint = "http://localhost:" + options.getport() + "/axis/runtaskserver.jws"; args = options.getremainingargs(); String method = "RunTask"; String s1 = new String(args[0]); Service service = new Service(); Call call = (Call) service.createcall(); call.settargetendpointaddress( new java.net.url(endpoint) ); call.setoperationname( method ); call.addparameter( "op1", XMLType.XSD_STRING, ParameterMode.IN );

call.setreturntype( XMLType.XSD_INT ); call.setusername("runtaskuser"); call.setpassword("uio9"); Integer ret=(integer) call.invoke( new Object [] { s1 ); System.out.println("Got result : " + ret); 3. Wykorzystanie HTTPS do wywołania metody usługi sieciowej Protokó ł HTTPS (HTTP+SSL) pozwala na szyfrowanie komunikacji pomiędzy klientem a serwerem, nie zachodzi więc obawa o podejrzenie przesyłanych danych przez osoby postronne. Protokó ł HTTPS wykorzystuje techniki kryptografii asymetrycznej i symetrycznej. Konfiguracja serwera Tomcat do obsługi HTTPS sprowadza si ę do odkomentowania odpowiednich deklaracji w pliku konfiguracyjnym jakarta-tomcat- 4.1.18/conf/server.xml tj. w wersji 4.1.18: <Connector classname="org.apache.coyote.tomcat4.coyoteconnector" port="8443" minprocessors="5" maxprocessors="75" enablelookups="true" acceptcount="100" debug="0" scheme="https" secure="true" useurivalidationhack="false" disableuploadtimeout="true"> <Factory classname="org.apache.coyote.tomcat4.coyoteserversocketfactory" clientauth="false" protocol="tls" /> </Connector> Tomcat obsługiwa ć będzie odtąd zgłoszenia na porcie 8080 oraz 8443 (domyślnie), ostatnie z wykorzystaniem HTTPS. Konfiguracja klienta usługi sieciowej, która ma by ć wywołana z wykorzystaniem HTTPS sprowadza si ę do ustawienia odpwiedniego adresu URL (HTTPS zamiast HTTP) oraz wskazania odpowiedniego pliku keystore (certyfikat SSL), który umożliwi szyfrowaną komunikacj ę pomiędzy klientem a serwerem. Wygenerowanie pliku (jednego w przypadku klienta i serwera na tej samej maszynie) sprowadza si ę do wywołania: Dodatkowe elementy kodu klienta, które nale y umie ci przed wywo aniem metody us ugi ż ś ć ł ł sieciowej to:

String endpoint = "https://localhost:8443/axis/accessedbyhttps/runtaskserver.jws"; System.setProperty("javax.net.ssl.trustStore", "/home/pczarnul/.keystore"); 4. Połączenie metod HTTP Basic Authentication oraz szyfrowanej transmisji HTTPS Wyżej wymienione techniki mog ą zosta ć połączone ze sob ą w celu zapewnienia identyfikacji użytkownika oraz szyfrowania transmisji danych. Należy przeprowadzi ć kroki konfiguracji serwera dla obu wymienionych metod oraz zmodyfikowa ć kod klienta z elementami pokazanymi wyżej dla obu wymienionych metod. Pomimo tego, i ż użytkownik zosta ł zidentyfikowany na podstawie loginu i hasła oraz stosowana jest komunikacja szyfrowana, serwer nie może mie ć absolutnej pewności co do tożsamości klienta tj. nie wie, kim faktycznie jest klient o danym loginie i haśle. W praktyce sklepy internetowe często nie rozwiązuj ą tego problemu zakładając, iż użytkownik zakładając konto w sklepie o danym loginie i haśle podaje równie ż poprawne dane osobowe oraz adres, pod który wysyłany jest następnie towar np. za zaliczeniem pocztowym. Z reguły, używana jest szyfrowana transmisja HTTPS, za ś sama identyfikacja użytkownika następuje na poziomie aplikacji poprzez przekazanie loginu i hasła np. przez pola formularza. Java posiada odpowiednie API, które pozwala na implementacj ę podpisu cyfrowego danych oraz weryfikacj ę podpisu. Klient generuje klucze prywatny i publiczny, następnie podpisuje dane z użyciem klucza prywatnego, przekazuje dane wraz z podpisem i kluczem publicznym do weryfikacji serwerowi, który jest w stanie stwierdzi ć, czy podpis faktycznie odnosi si ę do danych, które zostały przekazane. Serwer musi mie ć pewno ść, iż klucz publiczny należy do określonego klienta. Certyfikat klienta zawiera ć będzie klucz publiczny. Certyfikat będzie podpisany przez jednostk ę certyfikując ą, która potwierdza, iż klucz publiczny należy do określonego klienta. API oraz przykłady Javy odnośnie podpisów cyfrowych można znale źć w [3] i [4]. Przykładowy klient wykorzystujący HTTP Basic Authentication oraz HTTPS ma następując ą posta ć: import org.apache.axis.client.call; import org.apache.axis.client.service; import org.apache.axis.encoding.xmltype; import org.apache.axis.utils.options; import javax.xml.rpc.parametermode; public class RunTaskClientHTTPSBASIC {

public static void main(string [] args) throws Exception { Options options = new Options(args); String endpoint = "https://localhost:8443/axis/accessedbyhttps/runtaskserver.jws"; System.setProperty("javax.net.ssl.trustStore", "/home/pczarnul/.keystore"); args = options.getremainingargs(); String method = "RunTask"; String s1 = new String(args[0]); Service service = new Service(); Call call = (Call) service.createcall(); call.settargetendpointaddress( new java.net.url(endpoint) ); call.setoperationname( method ); call.addparameter( "op1", XMLType.XSD_STRING, ParameterMode.IN ); call.setreturntype( XMLType.XSD_INT ); call.setusername("runtaskuser"); call.setpassword("uio9"); Integer ret=(integer) call.invoke( new Object [] { s1 ); System.out.println("Got result : " + ret);

Literatura 1. AXIS User's Guide. http://ws.apache.org/axis/java/user-guide.html Gopalakrishnan U, Rajesh Kumar Ravi, Web services security, Part I, http://www- 106.ibm.com/developerworks/webservices/library/ws-sec1.html Thomas Gutschmidt Introduction to Digital Signatures in Java, http://www.developer.com/java/other/article.php/630851 4. The Java TM Tutorial, Trail: Security in Java 2 SDK 1.2, Lesson: Generating and Verifying Signatures, http://java.sun.com/docs/books/tutorial/security1.2/apisign/index.html