2010-11-05 9 views
5

¿Es posible crear un WebService usando JAX-WS, que luego sería consumido por un cliente WCF usando tal enlace?Java JAX-WS Service con WCF Client

<bindings> 
     <basicHttpBinding> 
      <binding name="CaseObjectServicePortBinding" > 
       <readerQuotas maxDepth="32" maxStringContentLength="8192" maxArrayLength="16384" 
        maxBytesPerRead="4096" maxNameTableCharCount="16384" /> 
       <security mode="TransportWithMessageCredential"> 
        <transport clientCredentialType="Certificate"/> 
        <message clientCredentialType="Certificate" /> 
       </security> 
      </binding> 

     </basicHttpBinding> 
    </bindings> 

he creado un servicio de este tipo, sin WSIT por ahora, sólo un servicio sencillo y quería simplemente ignorar la "seguridad" de cabecera en el mensaje SOAP entrante. Pero falla con:

"No se pudo establecer un canal seguro para SSL/TLS con autorización 'xxxxxxxxxx'."

si cambio:

<security mode="TransportWithMessageCredential"> 
        <transport clientCredentialType="Certificate"/> 
        <message clientCredentialType="Certificate" /> 
       </security> 

a:

<security mode="Transport"> 
        <transport clientCredentialType="Certificate"/> 
        <message clientCredentialType="Certificate" /> 
       </security> 

todo funciona sin problemas. ¿Alguna idea de qué estoy haciendo mal?

Respuesta

0

La respuesta es sí. Puede utilizar BasicHttpBinding o wsHttpBinding

se ha producido el error porque cuando se utiliza TransportWithMessageCredential, el cliente WCF impondrá una seguridad adicional a su mensaje enviado a través del cable, con características de compatibilidad sólo para servicio WCF.

Una vez que lo haya cambiado a Transporte, solo se aplica seguridad de transporte (SSL mediante certificado), por lo que tanto el cliente como el servicio pueden entender cómo comunicarse entre ellos.

Saludos.

0

Al definir la seguridad como TransportWithMessageCredential diga: Quiero un servicio que se comunicará a través del canal de transporte seguro (HTTPS) y quiero pasar las credenciales del cliente en el encabezado SOAP.

Si define Tipo de credencial de certificado en el elemento de mensaje, diga: El encabezado SOAP transportará las credenciales de cliente como perfil de token de certificado x.509. Es un formato interoperable que requiere WS-Security en el servicio.

Si define el tipo de credencial de Certifiate en el elemento de transporte, diga: Quiero autenticación de SSL mutua. No estoy seguro si esto se usa si define TransportWithMessageCredential

0

Esto sucedió en el paso de iniciar la solicitud; la excepción TLS aparece porque el certificado establecido en el cliente no es de confianza. Utilice un certificado con el nombre de destino común, si está utilizando el servicio de uso público el nombre de dominio, use la dirección IP de destino como nombre común y funcionará perfectamente.

PD: Utilice el enlace 'basichttps' en caso de que desee continuar con el tipo de contenido https 'text/xml' soap 11 el valor predeterminado de jaxws