none
Problemas con Conexión Servicio Web *.wsdl RRS feed

  • Pregunta

  • Holas a todos.
    Estoy desesperado con la conexión a un web service con certificados:

    https://extranet.***.***-***.es/axis2surpru/services/gestion***?wsdl

    Llevo mas de un mes y no consigo la respuesta del web service.
    Advierto de antemano que no tengo experiencia en este tipo de servicios y las pruebas que hago son aquellas que obtengo de la nube y sin entender realmente lo que estoy haciendo. Pido disculpas por la extensión de la pregunta.
    El cliente del web service lo estoy desarrollando con C# con Visual Studio 2017.

    Esta es la información sobre la seguridad que me han proporcionado, además de dos certificados, cliente y servidor.

    La seguridad se basa en la especificación de Web Service Security (WSS) implementado en axis2 mediante el módulo Rampart. Esta especificación propone un conjunto estándar de extensiones que pueden ser usadas para construir Web Services Seguros y para garantizar la integridad del contenido del mensaje.
    Se puede consultar esta especificación a través del siguiente enlace:
    http://www.oasis-open.org/committees/download.php/16790/wss-v1.1-spec-os-SOAPMessageSecurity.pdf
    Se ha implementado la siguiente política de seguridad:
        • Todo mensaje SOAP que sea enviado por el CLIENTE deberá ir firmado por el servidor cliente y ser válido únicamente durante una ventana de tiempo finita.
        • Todo mensaje SOAP de respuesta enviado desde el sistema SERVIDOR a una aplicación cliente, deberá ir firmado por el servidor y ser válido únicamente durante una ventana de tiempo finita.
    La política de seguridad se define en el siguiente XML:

    <wsp:Policy wsu:Id="SigOnly" xmlns:wsu="http://docs.oasis-open.org/wss/2004/01/oasis-200401-wss-wssecurity-utility-1.0.xsd" xmlns:wsp="http://schemas.xmlsoap.org/ws/2004/09/policy">
        <wsp:ExactlyOne>
            <wsp:All>
                <sp:AsymmetricBinding xmlns:sp="http://schemas.xmlsoap.org/ws/2005/07/securitypolicy">
                    <wsp:Policy>
                        <sp:InitiatorToken>
                            <wsp:Policy>
                                <sp:X509Token sp:IncludeToken="http://schemas.xmlsoap.org/ws/2005/07/securitypolicy/IncludeToken/Never">
                                    <wsp:Policy>
                                        <sp:WssX509V3Token10/>
                                    </wsp:Policy>
                                </sp:X509Token>
                            </wsp:Policy>
                        </sp:InitiatorToken>
                        <sp:RecipientToken>
                            <wsp:Policy>
                                <sp:X509Token sp:IncludeToken="http://schemas.xmlsoap.org/ws/2005/07/securitypolicy/IncludeToken/Never">
                                    <wsp:Policy>
                                        <sp:WssX509V3Token10/>
                                    </wsp:Policy>
                                </sp:X509Token>
                            </wsp:Policy>
                        </sp:RecipientToken>
                        <sp:AlgorithmSuite>
                            <wsp:Policy>
                                <sp:TripleDesRsa15/>
                            </wsp:Policy>
                        </sp:AlgorithmSuite>
                        <sp:Layout>
                            <wsp:Policy>
                                <sp:Strict/>
                            </wsp:Policy>
                        </sp:Layout>
                        <sp:IncludeTimestamp/>
                        <sp:OnlySignEntireHeadersAndBody/>
                    </wsp:Policy>
                </sp:AsymmetricBinding>
                <sp:SignedParts xmlns:sp="http://schemas.xmlsoap.org/ws/2005/07/securitypolicy">
                    <sp:Body/>
                </sp:SignedParts>
                <sp:Wss10 xmlns:sp="http://schemas.xmlsoap.org/ws/2005/07/securitypolicy">
                    <wsp:Policy>
                        <sp:MustSupportRefKeyIdentifier/>
                        <sp:MustSupportRefIssuerSerial/>
                    </wsp:Policy>
                </sp:Wss10>
            </wsp:All>
        </wsp:ExactlyOne>
    </wsp:Policy>

    Y este es el código que tengo:

    var res = new CustomBinding();
    
    SecurityBindingElement sec =
    	SecurityBindingElement.CreateMutualCertificateBindingElement(
    		MessageSecurityVersion.WSSecurity11WSTrustFebruary2005WSSecureConversationFebruary2005WSSecurityPolicy11BasicSecurityProfile10
    			);
    
    res.Elements.Add(sec);
    
    sec.DefaultAlgorithmSuite = SecurityAlgorithmSuite.TripleDesRsa15;
    sec.IncludeTimestamp = true;
    
    res.Elements.Add(new TextMessageEncodingBindingElement()
    {
    	MessageVersion = MessageVersion.Soap11
    });
    res.Elements.Add(new HttpsTransportBindingElement());                                   
    
    String address = "https://extranet.***.***-**.es/axis2surpru/services/gestion****";
    
    EndpointAddress ea = new EndpointAddress(new Uri(address));
    
    wsWsdl.gestion***PortTypeClient ws = new wsWsdl.gestion***PortTypeClient(res, ea);
    
    ws.ClientCredentials.ServiceCertificate.DefaultCertificate = new X509Certificate2(certServer);
    ws.ClientCredentials.ClientCertificate.Certificate = new X509Certificate2(certCliente);
    
    string respuesta = ws.generarRegistro(solicitud); 

    Este es el mensaje de respuesta que recibo del web service:

    ---------------------------------------------------------------------------------------------------------------------------------------------
    Error de comprobación de identidad para el mensaje saliente.
    El extremo remoto no proporcionó ninguna notificación de Sistema de nombres de dominio (DNS) y, por lo tanto,
    no satisfizo la identidad DNS 'extranet.***.***-**.es'. Esto puede deberse a la falta del nombre DNS o CN en
    el nombre distintivo del certificado X.509 del extremo remoto.
    ---------------------------------------------------------------------------------------------------------------------------------------------

    Perdón de nuevo por la extensión de la pregunta. Estoy totalmente perdido.

    Gracias por vuestra ayuda.



    No aprendemos gracias a la escuela sino gracias a los foros ;-) (la original es de Séneca y en lugar de foros es vida)

    martes, 12 de junio de 2018 6:57

