Usando la implementación de seguridad de WCFs WS, ¿cómo puede el servidor verificar la identidad del cliente?

0

Usando la configuración a continuación, hemos implementado la seguridad de mensajes usando WCF y WS-security. Tenga en cuenta que usamos clientCredentialType = Certificate.

Ahora mis preguntas son:

  • ¿La configuración a continuación representa una forma criptográfica segura de verificar la identidad del cliente?
  • El cliente utiliza un certificado con una clave privada conocida como credenciales de cliente. ¿De qué manera puede el servidor verificar este certificado dado que el servidor tiene la clave pública correspondiente?
  • ¿Qué sucede cuando un cliente de WCF utiliza un certificado como credenciales de cliente? Es informacion sobre el cert. ¿Incluido en el mensaje SOAP? ¿O hay un elemento incluido firmado con el certificado? ¿O qué?

Configuración de WCF del servidor:

<system.serviceModel>    
    <behaviors>      
        <serviceBehaviors>
            <behavior name="srv">
                <serviceMetadata httpGetEnabled="true" httpsGetEnabled="true"/>
                <serviceDebug includeExceptionDetailInFaults="false"/>
                <serviceCredentials>
                    <serviceCertificate x509FindType="FindBySubjectName" storeLocation="LocalMachine" storeName="My" findValue="ServerCert"/>
                    <clientCertificate>
                        <authentication certificateValidationMode="Custom" customCertificateValidatorType="CertValidator, WcfService1"/>
                    </clientCertificate>
                </serviceCredentials>          
            </behavior>
        </serviceBehaviors>
    </behaviors>

    <bindings>
        <wsHttpBinding>
            <binding name="ServerBinding">
                <security mode="Message">
                    <message clientCredentialType="Certificate" negotiateServiceCredential="false" establishSecurityContext="false"/>
                </security>
            </binding>
        </wsHttpBinding>
    </bindings>

    <services>
        <service name="WcfService1.Service1" behaviorConfiguration="srv">
            <endpoint address="" binding="wsHttpBinding" bindingConfiguration="ServerBinding" contract="WcfService1.IService1"/>
        </service>
    </services>
</system.serviceModel>

Configuración de WCF del cliente:

<system.serviceModel>
    <bindings>
        <wsHttpBinding>
            <binding name="WsHttpBinding_IService1">
                <security mode="Message">
                    <message clientCredentialType="Certificate" negotiateServiceCredential="false" establishSecurityContext="false"/>                  
                </security>
            </binding>
        </wsHttpBinding>
    </bindings>
    <client>
        <endpoint address="http://localhost.fiddler:49694/Service1.svc" binding="wsHttpBinding"
              bindingConfiguration="WsHttpBinding_IService1" contract="ServiceReference1.IService1"
              name="WsHttpBinding_IService1" behaviorConfiguration="endpBehavior">
            <identity>
                <certificateReference findValue="ServerCert" storeLocation="LocalMachine" storeName="My" x509FindType="FindBySubjectName"/>
            </identity>
        </endpoint>
    </client>
    <behaviors>
        <endpointBehaviors>
            <behavior name="endpBehavior">
                <clientCredentials>
                    <clientCertificate findValue="ClientCert" x509FindType="FindBySubjectName" storeLocation="LocalMachine" storeName="My" />
                </clientCredentials>
            </behavior>
        </endpointBehaviors>
    </behaviors>
</system.serviceModel>

La configuración del servidor da como resultado el siguiente elemento de política en el wsdl:

<wsp:Policy wsu:Id="WSHttpBinding_IService1_policy">
    <wsp:ExactlyOne>
        <wsp:All>
            <sp:SymmetricBinding xmlns:sp="http://schemas.xmlsoap.org/ws/2005/07/securitypolicy">
                <wsp:Policy>
                    <sp:ProtectionToken>
                        <wsp:Policy>
                            <sp:X509Token sp:IncludeToken="http://schemas.xmlsoap.org/ws/2005/07/securitypolicy/IncludeToken/Never">
                                <wsp:Policy>
                                    <sp:RequireDerivedKeys/>
                                    <sp:RequireThumbprintReference/>
                                    <sp:WssX509V3Token10/>
                                </wsp:Policy>
                            </sp:X509Token>
                        </wsp:Policy>
                    </sp:ProtectionToken>
                    <sp:AlgorithmSuite>
                        <wsp:Policy>
                            <sp:Basic256/>
                        </wsp:Policy>
                    </sp:AlgorithmSuite>
                    <sp:Layout>
                        <wsp:Policy>
                            <sp:Strict/>
                        </wsp:Policy>
                    </sp:Layout>
                    <sp:IncludeTimestamp/>
                    <sp:EncryptSignature/>
                    <sp:OnlySignEntireHeadersAndBody/>
                </wsp:Policy>
            </sp:SymmetricBinding>
            <sp:EndorsingSupportingTokens xmlns:sp="http://schemas.xmlsoap.org/ws/2005/07/securitypolicy">
                <wsp:Policy>
                    <sp:X509Token sp:IncludeToken="http://schemas.xmlsoap.org/ws/2005/07/securitypolicy/IncludeToken/AlwaysToRecipient">
                        <wsp:Policy>
                            <sp:RequireThumbprintReference/>
                            <sp:WssX509V3Token10/>
                        </wsp:Policy>
                    </sp:X509Token>
                </wsp:Policy>
            </sp:EndorsingSupportingTokens>
            <sp:Wss11 xmlns:sp="http://schemas.xmlsoap.org/ws/2005/07/securitypolicy">
                <wsp:Policy>
                    <sp:MustSupportRefThumbprint/>
                    <sp:MustSupportRefEncryptedKey/>
                    <sp:RequireSignatureConfirmation/>
                </wsp:Policy>
            </sp:Wss11>
            <sp:Trust10 xmlns:sp="http://schemas.xmlsoap.org/ws/2005/07/securitypolicy">
                <wsp:Policy>
                    <sp:MustSupportIssuedTokens/>
                    <sp:RequireClientEntropy/>
                    <sp:RequireServerEntropy/>
                </wsp:Policy>
            </sp:Trust10>
            <wsaw:UsingAddressing/>
        </wsp:All>
    </wsp:ExactlyOne>
</wsp:Policy>

Tenga en cuenta que esta pregunta también se hace en Desbordamiento de pila .

    
pregunta codeape 25.09.2015 - 10:26
fuente

0 respuestas

Lea otras preguntas en las etiquetas