Passa ai contenuti principali

WS-Security

 WS-Security


Definizione

Da WikipediaWeb Services Security (WS-Security, WSS) è una estensione di SOAP per estendere la sicurezza ai servizi web ed è una specifica redatta da OASIS. Il protocollo specifica come può essere rafforzata l'integrità e la confidenzialità e permette la comunicazione di vari token di sicurezza, come SAML, Kerberos e X.509. Il principale obiettivo è l'utilizzo della firma XML e della crittazione XML per garantire la sicurezza end-to-end a livello di messaggio.

Contesto

Solitamente i meccanismi di sicurezza a livello di trasporto sono quelli più utilizzati quando si opera in un contesto popolato da intermediari o pari livello come negli ambienti di Enterprise Service Bus. Può però sorgere l'esigenza di criptare campi diversi con chiavi diverse e in questi casi servono dei meccanismi a livello di messaggio o applicazione (end-to-end).

Introdurre la sicurezza a livello di trasporto non hanno nessun impatto sulle applicazioni né tantomeno, nello specifico a livello di WSDL, mentre la sicurezza a livello di messaggio impatta sicuramente su vincoli, implementazioni di web service e specifiche e quindi anche sul WSDL.

Cosa è

WS-Security punta ad un arricchimento del messaggio SOAP in modo da garantire l'integrità e la confidenza supportando PKI, Kerberos, SSL e altre tecnologie di firma e criptazione.

Come funziona

La specifica si basa su un token e definisce un meccanismo generico per fare in modo che il token sia associato al contenuto del messaggio (supportando tipi diversi di token). La specifica WS-Security descrive anche come criptare tokens e includere chiavi "opache" (ricevute incapsulate o criptate).

Vengono definiti tre meccanismi di sicurezza. Assieme alla possibilità di inviare tokens di sicurezza come parte del messaggio, ci sono altri due meccanismi per garantire l'integrità e la confidenzialità del messaggio.

Usandone solo uno di questi non si può garantire la sicurezza completa di un Web Service, ma possono essere combinati fra loro come, ad esempio, firmando e criptando parte di un messaggio e fornendo un security token associato alla chiave usata per la firma e la criptazione.

Definizioni

Concordiamo su questi termini:

Claim: una dichiarazione fatta da un’entità, racchiude di solito una serie di parametri come nome, chiave, gruppo, privilegi e così via;
Security Token: una collezione di uno o più claims, in particolare un Signed Security Token è un Security Token firmato e criptato da un’autorità (ad esempio con un certificato X.509 o un ticket Kerberos);
Trust: caratteristica di un’entità che è disposta a contare su un’altra per eseguire azioni e/o fare asserzioni su un insieme di argomenti o ambiti.
Certificato X.509è uno standard proposto dall'Unione internazionale delle telecomunicazioni (ITU-T), usato per definire il formato dei certificati a chiave pubblica (PKC) e delle autorità di certificazione (CA). I certificati vengono utilizzati per la validazione dell'identità e la trasmissione di dati criptati che solo il possessore (persona, organizzazione o applicazione) di uno specifico certificato è in grado di decifrare e leggere. Questi vengono rilasciati dalle Certificate authority (CA), un soggetto terzo fidato che assicura la corrispondenza di una chiave pubblica a una determinata identità. Uno degli usi più diffusi di X.509 è nell'ambito internet, il certificato SSL/TLS viene usato nell'omonimo protocollo per criptare le comunicazioni tra un sito web e il nostro browser.

Il modello di sicurezza dei messaggi WS-Security

In WS-Security, i security tokens possono essere combinati con firma digitale e criptografia per proteggere e autenticare messaggi SOAP. I claims dei security tokens possono essere usati per affermare l’associazione tra identità e chiavi. Un’autorità può fare da garante per i claims contenuti nei security tokens fornendo una chiave utile a criptarli o firmarli (misura raccomandata), autenticandoli. Ad esempio, è possibile usare un certificato X.509 associando un’identità pubblica ad una chiave pubblica. In assenza di una garanzia di terze parti, il destinatario può scegliere se accettare i claims dichiarati nel token in base alla fiducia riposta nel produttore del messaggio.

La firma consente di verificare origine e integrità del messaggio. Inoltre, può essere usata per dimostrare la conoscenza di una chiave, tipicamente di terze parti, confermando l’associazione tra security token e messaggio creato.

L’integrità dei messaggi è gestita da XML Signature (XMLSIG) in congiunzione con i security tokens per assicurare che eventuali modifiche/corruzioni vengano individuate. Il meccanismo è estendibile e studiato in modo da supportare firme multiple e attori/ruoli potenzialmente multipli.

La confidenzialità è gestita da XML Encryption (XMLENC) in congiunzione con i security tokens per assicurare la confidenzialità a porzioni del messaggio SOAP. Tale meccanismo è studiato per supportare diversi attori/ruoli.

Le componenti del messaggio

