Guida all'implementazione della WS-Security con CXF

Introduzione

Con Servicegen è possibile definire la WS-Security di un servizio applicativo CXF modellando le caratteristiche specifiche di sicurezza (WSSecuritySpec).

Per configurare un servizio al fine di rendere sicuri i suoi messaggi è necessario modellare un WSEndpoint e quindi definire una sequenza di intercettori (WSEndpointChannel) che il messaggio dovrà attraversare in ingresso (--> IN WSEndpointChannel) e\o uscita (<-- OUT WSEndpointChannel) per securizzare il messaggio.

Ogni WSEndpointChannel contiene la catena di specifiche di sicurezza (WSSecuritySpec) da applicare al canale, quelle possibili sono : autenticazione (WS UsernameToken), integrità(WS Encryption), TimeStamp (WS Timestamp) e confidenzialità(WS Signature).

Esempio WS-Security

Configurazione WSEndpointChannel

Descrizione WSSecuritySpec

WSSecuritySpec Descrizione Definzione per WSEndpointChannel Codice Generato
UsernameToken Abilita l'inserimento di un UsernameToken per l'autenticazione in chiaro
-->IN WSEndpointChannel -->OUT WSEndpointChannel
Specifica che ci si aspetta nell' header del messaggio SOAP un UsernameToken con password inviata in chiaro Specifica che all' header del messaggio dovrà essere applicato un UsernameToken e una password
Nella classe di implementazione del CallbackHandler creata per il WSEndpointChanel viene generata la logica per la gestione della password.

  1. Se siamo nel canale d' ingresso nel impl del CallbackHandler (InInterceptorCallback#WSEndpoint.code#) viene generato il metodo setPassordUsernameToken() con una regione protetta al suo interno per permettere l'inserimento della password
  2. Se siamo nel canale di uscita nel impl del CallbackHandler (OutInterceptorCallback#WSEndpoint.code#) viene generato il metodo validatePassordUsernameToken() per il controllo dello user e della passord.
Timestamp Permette di gestire la temporalità dei messaggi
-->IN WSEndpointChannel -->OUT WSEndpointChannel
Specifica che ci si aspetta un Timestamp nel messaggio in ingresso Specifica che deve essere applicato un Timestamp nel messaggio di uscita
Signature Abilita la firma del messaggio.
-->IN WSEndpointChannel -->OUT WSEndpointChannel
Specifica che ci si aspetta un messaggio firmato e nel file di confugurazione avremo definite le properties per verificare la firma del messaggio Specifica che il body del messaggio inviato dovrà essere firmato con la chiave privata definita tra i file di configurazione
Nella classe di implementazione del CallbackHandler creata per il WSEndpointChanel di uscita (OutInterceptorCallback#WSEndpoint.code#) viene generata la logica per la gestione delle password di lettura dei certificati (setPasswordSignature) .

Il generatore produrrà i file di properties per poter accedere ai keystore\trustore (#codiceServizio##WSEndpoint.code#.ks.properties e/o #codiceServizio##WSEndpoint.code#.ts.properties ).

Per la definizione delle seguenti property :

  1. org.apache.ws.security.crypto.merlin.keystore.user --> alias chiave privata
  2. org.apache.ws.security.crypto.merlin.keystore.password --> indica la password per accedere al keystore/trustore
  3. org.apache.ws.security.crypto.merlin.file --> indica il path del keystore/trustore
E' necessario valorizzare le seguenti variabili d'ambiente:
  1. #codiceServizio##WSEndpoint.code#.user
  2. #codiceServizio##WSEndpoint.code#.ks.password
  3. #codiceServizio##WSEndpoint.code#.ks.file
Encryption Abilita la cifratura del messaggio.
-->IN WSEndpointChannel -->OUT WSEndpointChannel
Specifica che ci si aspetta un messaggio crittografato e nel file di confugurazione avremo definite le properties per decryptare il messaggio Specifica che il body del messaggio inviato dovrà essere cryptato con la chiave pubblica definita tra i file di configurazione
Nella classe di implementazione del CallbackHandler creata per il WSEndpointChanel di ingresso (InInterceptorCallback#WSEndpoint.code#) viene generata la logica per la gestione delle password di lettura dei certificati (setPassordDecrypt).

Il generatore produrrà i file di properties per poter accedere ai keystore\trustore (#codiceServizio##WSEndpoint.code#.ks.properties e/o #codiceServizio##WSEndpoint.code#.ts.properties ).

Per la definizione delle seguenti property :

  1. org.apache.ws.security.crypto.merlin.keystore.user --> alias chiave privata
  2. org.apache.ws.security.crypto.merlin.keystore.password --> indica la password per accedere al keystore/trustore
  3. org.apache.ws.security.crypto.merlin.file --> indica il path del keystore/trustore
E' necessario valorizzare le seguenti variabili d'ambiente:
  1. #codiceServizio##WSEndpoint.code#.userEncrypt
  2. #codiceServizio##WSEndpoint.code#.ks.password
  3. #codiceServizio##WSEndpoint.code#.ks.file