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:
- 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?
- 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.
non chiaro e richiesto autoapprendimento e ricerca –