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

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

JAVA I SIECI. MATERIAŁY:

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

Programy typu klient serwer. Programowanie w środowisku rozproszonym. Wykład 5.

Zaawansowane aplikacje internetowe - laboratorium Architektura CORBA.

Programowanie w języku Java

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

Ćwiczenie 1. Kolejki IBM Message Queue (MQ)

Przykłady interfejsu TCP i UDP w Javie

Aplikacja wielowątkowa prosty komunikator

Remote Method Invocation 17 listopada 2010

Katalog książek cz. 2

Aplikacje RMI

Remote Method Invocation 17 listopada Dariusz Wawrzyniak (IIPP) 1

Aplikacje w środowisku Java

Wywoływanie metod zdalnych

Podejście obiektowe do budowy systemów rozproszonych

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

Ćwiczenie 9 - Zaawansowane metody programowania w sieci komputerowej

Zaawansowane aplikacje internetowe - laboratorium Architektura CORBA.

JAVA. Strumienie wejścia i wyjścia. Pliki - zapis i odczyt

Aplikacje RMI Lab4

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

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

Podstawy i języki programowania

Wywoływanie metod zdalnych

Aplikacje w środowisku Java

Systemy Rozproszone - Ćwiczenie 6

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

Bezpieczne uruchamianie apletów wg

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

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

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ć

Programowanie w Javie Lista nr 1. Wybieramy kategorię Java, a wśród Projektów Java Application i [NEXT]

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

Java programowanie w sieci. java.net RMI

SSL (Secure Socket Layer)

Wprowadzenie do laboratorium. Zasady obowiązujące na zajęciach. Wprowadzenie do narzędzi wykorzystywanych podczas laboratorium.

Strumienie, pliki. Sortowanie. Wyjątki.

Tworzenie i wykorzystanie usług

Komunikacja z użyciem gniazd aplikacje klient-serwer

Programowanie rozproszone w języku Java

I. Uruchomić setup i postępować według instrukcji

Exchange Konfiguracja protokołu SSL/TLS w serwerze pocztowym Exchange wersja 1.0

Aplikacja wielow tkowa prosty komunikator

1. Czynności przygotowujące aplikację działającą na platformie Java SE Biblioteka5 (należy ją pobrać z załącznika z p.1)

Komunikator internetowy w C#

WYDRA BY CTI. WYSYŁANIE DOKUMENTÓW ROZLICZENIOWYCH I ARCHIWIZACJA Instrukcja do programu

Platformy Programistyczne Zagadnienia sieciowe i wątki

2) W wyświetlonym oknie należy zaznaczyć chęć utworzenia nowej aplikacji (wygląd okna może się różnić od powyższego); kliknąć OK

Protokół JDBC współpraca z relacyjnymi bazami danych lab3

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

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

1 Klasa File. 2 Writer. Programowanie w j zyku Java - Adam Krechowicz. Klasa File zapewnia podstawowe operacje na plikach

Aplikacja Sieciowa wątki po stronie klienta

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

Java, bazy danych i SSL

Aplikacje internetowe i rozproszone - laboratorium

Przykłady ataków. Błąd dotyczy np. forów dyskusyjnych z możliwością umieszczania plików grafcznych. Pozwala to na wykonanie dowolnego żądania HTTP.

Podstawy Secure Sockets Layer

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

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

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

Zaawansowane aplikacje WWW - laboratorium

Dokumentacja techniczna

Dokumentacja do API Javy.

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

INSTRUKCJA INSTALACJI SYSTEMU

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

# katalog, w który zapisywane są certyfikaty crl_dir=$dir/crl

Programowanie współbieżne i rozproszone

Protokół JDBC współpraca z relacyjnymi bazami danych lab4. Dr inż. Zofia Kruczkiewicz Programowanie aplikacji internetowych

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

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

Exchange Konfiguracja protokołu SSL/TLS w serwerze pocztowym Exchange wersja 1.0 UNIZETO TECHNOLOGIES S.A.

INŻYNIERIA BEZPIECZEŃSTWA LABORATORIUM. VPN / OpenVPN

Komunikatory typu TCP/IP lab2. Dr inż. Zofia Kruczkiewicz Programowanie aplikacji internetowych

Java Zadanie 1. Aby poprawnie uruchomić aplikację desktopową, należy zaimplementować główną metodę zapewniającą punkt wejścia do programu.

Opis komunikacji na potrzeby integracji z systemem klienta (12 kwiecień, 2007)

Instrukcja postępowania w celu złożenia podpisu elektronicznego na dokumentach składanych do SISC za pośrednictwem portalu PUESC.

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

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

Exchange Konfiguracja protokołu SSL/TLS w serwerze pocztowym Exchange wersja 1.0

