2012-09-26 18 views
47

Estoy tratando de enviar una solicitud a un servicio web existente. Este servicio web no está gobernado por mí. La política de seguridad de este servicio web requiere que envíe mi cadena de certificados completa en mi solicitud SOAP. Mi cadena de certificados contiene 3 certificados. No hay problemas con la configuración de la cadena de certificados, ya que puedo probar su validez (y lo he hecho).Soporte para X509PKIPathv1 en xws-security para Spring-WS

La configuración de seguridad para esta configuración (= el envío de la cadena de certificados completa en la solicitud), es:

<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> 

que estoy tratando de lograr esto a través Spring-WS. Spring-WS usa spring-ws-security para seguridad. Spring-ws-security delega a 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 seguridad viene en 2 sabores:

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

y

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

El primero se utiliza para la primavera de Seguridad WS. El segundo es legado.

La aplicación de mi configuración XWSS en xws-security se realiza en una clase llamada BinarySecurityToken. BinarySecurityToken tiene un campo llamado

valueType 

el Javadoc de valueType dice que tiene soporte para X509PKIPathv1 (entre otros). Sin embargo, no lo hace, según lo declarado por el colocador:

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; 
} 

Los MessageConstants clase no (aún) tienen una estática para X509PKIPathv1. Cuando ejecuto mi código, consigo el resultado esperado:

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

pude mirar el código fuente de la herencia com.sun.xml.wss.xws-security:3.0. A pesar de mis esfuerzos, no he encontrado el código fuente de com.sun.xml.wsit.xws-security-1.3.1. Sin embargo, creo que el código es el mismo. Intenté ambas bibliotecas y ambas me dieron la misma excepción. Lo probé utilizando la seguridad spring-ws predeterminada y el uso de declaraciones de dependencia explícitas en ambas bibliotecas (una a la vez).

Mis preguntas:

  1. nadie ha sido capaz de utilizar XWS seguridad para la generación de una firma X 509 con un valueType de X509PKIPathv1 y una keyReferenceType que es directa?
  2. ¿Existen otras implementaciones de xws-security que ofrecen esto? ¿O debería considerar un enfoque completamente diferente como Wss4j?

He considerado volver a escribir BinarySecurityToken, pero eso probablemente también implicaría reescribir la firma X509 de SignatureProcessor en DSIG.

+0

no es claro y requiere autoaprendizaje y encontrar –

Respuesta

0

El valueType puede ser # X509v3, # X509PKIPathv1

que se encuentra aquí XWS-SecurityIntro4 Ha intentado esos valores específicamente en lugar de una URL?

+0

La documentación (y JavaDoc) establece que .. El colocador obviamente no lo hace. –

2

Tienes un problema interesante aquí.

Por lo que pude con mi Google-fu, existe apoyo a # X509PKIPathv1 en algunos proyectos (por ejemplo, Oracle's XMLSec o Open SAML), sin embargo, no está muy extendida e incluso aplicaciones como jabón de interfaz de usuario don't support it para SOAP-WS.

No solo eso, sino que otros lenguajes/frameworks tienen la misma falta de soporte, como Delphi y .NET, IBM JRE.

Lo que podría hacer, basado en this SO y especialmente this SO está implementando su propio WebServiceTemplate/WebServiceMessageSender.

+1

Así es, he pasado mucho tiempo buscando la manera de hacer que .NET genere el X509PKIPathV1, y en esta página son muy claros y sin compatibilidad. https://msdn.microsoft.com/es-es/library/bb885188(v=vs.110).aspx "WSS X509 Token Profile 1.0 y 1.1 definen también # X509PKIPathv1 y # PKCS7 como tipos de valor. WCF no no es compatible con estos tipos ". –