wsse:Security: è il sistema di associazione delle informazioni di sicurezza a specifici destinatari (finali o intermediari). Può essere presente più volte in un messaggio SOAP. Viene detto Security Header. Un messaggio può avere più security header se ha più destinatari. Nel security header ci sono gli attributi elencati nella sezione Gli attributi del messaggio.

wsse:SecurityToken: sezione dedicata a gestire le informazioni d'autenticazione

Message confidentiality: Sezione destinata a gestire le informazioni di cifratura del messaggio (XML Encryption

Message integrity: Sezione destinata a gestire le informazioni di firma del messaggio o relative parti (XML Signature)

wsu:TimeStamp: sezione destinata a contenere le informazioni temporali del messaggio, che possono essere usate dal destinatario per stabilire la validità dell'informazione contenuta.




Gli attributi del messaggio

/wsse:Security/@S11:actor : Attributo (SOAP 1.1) opzionale per identificare un attore
/wsse:Security/@S12:role : Attributo (SOAP 1.2) opzionale per identificare un ruolo
/wsse:Security/@S11[S12]:mustUnderstand : Attributo (SOAP 1.1 [1.2]) opzionale utilizzato per indicare se un header è opzionale o obbligatorio per un destinatario. Quando un header include un attributo mustUnderstand="true" il destinatario deve generare un errore SOAP se non implementa le specifiche WSS:SOAP Message Security corrispondenti al namespace o se non in grado di processare i security tokens inclusi nell’haeder. In base a policies di sicurezza locali, il destinatario potrebbe comunque ignorare alcuni elementi o estensioni dell’header.
/wsse:Security/{any} : Meccanismo estensibile che consente di passare diversi tipi di informazioni di sicurezza; le informazioni passate dovrebbero rispettare uno schema, viceversa potrebbero generare errori durante l’esecuzione
/wsse:Security/@{any}Meccanismo estensibile che consente di passare diversi attributi; gli attributi dovrebbero rispettare uno schema, viceversa potrebbero generare errori durante l’esecuzione




Licenza Creative Commons
Quest'opera è distribuita con Licenza Creative Commons Attribuzione - Condividi allo stesso modo 4.0 Internazionale

Commenti

Post popolari in questo blog

Telecamere Ip con accesso "nascosto"

Telecamere Ip con accesso "nascosto" Storia triste di un auto-hacking obbligato che mi ha fatto scoprire come la nostra privacy è realmente messa a rischi. Storia Ho acquistato dal mercatino/fiera del Radioamatore di Fasano quattro telecamere IP. La scatola riporta "Smart Camera" LF4810. Ne ho montata una e testata in tutte le sue funzionalità per oltre un mese. Chiaramente la manualistica scarsissima, come da tradizione in questi prodotti cinesi di costo molto concorrenziale, consiste in un "pieghevole" di 4 facciate. Chiaramente non erano documentate le impostazioni necessarie per attivare i protocolli ONVIF e RTSP che mi sono indispensabili per l'uso che ne devo fare. Nonostante questa scarsa documentazione dopo l'installazione base fatta con l'apposita app: tutto sembrava corretto. Chiaramente la prima azione che ho compiuto è stata quella di cambiare la password che di default è "123". Subito dopo h...

Dynamic DNS con Duckdns.org in HTTPS

Obiettivo Avere un dominio https con certificato valido da usare come endpoint pubblico per Homeassistant e per un WebHook per i bot telegram. Fase 1 Registrazione del dominio in un servizio di dynamic DNS come https://www.duckdns.org/   : Scegliere per quale sistema operativo installare il client che si occuperà dell'aggiornamento dell'ip: Seguire la semplice guida per la configurazione del processo cron: Fase 2 Creazione del certificato e installazione sul server. Di tutto questo si occuperà una applicazione che si chiama certbot. $ sudo add-apt-repository ppa:certbot/certbot $ sudo apt install python-certbot-apache $ sudo certbot --apache -d ol3.duckdns.org -d www.ol3.duckdns.org Fase 3 Esporre il servizio https sulla rete pubblica. Aprire o reindirizzare la porta 443 verso l'host sul quale si è fatta la configurazione di certbot dal proprio router. Il certificato di certbot è valido per novanta giorn...

JHipster - Uso base

Cosa è JHipster è un "generatore di applicazioni" che fornisce tutto lo stack necessario ad implementare una applicazione web e/o a microservizi basata su Spring Boot e AngularJs. E' dotato di un marketplace di componenti già pronte: https://www.jhipster.tech/#modules E' dotato di uno strumento web per la modellazione dello schema E-R: https://start.jhipster.tech/jdl-studio/ Prerequisiti - Java 8  - Node.js (usare la versione LTS 64-bit) - NPM viene installato con Node.js ma va aggiornato      $ npm install -g npm - Per usare il JHipster Marketplace, installare Yeoman:       $ npm install -g yo Uso base Gli step, presi dal sito ufficiale sono questi: 1. Installare JHipster:       $ npm install -g generator-jhipster Nota: per installare una versione specifica del generator:   $ npm install -g generator-jhipster@6.0.5 2. Crea una nuova directory ed entra dentro questa:   $ mkdir ...