Interfejsy w Javie. Przykład zastosowania interfejsów:

Konfiguracja serwera OPC/DDE KEPSServerEX oraz środowiska Wonderware InTouch jako klienta DDE do wymiany danych

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

Wykład 2: Podstawy Języka

Bezpieczeństwo systemów informatycznych

Instrukcja postępowania w celu złożenia podpisu elektronicznego na dokumentach składanych do SISC za pośrednictwem portalu PUESC.

Opis aktualizacji programu Kancelaria Komornika

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

D:\DYDAKTYKA\ZAI_BIS\_Ćwiczenia_wzorce\04\04_poprawiony.doc 2009-lis-23, 17:44

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

Języki i metody programowania Java Lab1 Zofia Kruczkiewicz

Metody Metody, parametry, zwracanie wartości

Aplikacje Internetowe. Najprostsza aplikacja. Komponenty Javy. Podstawy języka Java

Bezpieczeństwo w aplikacjach Java

Transkrypt:

Łukasz Przywarty 171018 Wrocław, 17.01.2013 r. Grupa: WT/N 11:15-14:00 Sprawozdanie z zajęć laboratoryjnych: OpenSSL - API Prowadzący: mgr inż. Mariusz Słabicki 1 / 5

1. Treść zadania laboratoryjnego W ramach zajęć laboratoryjnych należało napisać aplikację klient-serwer. Komunikacja między serwerem i klientem miała być bezpieczna. W tym celu trzeba było wykorzystać certyfikaty serwera oraz klienta wygenerowane podczas poprzednich zajęć. Aplikacje powinny nawiązywać między sobą bezpieczne połączenie SSL i wzajemnie weryfikować swoje certyfikaty. Należało również określić rodzaj aplikacji, którą się implementuje, na przykład: serwer chat pozwalający na połączenie się kilku klientów i przesyłanie komunikatów, tablica ogłoszeń klient łączy się z serwerem i odczytuje komunikaty pozostawione dla niego lub publiczne, sam może kasować swoje ogłoszenia i wysyłać nowe. Zadanie kładzie nacisk na weryfikację tożsamości klienta za pomocą certyfikatu oraz samo ustanowienie szyfrowanej komunikacji za pomocą SSL. W miarę możliwości należało zapewnić wybór parametrów połączenia np. konkretnej metody szyfrowania. 2. Realizacja zadań laboratoryjnych Wykonywania zadania laboratoryjnego rozpoczęto od określenia rodzaju aplikacji, która będzie implementowana. Wybór padł na aplikację chat. Program został napisany w języku JAVA. Na samym początku połączono certyfikaty serwera i klienta do pojedynczych plików PEM (listing 1). Listing 1: Łączenie podpisanych certyfikatów i kluczy cat CA/private/server.key CA/certs/server.crt > CA/certs/server.pem cat CA/private/user1.key CA/certs/user1.crt > CA/certs/user1.pem Certyfikaty wyeksportowano dodatkowo do plików PKCS12 (tylko takie pliki obsługują biblioteki z pakietu java.security) listing 2. Listing 2: Eksport certyfikatów do plików PKCS12 openssl pkcs12 -export -out CA/certs/server.p12 -in CA/certs/server.pem -name "Server" openssl pkcs12 -export -out CA/certs/user1.p12 -in CA/certs/user1.pem -name "Lukasz Przywarty" Aby aplikacja poprawnie akceptowała certyfikaty podpisane przez własne CA, należy dodać CA do 2 / 5