Respuestas

  • Hola, lo primero gracias por "extenderte" en tu pregunta. Es un perfecto ejemplo de cómo realizar consultas en el foro.

    Intenta poner esto en tu app.config. Mira aqui

    <runtime>
        <AppContextSwitchOverrides value="Switch.System.IdentityModel.DisableMultipleDNSEntriesInSANCertificate=true" /> 
    </runtime>

     

    Si se solucionó tu consulta no olvides marcar la respuesta. Si te ayudó, vótala como útil. Saludos


    martes, 12 de junio de 2018 13:35
    Moderador
  • Hola Sergio.

    He incluido el código que me indicas en el app.config y el mensaje de error seguí siendo el mismo.

    Pero reemplazando el código anterior:

    String address = "https://extranet.***.***-**.es/axis2surpru/services/gestion***";
    
    EndpointAddress ea = new EndpointAddress(new Uri(address));
    

    por este otro:

    String address = "https://extranet.***.***-**.es/axis2surpru/services/gestion***";
    EndpointIdentity ei = new DnsEndpointIdentity("extranet.***.***-**.es");
    EndpointAddress ea = new EndpointAddress(new Uri(address), ei);

    Si no incluyo tu código en el app.config, sigue dándome el mismo error, pero al incluir tu código me muestra otro error.

    Envío el detalle de la excepción:

    Se produjo la excepción System.ServiceModel.ProtocolException.
      HResult=0x80131501
      Mensaje = El tipo de contenido multipart/related; boundary="MIMEBoundary_4602d40b99aedb2ca91fd81aa9d9e4d6f7b5da5079fe8349"; type="application/xop+xml"; start="<0.b702d40b99aedb2ca91fd81aa9d9e4d6f7b5da5079fe8349@apache.org>"; start-info="text/xml" del mensaje de respuesta no coincide con el tipo de contenido del enlace (text/xml; charset=utf-8). Si usa un codificador personalizado, asegúrese de que el método IsContentTypeSupported se implemente correctamente. Los primeros 773 bytes de la respuesta fueron: '--MIMEBoundary_4602d40b99aedb2ca91fd81aa9d9e4d6f7b5da5079fe8349
    Content-Type: application/xop+xml; charset=utf-8; type="text/xml"
    Content-Transfer-Encoding: binary
    Content-ID: <0.b702d40b99aedb2ca91fd81aa9d9e4d6f7b5da5079fe8349@apache.org>
    
    <?xml version='1.0' encoding='utf-8'?><soapenv:Envelope xmlns:soapenv="http://schemas.xmlsoap.org/soap/envelope/"><soapenv:Header/><soapenv:Body><soapenv:Fault xmlns:wsse="http://docs.oasis-open.org/wss/2004/01/oasis-200401-wss-wssecurity-secext-1.0.xsd"><faultcode>wsse:InvalidSecurity</faultcode><faultstring>General security error (No certificates were found for decryption (KeyId))</faultstring><detail/></soapenv:Fault></soapenv:Body></soapenv:Envelope>
    --MIMEBoundary_4602d40b99aedb2ca91fd81aa9d9e4d6f7b5da5079fe8349--
    
    
    '.
      Origen = mscorlib
      Seguimiento de la pila:
       en System.Runtime.Remoting.Proxies.RealProxy.HandleReturnMessage(IMessage reqMsg, IMessage retMsg)
       en System.Runtime.Remoting.Proxies.RealProxy.PrivateInvoke(MessageData& msgData, Int32 type)
       en WS_services3.wsWSDL.gestion.generar(generar request)
       en WS_services3.wsWSDL.gestion.WS_services3.wsWSDL.gestion.generar(generar request) en D:\UNIDESA\VS2017\Pruebas\webWS\WS_services3\Connected Services\wsWSDL\Reference.cs: línea 469
       en WS_services3.wsWSDL.gestion.generarLiquidacion(String entrada) en D:\UNIDESA\VS2017\Pruebas\webWS\WS_services3\Connected Services\wsWSDL\Reference.cs: línea 475
       en WS_services3.Form1.button18_Click(Object sender, EventArgs e) en D:\UNIDESA\VS2017\Pruebas\webWS\WS_services3\Form1.cs: línea 1037
       en System.Windows.Forms.Control.OnClick(EventArgs e)
       en System.Windows.Forms.Button.OnClick(EventArgs e)
       en System.Windows.Forms.Button.OnMouseUp(MouseEventArgs mevent)
       en System.Windows.Forms.Control.WmMouseUp(Message& m, MouseButtons button, Int32 clicks)
       en System.Windows.Forms.Control.WndProc(Message& m)
       en System.Windows.Forms.ButtonBase.WndProc(Message& m)
       en System.Windows.Forms.Button.WndProc(Message& m)
       en System.Windows.Forms.Control.ControlNativeWindow.OnMessage(Message& m)
       en System.Windows.Forms.Control.ControlNativeWindow.WndProc(Message& m)
       en System.Windows.Forms.NativeWindow.DebuggableCallback(IntPtr hWnd, Int32 msg, IntPtr wparam, IntPtr lparam)
       en System.Windows.Forms.UnsafeNativeMethods.DispatchMessageW(MSG& msg)
       en System.Windows.Forms.Application.ComponentManager.System.Windows.Forms.UnsafeNativeMethods.IMsoComponentManager.FPushMessageLoop(IntPtr dwComponentID, Int32 reason, Int32 pvLoopData)
       en System.Windows.Forms.Application.ThreadContext.RunMessageLoopInner(Int32 reason, ApplicationContext context)
       en System.Windows.Forms.Application.ThreadContext.RunMessageLoop(Int32 reason, ApplicationContext context)
       en System.Windows.Forms.Application.Run(Form mainForm)
       en WS_services3.Program.Main() en D:\UNIDESA\VS2017\Pruebas\webWS\WS_services3\Program.cs: línea 19
    
    Excepción interna 1:
    WebException: Error en el servidor remoto: (500) Error interno del servidor.


    No aprendemos gracias a la escuela sino gracias a los foros ;-) (la original es de Séneca y en lugar de foros es vida)

    miércoles, 13 de junio de 2018 9:53

