1 Integracja aplikacji Wykład 4Piotr Czapiewski Wydział Informatyki ZUT Integracja aplikacji Wykład 4
2 Bezpieczeństwo usług sieciowych
3 Cele zabezpieczeń Wzajemne uwierzytelnienie Autoryzacja użytkownikówPoufność komunikatów Nienaruszalność komunikatów
4 Trzy poziomy zabezpieczania Web ServicesBezpieczna warstwa transportowa Autoryzacja użytkowników WS-Security
5 Bezpieczna warstwa transportowaWłączenie obsługi protokołu HTTPS Wymuszenie dostępu do usługi sieciowej przez HTTPS Wygenerowanie certyfikatu serwera Konfiguracja serwera aplikacji Połączenie z usługą przez HTTPS W razie potrzeby: dodanie certyfikatu serwera do zaufanych wystawców Konfiguracja klienta Certyfikaty X.509 Zapewnienie poufności Zapewnienie integralności (nienaruszalności komunikatów) Uwierzytelnienie serwera Opcjonalnie: uwierzytelnienie klienta Protokół HTTPS (SSL)
6 Autoryzacja użytkownikówMiejsce przeprowadzenia autoryzacji Wskazane oddzielenie kodu usługi od mechanizmu autoryzacji Autoryzacja przez klasę publikującą – Endpoint Autoryzacja przez serwer aplikacji (np. Tomcat, Glassfish) HTTP-based authentication Dane logowania przesyłane w nagłówku żądania HTTP Role-based authorization Serwer aplikacji zarządza rolami użytkowników i dostępem do usług
7 Przykład Autoryzacja przez HTTP dla usługi publikowanej przez klasę Endpoint
8 HTTP Basic Authentication Serwer usługi – Java, JAX-WS, publikacja przez EndpointInetSocketAddress addr = new InetSocketAddress("localhost", 666); HttpServer server = HttpServer.create(addr, 5); server.start(); HttpContext context = server.createContext("/zegarynka"); context.setAuthenticator(new BasicAuthenticator("test") { public boolean checkCredentials(String user, String pass) { return "student".equals(user) && "pandatrzy".equals(pass); } }); Zegarynka z = new Zegarynka(); Endpoint endpoint = Endpoint.create(z); endpoint.publish(context);
9 HTTP Basic Authentication Klient usługi – C#BasicHttpBinding binding = new BasicHttpBinding(); binding.Security.Mode = BasicHttpSecurityMode.TransportCredentialOnly; binding.Security.Transport.ClientCredentialType = HttpClientCredentialType.Basic; EndpointAddress remoteAddr = new EndpointAddress("http://localhost:666/zegarynka"); ZegarynkaClient zc = new ZegarynkaClient(binding, remoteAddr); zc.ClientCredentials.UserName.UserName = "student"; zc.ClientCredentials.UserName.Password = "pandatrzy"; string s = zc.ktoraGodzina();
10 HTTP Basic Authentication Konwersacja HTTPPOST /zegarynka HTTP/1.1 Content-Type: text/xml; charset=utf-8 SOAPAction: "" Authorization: Basic c3R1ZGVudDpwYW5kYXRyenk= Host: :666 Content-Length: 142
11 HTTP Basic Authentication Konwersacja HTTP – błąd autoryzacjiPOST /zegarynka HTTP/1.1 Content-Type: text/xml; charset=utf-8 SOAPAction: "" Authorization: Basic c3R1ZGVudDpkc2Zhc2Rm Host: :666 Content-Length: 142
12 Przykład Publikowanie usługi na serwerze TomcatZabezpieczenie usługi (HTTPS, autoryzacja)
13 Instalacja usługi na serwerze Tomcatpackage pc.ws; import ...; @WebService() public class Zegarynka { @WebMethod public String ktoraGodzina() { return Calendar.getInstance().getTime().toString(); } @WebMethod public String zakukaj(int ileRazy) { String s = ""; for(int i=0; i
14 Instalacja usługi na serwerze Tomcat Plik webInstalacja usługi na serwerze Tomcat Plik web.xml – deskryptor aplikacji webowej ...
15 Instalacja usługi na serwerze Tomcat Plik sun-jaxws.xml
16 Włączenie protokołu HTTPSWygenerowanie klucza – narzędzie keytool Konfiguracja serwera – plik server.xml keytool -genkey -alias tomcat –keyalg RSA ...
17 Wymuszenie protokołu HTTPS Konfiguracja usługi – plik web.xml...
18 Autoryzacja – definicja użytkownikówPlik tomcat-users.xml ...
19 Autoryzacja – zabezpieczenie usługi Konfiguracja usługi – plik web.xml
20 Klient usługi Generowanie klas pośredniczących NetbeansNew project -> Java Application New file -> Web Service Client Z linii poleceń – narzędzie wsimport wsimport -keep -p nazwa.pakietu
21 Klient usługi Kod wersji bez autoryzacjiZegarynkaService zs = new ZegarynkaService(); Zegarynka zp = zs.getZegarynkaPort(); String s = zp.ktoraGodzina(); System.out.println(s);
22 Klient usługi Kod wersji z autoryzacją HTTPZegarynkaService zs = new ZegarynkaService(); Zegarynka zp = zs.getZegarynkaPort(); BindingProvider prov = (BindingProvider)zp; prov.getRequestContext().put(BindingProvider.USERNAME_PROPERTY, "student"); prov.getRequestContext().put(BindingProvider.PASSWORD_PROPERTY, "pandatrzy"); String s = zp.ktoraGodzina(); System.out.println(s);
23 WS-Security
24 WS-Security i powiązane protokołyWS-Policy WS-Secure Conversation WS-Trust WS-Federation WS-Privacy WS-Authorization
25 WS-Security Rozszerzenie protokołu SOAPProtokół komunikacyjny określający sposób zabezpieczania usług sieciowych Zapewnienie integralności i poufności SAML (Security Assertion Markup Language), Kerberos, certyfikaty X.509 XML Encryption, XML Signature Protokół określa: sposób dołączania podpisów do komunikatów SOAP sposób szyfrowania komunikatów SOAP sposób dołączania tokenów (także binarnych; Kerberos tickets, certfykaty X.509)
26 WS-Security Uwierzytelnienie UsernameToken ProfileX.509 Certificate Token Profile SAML (Security Assertion Markup Language) Token Profile
27 WS-Security: SOAP header
28 XML Signature ......
29 XML Encryption
30 WS-Security – powiązane specyfikacjeSpecyfikowanie i komunikowanie polityki zabezpieczeń WS-Policy Wydawanie, odnawianie i walidacja tokenów zabezpieczających Sposoby ustanawiania zaufania pomiędzy stronami WS-Trust Współdzielenie kontekstu zabezpieczeń Bezpieczne konwersacje pomiędzy witrynami z użyciem Web Services WS-SecureConversation Mechanizmy współdzielenia informacji o autentykacji WS-Federation Określenie mechanizmów i polityki autoryzacji klientów usługi WS-Authorization
31 Rodzina protokołów WS-*
32 Rodzina protokołów WS-*Specyfikacje rozszerzające możliwości Web Services WS-Security, WS-Policy, WS-Authorization, WS-Trust, WS- Federation, WS-Secure Conversation, WS-Privacy… WS-Reliability WS-Transaction WS-Addressing, WS-Transfer, WS-Eventing, WS-Notification, WS- Discovery, WS-MetadataExchange, …
33 WS-Reliability Protokół wiarygodnej wymiany komunikatów pomiędzy usługami sieciowymi Reliable Messaging Reliable Messaging (RM) is the execution of a transport-agnostic, SOAP-based protocol providing quality of service in the reliable delivery of messages
34 WS-Reliability Specyfikacja definiuje następujące mechanizmy:Guaranteed message delivery, or At-Least-Once delivery semantics. Guaranteed message duplicate elimination, or At-Most-Once delivery semantics. Guaranteed message delivery and duplicate elimination, or Exactly- Once delivery semantics. Guaranteed message ordering for delivery within a group of messages.
35 WS-Transaction Specyfikacja określająca sposób obsługi transakcji w usługach sieciowych Określa dwa rodzaje koordynacji działań w usługach sieciowych: Atomic Transaction (AT) – dla pojedynczych operacji Business Activity (BA) – dla transakcji długoterminowych Powiązane specyfikacje: WS-Coordination WS-AtomicTransaction WS-BusinessActivity