zbioru cacerts, który jest przechowywany w jednym z folderów utworzonych przez JDK podczas instalacji prezentuje to listing 3. Listing 3: Dodawanie CA do zbioru zaufanych wystawców sudo keytool -import -alias myca -file CA/certs/ca.crt -keystore /etc/ssl/certs/java/cacerts Po wykonaniu kroków przygotowawczych przystąpiono do realizacji właściwego zadania. Korzystano przy tym z klas zgromadzonych w pakietach: java.net.ssl klasy odpowiedzialne za transmisję przy wykorzystaniu SSL, java.security a dokładnie klasa KeyStore reprezentująca zbiór kluczy i certyfikatów zapisanych w pamięci. Klasę serwera prezentuje listing 4. Listing 4: Klasa server 1. public class server { 2. public static void main(string[] args) { 3. String ServerCert = "server.p12"; 4. String CertPassword = "bus12"; 5. 6. try { 7. KeyStore ks = KeyStore.getInstance("PKCS12"); 8. ks.load(new FileInputStream(ServerCert), CertPassword.toCharArray()); 9. KeyManagerFactory kmf=keymanagerfactory.getinstance("sunx509"); 10. kmf.init(ks, CertPassword.toCharArray()); 11. SSLContext sc = SSLContext.getInstance("SSL"); 12. sc.init(kmf.getkeymanagers(), null, null); 13. System.out.print("Server started \n"); 14. SSLServerSocketFactory ssf = sc.getserversocketfactory(); 15. SSLServerSocket ServerSecureSocket = (SSLServerSocket) ssf.createserversocket(8000); 16. ServerSecureSocket.setNeedClientAuth(true); 17. SSLSocket SecureSocket = (SSLSocket)ServerSecureSocket.accept(); 18. 19. BufferedWriter SecureOutput = new BufferedWriter(new OutputStreamWriter(SecureSocket.getOutputStream())); 20. BufferedReader SecureInput = new BufferedReader(new InputStreamReader(SecureSocket.getInputStream())); 21. 22. String temp = "Welcome to the Chat Jungle!"; 23. SecureOutput.write(temp,0,temp.length()); 24. SecureOutput.newLine(); 25. SecureOutput.flush(); 26. while ((temp=secureinput.readline())!= null) { 3 / 5

27. System.out.println(temp); 28. SecureOutput.write(temp,0,temp.length()); 29. SecureOutput.newLine(); 30. SecureOutput.flush(); 31. } 32. SecureOutput.close(); 33. SecureInput.close(); 34. SecureSocket.close(); 35. ServerSecureSocket.close(); 36. } catch (Exception e) { 37. System.err.println(e.toString()); 38. } 39. } 40.} Objaśnienia dotyczące komunikacji SSL: linia 3 deklaracja nazwy certyfikatu serwera (w formacie PKCS12), linia 4 deklaracja hasła do certyfikatu serwera, linie 7 do 12 utworzenie kontekstu SSL (określenie typu certyfikatu oraz klucza, określenie rodzaju szyfrowania, inicjalizacja), linie 14 do 17 stworzenie bezpiecznego gniazdka do nawiązywania połączeń SSL (na porcie numer 8000), linie 19 do 20 deklaracja szyfrowanych strumieni do wymiany danych, linie 26 do 30 pętla odpowiedzialna za przekazywanie komunikatów, linie 32 do 35 zamykanie szyfrowanych strumieni i gniazdek. Jeśli chodzi o klasę klienta, wygląda ona bardzo podobnie do klasy serwera listing 5. Listing 5: Klasa klienta 1. public class client { 2. public static void main(string[] args) { 3. String ClientCert = "user1.p12"; 4. String CertPassword = "bus12"; 5. 6. try { 7. KeyStore ks = KeyStore.getInstance("PKCS12"); 8. ks.load(new FileInputStream(ClientCert), CertPassword.toCharArray()); 10. KeyManagerFactory kmf=keymanagerfactory.getinstance("sunx509"); 11. kmf.init(ks, CertPassword.toCharArray()); 12. SSLContext sc = SSLContext.getInstance("SSL"); 13. sc.init(kmf.getkeymanagers(), null, null); 14. SSLSocketFactory sf = sc.getsocketfactory(); 15. SSLSocket SecureSocket = (SSLSocket) 4 / 5

sf.createsocket("localhost", 8000); 16. SecureSocket.startHandshake(); 17. 18. BufferedWriter SecureOutput = new BufferedWriter(new OutputStreamWriter(SecureSocket.getOutputStream())); 19. BufferedReader SecureInput = new BufferedReader(new InputStreamReader(SecureSocket.getInputStream())); 20. 21. String temp = null; 22. while ((temp=secureinput.readline())!= null) { 23. System.out.println(temp); 24. temp = new BufferedReader(new InputStreamReader(System.in)).readLine(); 25. temp = SecureSocket.getLocalPort()+": "+temp; 26. SecureOutput.write(temp,0,temp.length()); 27. SecureOutput.newLine(); 28. SecureOutput.flush(); 29. } 30. SecureOutput.close(); 31. SecureInput.close(); 32. SecureSocket.close(); 33. } catch (Exception e) { 34. System.err.println(e.toString()); 35. } 36. } 37. } W tym przypadku również określono lokalizację certyfikatu (tym razem klienta) oraz hasło do certyfikatu. Następnie utworzono kontekst SSL oraz bezpieczne gniazdko na porcie 8000. Kolejne linie kodu deklarują szyfrowane strumienie. W tym momencie zawarto również pętlę odpowiedzialną za wyświetlanie komunikatów. Całość wieńczy fragment zamykający bezpieczne gniazdko i strumienie. 3. Wyniki Program działa poprawnie. Zarówno serwer jak i klient musi potwierdzić swoją tożsamość aby połączenie zostało poprawnie nawiązane. Rysunek 1: Okno klienta 5 / 5