Todas las respuestas

  • Hola, lo primero gracias por "extenderte" en tu pregunta. Es un perfecto ejemplo de cómo realizar consultas en el foro.

    Intenta poner esto en tu app.config. Mira aqui

    <runtime>
        <AppContextSwitchOverrides value="Switch.System.IdentityModel.DisableMultipleDNSEntriesInSANCertificate=true" /> 
    </runtime>

     

    Si se solucionó tu consulta no olvides marcar la respuesta. Si te ayudó, vótala como útil. Saludos


    martes, 12 de junio de 2018 13:35
    Moderador
  • Hola Sergio.

    He incluido el código que me indicas en el app.config y el mensaje de error seguí siendo el mismo.

    Pero reemplazando el código anterior:

    String address = "https://extranet.***.***-**.es/axis2surpru/services/gestion***";
    
    EndpointAddress ea = new EndpointAddress(new Uri(address));
    

    por este otro:

    String address = "https://extranet.***.***-**.es/axis2surpru/services/gestion***";
    EndpointIdentity ei = new DnsEndpointIdentity("extranet.***.***-**.es");
    EndpointAddress ea = new EndpointAddress(new Uri(address), ei);

    Si no incluyo tu código en el app.config, sigue dándome el mismo error, pero al incluir tu código me muestra otro error.

    Envío el detalle de la excepción:

    Se produjo la excepción System.ServiceModel.ProtocolException.
      HResult=0x80131501
      Mensaje = El tipo de contenido multipart/related; boundary="MIMEBoundary_4602d40b99aedb2ca91fd81aa9d9e4d6f7b5da5079fe8349"; type="application/xop+xml"; start="<0.b702d40b99aedb2ca91fd81aa9d9e4d6f7b5da5079fe8349@apache.org>"; start-info="text/xml" del mensaje de respuesta no coincide con el tipo de contenido del enlace (text/xml; charset=utf-8). Si usa un codificador personalizado, asegúrese de que el método IsContentTypeSupported se implemente correctamente. Los primeros 773 bytes de la respuesta fueron: '--MIMEBoundary_4602d40b99aedb2ca91fd81aa9d9e4d6f7b5da5079fe8349
    Content-Type: application/xop+xml; charset=utf-8; type="text/xml"
    Content-Transfer-Encoding: binary
    Content-ID: <0.b702d40b99aedb2ca91fd81aa9d9e4d6f7b5da5079fe8349@apache.org>
    
    <?xml version='1.0' encoding='utf-8'?><soapenv:Envelope xmlns:soapenv="http://schemas.xmlsoap.org/soap/envelope/"><soapenv:Header/><soapenv:Body><soapenv:Fault xmlns:wsse="http://docs.oasis-open.org/wss/2004/01/oasis-200401-wss-wssecurity-secext-1.0.xsd"><faultcode>wsse:InvalidSecurity</faultcode><faultstring>General security error (No certificates were found for decryption (KeyId))</faultstring><detail/></soapenv:Fault></soapenv:Body></soapenv:Envelope>
    --MIMEBoundary_4602d40b99aedb2ca91fd81aa9d9e4d6f7b5da5079fe8349--
    
    
    '.
      Origen = mscorlib
      Seguimiento de la pila:
       en System.Runtime.Remoting.Proxies.RealProxy.HandleReturnMessage(IMessage reqMsg, IMessage retMsg)
       en System.Runtime.Remoting.Proxies.RealProxy.PrivateInvoke(MessageData& msgData, Int32 type)
       en WS_services3.wsWSDL.gestion.generar(generar request)
       en WS_services3.wsWSDL.gestion.WS_services3.wsWSDL.gestion.generar(generar request) en D:\UNIDESA\VS2017\Pruebas\webWS\WS_services3\Connected Services\wsWSDL\Reference.cs: línea 469
       en WS_services3.wsWSDL.gestion.generarLiquidacion(String entrada) en D:\UNIDESA\VS2017\Pruebas\webWS\WS_services3\Connected Services\wsWSDL\Reference.cs: línea 475
       en WS_services3.Form1.button18_Click(Object sender, EventArgs e) en D:\UNIDESA\VS2017\Pruebas\webWS\WS_services3\Form1.cs: línea 1037
       en System.Windows.Forms.Control.OnClick(EventArgs e)
       en System.Windows.Forms.Button.OnClick(EventArgs e)
       en System.Windows.Forms.Button.OnMouseUp(MouseEventArgs mevent)
       en System.Windows.Forms.Control.WmMouseUp(Message& m, MouseButtons button, Int32 clicks)
       en System.Windows.Forms.Control.WndProc(Message& m)
       en System.Windows.Forms.ButtonBase.WndProc(Message& m)
       en System.Windows.Forms.Button.WndProc(Message& m)
       en System.Windows.Forms.Control.ControlNativeWindow.OnMessage(Message& m)
       en System.Windows.Forms.Control.ControlNativeWindow.WndProc(Message& m)
       en System.Windows.Forms.NativeWindow.DebuggableCallback(IntPtr hWnd, Int32 msg, IntPtr wparam, IntPtr lparam)
       en System.Windows.Forms.UnsafeNativeMethods.DispatchMessageW(MSG& msg)
       en System.Windows.Forms.Application.ComponentManager.System.Windows.Forms.UnsafeNativeMethods.IMsoComponentManager.FPushMessageLoop(IntPtr dwComponentID, Int32 reason, Int32 pvLoopData)
       en System.Windows.Forms.Application.ThreadContext.RunMessageLoopInner(Int32 reason, ApplicationContext context)
       en System.Windows.Forms.Application.ThreadContext.RunMessageLoop(Int32 reason, ApplicationContext context)
       en System.Windows.Forms.Application.Run(Form mainForm)
       en WS_services3.Program.Main() en D:\UNIDESA\VS2017\Pruebas\webWS\WS_services3\Program.cs: línea 19
    
    Excepción interna 1:
    WebException: Error en el servidor remoto: (500) Error interno del servidor.


    No aprendemos gracias a la escuela sino gracias a los foros ;-) (la original es de Séneca y en lugar de foros es vida)

    miércoles, 13 de junio de 2018 9:53