2012-09-26 10 views
47

Sto tentando di inviare una richiesta a un servizio web esistente. Questo servizio web non è governato da me. La politica di sicurezza di questo servizio web mi richiede di inviare la mia catena di certificati completa nella mia richiesta SOAP. La mia catena di certificati contiene 3 certificati. Non ci sono problemi con l'impostazione della catena di certificati, in quanto sono in grado di verificarne la validità (e l'ho fatto).Supporto per X509PKIPathv1 in xws-security per Spring-WS

La configurazione di sicurezza per questa impostazione (= inviare l'intera catena del certificato nella richiesta), è:

<xwss:Sign id="signature"> 
    <xwss:X509Token 
     certificateAlias="alias" 
     keyReferenceType="Direct" 
     valueType="http://docs.oasis-open.org/wss/2004/01/oasis-200401-wss-x509-token-profile-1.0#X509PKIPathv1" /> 
</xwss:Sign> 

Sto cercando di raggiungere questo obiettivo attraverso Spring-WS. Spring-WS usa spring-ws-security per sicurezza. Spring-ws-security delegates to xws-security.

<dependency> 
     <groupId>org.springframework.ws</groupId> 
     <artifactId>spring-ws-security</artifactId> 
     <version>2.1.0.RELEASE</version> 
     <exclusions> 
      <exclusion> 
       <groupId>org.apache.ws.security</groupId> 
       <artifactId>wss4j</artifactId> 
      </exclusion>    
      <exclusion> 
       <groupId>com.sun.xml.wsit</groupId> 
       <artifactId>xws-security</artifactId> 
      </exclusion>    
     </exclusions> 
    </dependency> 

XWS-sicurezza è disponibile in 2 versioni:

<dependency> 
     <groupId>com.sun.xml.wsit</groupId> 
     <artifactId>xws-security</artifactId> 
     <version>1.3.1</version> 
    </dependency> 

e

<dependency> 
     <groupId>com.sun.xml.wss</groupId> 
     <artifactId>xws-security</artifactId> 
     <version>3.0</version> 
    </dependency> 

Il primo è utilizzato da primavera WS Security. Il secondo è eredità.

L'applicazione della mia configurazione XWSS in xws-security avviene in una classe chiamata BinarySecurityToken. BinarySecurityToken ha un campo chiamato

valueType 

La JavaDoc di valueType dice che ha il supporto per X509PKIPathv1 (tra gli altri). Tuttavia, non è così, come affermato da questa setter:

protected void setValueType(String valueType) { 
    if (!(MessageConstants.X509v3_NS.equals(valueType)||MessageConstants.X509v1_NS.equals(valueType))) { 
     log.log(Level.SEVERE,"WSS0342.valtype.invalid"); 
     throw new RuntimeException("Unsupported value type: " + valueType); 
    } 
    this.valueType = valueType; 
} 

Le MessageConstants di classe non lo fa (anche) hanno una statica per X509PKIPathv1. Quando eseguo il mio codice, ottengo il risultato atteso:

Unsupported value type: http://docs.oasis-open.org/wss/2004/01/oasis-200401-wss-x509-token-profile-1.0#X509PKIPathv1 

sono stato in grado di guardare il codice sorgente del patrimonio com.sun.xml.wss.xws-security:3.0. Nonostante i miei sforzi, non ho trovato il codice sorgente di com.sun.xml.wsit.xws-security-1.3.1. Comunque credo che il codice sia lo stesso. Ho provato entrambe le librerie ed entrambi mi danno la stessa eccezione. L'ho provato, usando il predefinito spring-ws-security e usando dichiarazioni di dipendenza esplicite per entrambe le librerie (una alla volta).

Le mie domande:

  1. nessuno è stato in grado di utilizzare XWS-sicurezza per la generazione di una firma X509 con un valueType di X509PKIPathv1 e un keyReferenceType che è diretto?
  2. Esistono altre implementazioni di sicurezza xws che offrono questo? O dovrei guardare ad un approccio completamente diverso come Wss4j?

Ho preso in considerazione la riscrittura di BinarySecurityToken, ma ciò probabilmente implicherebbe anche la riscrittura della firma X509 di SignatureProcessor in DSIG.

+0

non chiaro e richiesto autoapprendimento e ricerca –

risposta

0

Il valueType può essere # X509v3, # X509PKIPathv1

che si trova qui XWS-SecurityIntro4 Hai provato quei valori specificamente invece di un URL?

+0

La documentazione (e JavaDoc) afferma che .. Il setter ovviamente non lo fa. –

2

Interessante problema che hai ottenuto.

Per quanto ho potuto dire con il mio Google-fu, esiste il supporto per # X509PKIPathv1 in alcuni progetti (ad esempio, Oracle's XMLSec o Open SAML), tuttavia non è molto diffusa e anche un'applicazione come sapone UI don't support it per SOAP-WS.

Non solo, ma altri linguaggi/framework hanno la stessa mancanza di supporto, come Delphi e .NET, IBM JRE.

Cosa si può fare, basato su this SO e in particolare this SO sta implementando il proprio WebServiceTemplate/WebServiceMessageSender.

+1

Esatto, ho impiegato molto tempo a cercare un modo per rendere .NET l'X509PKIPathV1, e in questa pagina sono molto chiari con la non compatibilità. https://msdn.microsoft.com/es-es/library/bb885188(v=vs.110).aspx "Il profilo token WSS X509 1.0 e 1.1 definiscono anche # X509PKIPathv1 e # PKCS7 come tipi di valore. non supporta questi tipi ". –