none
SOAP security negotiation with failed RRS feed

  • Pregunta

  • Saludos:

     

    Tengo la siguiente situación en la que intento hacer una autenticación básica utilizando credenciales todo basado en la teoría WCF:

     

    1. Estoy haciendo la típica aplicación que realiza el cálculo de suma, resta, multiplicacion y disivición.

    2. Para la aplicación cree tres proyectos:

    • Consumidor(Cliente)   ----------> (Console Application)
      • App.config
      • Program
    • Hosting  -----------------------------> (Console Application)
      • App.config
      • Program
      • ValidarUsuario (Autenticación)
    • WCFServices(Servicios) -------> (WCF Service Library)
      • Calculadora
      • ICalculadora

    3. El hosting se ejecuta perfectamente, para esto adjunto el App.config (Servidor) para que tengan una idea más clara:

     

    SERVIDOR (App.config)

    <?xml version="1.0" encoding="utf-8"?>

    <configuration>

    <system.serviceModel>

     

    <behaviors>

    <serviceBehaviors>

    <behavior name="ServiceCredentialsBehavior">

    <serviceCredentials>

    <userNameAuthentication userNamePasswordValidationMode="Custom"

    customUserNamePasswordValidatorType="Hosting.ValidarUsuario, Hosting"/>

    <serviceCertificate findValue="CN=ServicioSTS"/>

    </< FONT>

    </serviceCredentials>

    <serviceMetadata httpGetEnabled="true" />

    </< FONT></ behavior>

    </< FONT></ serviceBehaviors>

    </< FONT></ behaviors>

     

    <services>

    <service name="WCFServiceLibrary.Calculadora" behaviorConfiguration="ServiceCredentialsBehavior">

    <host>

    <baseAddresses>

    <add baseAddress="http://localhost:8081/Calculadora"/>

    </< FONT>baseAddresses>

    </< FONT></ host>

    <endpoint binding="wsHttpBinding"

    bindingConfiguration="SecureMessageUserName"

    contract="WCFServiceLibrary.ICalculadora" />

    </< FONT></ service>

    </< FONT></ services>

     

    <bindings>

    <wsHttpBinding>

    <binding name="SecureMessageUserName">

    <security mode="Message">

    <message clientCredentialType="UserName"/>

    </< FONT>security>

    </< FONT></ binding>

    </< FONT></ wsHttpBinding>

    </< FONT></ bindings>

     

    </< FONT></ ystem.serviceModel>

    </< FONT></ configuration>

     

     

    4. De igual forma les adjunto el App.config (Cliente):

     

    CLIENTE(App.config)

     

    <?xml version="1.0" encoding="utf-8" ?>

    <configuration>

    <system.serviceModel>

     

    <bindings>

    <wsHttpBinding>

    <binding name="SecureMessage" closeTimeout="00:01:00"

    openTimeout="00:01:00" receiveTimeout="00:10:00" sendTimeout="00:01:00"

    bypassProxyOnLocal="false" transactionFlow="false" hostNameComparisonMode="StrongWildcard"

    maxBufferPoolSize="524288" maxReceivedMessageSize="65536"

    messageEncoding="Text" textEncoding="utf-8" useDefaultWebProxy="true"

    allowCookies="false">

     

    <readerQuotas  maxDepth="32"

        maxStringContentLength="8192"

        maxArrayLength="16384"

        maxBytesPerRead="4096"

        maxNameTableCharCount="16384" />

     

    <reliableSession ordered="true"

         inactivityTimeout="00:10:00"

         enabled="false" />

     

    <security mode="Message">

     

    <transport clientCredentialType="Windows" 

                    proxyCredentialType="None"

                    realm="" />

     

    <message  clientCredentialType="UserName"

    negotiateServiceCredential="true"

    algorithmSuite="Default"

    establishSecurityContext="true" />

    </security>

    </binding>

    </wsHttpBinding>

    </bindings>

     

    <behaviors>

    <endpointBehaviors>

    <behavior name="UserName">

    <clientCredentials>

    <serviceCertificate>

    <authentication revocationMode="NoCheck"/>

    </serviceCertificate>

    </clientCredentials>

    </behavior>

    </endpointBehaviors>

    </behaviors>

     

    <client>

    <endpoint address="http://localhost:8081/Calculadora"

    binding="wsHttpBinding"

    bindingConfiguration="SecureMessage"

    behaviorConfiguration="UserName"

    contract="w1.ICalculadora"

    name="CalculadoraServiceUserName">

    <identity>

    <userPrincipalName value="VIRTUAL-PC\PC" />

    <certificate encodedValue="AwAAAAEAAAAUAAAAnRI7wdWGTwCaw2kzIfwNu+7X6ykgAAAAAQAAALcBAAAwggGzMIIBYaADAgECAhA7PxxeVLfvukKMM8C55U0DMAkGBSsOAwIdBQAwFjEUMBIGA1UEAxMLUm9vdCBBZ2VuY3kwHhcNMDcxMjE0MTgwNzE5WhcNMzkxMjMxMjM1OTU5WjAWMRQwEgYDVQQDEwtTZXJ2aWNpb1NUUzCBnzANBgkqhkiG9w0BAQEFAAOBjQAwgYkCgYEAs0xt/P/Kx+N31dWTSwguJRMZPUa8yBQVrDLV4mGFdVpl4OVeNPYZybDJdb0h+dsCGRAhJNKeJVh41+ZdqitK+nq1BYHAW4nEaxP9rD906e5UGmJCvJJgGJSNs2xkR1YOZsHhhNXckmjW01K3Vkkf3+7Veqk3uEz63YyJKmDMr8cCAwEAAaNLMEkwRwYDVR0BBEAwPoAQEuQJLQYdHU8AjWEh3BZkY6EYMBYxFDASBgNVBAMTC1Jvb3QgQWdlbmN5ghAGN2wAqgBkihHPuNSqXDX0MAkGBSsOAwIdBQADQQBj52ECGOiwAOovG4yeM5ioOaYNwFYXyS9OGSCrGp2J9hL2qO06remmxREfu/v+mrMy6Nppr4HcljxsiBKLtdz6" />

    </identity>

    </endpoint>

    </client>

     

    </system.serviceModel>

    </configuration>

     

     

    5. Con las respectivas configuraciones al momento que voy a ejecutar el cliente me sale el siguiente error:

     

    SOAP security negotiation with 'http://localhost:8081/Calculadora' for target 'http://localhost:8081/Calculadora' failed. See inner exception for more details.

     

    Si me pueden echar una mano con este problemita les estaría muy agradecido.

     

    Att.

    René Orellana

    viernes, 14 de diciembre de 2007 20:25

Todas las respuestas

  • Bueno de lo que pude seguir investigando, el error se da por lo siguiente:

     

    The X.509 certificate CN=FabrikamEnterprises chain building failed.
    The certificate that was used has a trust chain that cannot be verified.
    Replace the certificate or change the certificateValidationMode.

     

    Por lo que entiendo el certicado no fue aceptado por el proveedor de confianza.

     

    Entonces mi pregunta es la siguiente como puedo generar un certificado de confianza, por que de la manera que lo estoy haciendo parece estar mal. Esta es la forma como estoy creando mi certificado:

     

    makecert -a sha1 -n "CN=ServicioSTS" -sky exchange -pe -ss My -sr LocalMachine

     

    Si alguien sabe otra forma de crear certificado bienvenido sea la ayuda.

     

    Att

    René Orellana

    viernes, 14 de diciembre de 2007 22:13