with password clientcredentialtype wcf x509

password - ¿Cómo puedo configurar WCF para usar certificados x509 a través de internet?



wcf basic authentication username password (2)

Necesito usar un certificado x509 para obtener una autenticación de nivel de mensajes segura de un cliente rico a través de Internet a un servicio web seguro de WCF.

Específicamente, estoy buscando una guía paso a paso para la configuración, la configuración, la codificación y la implementación, incluida la creación de un certificado ''dev'', su instalación y la obtención de un certificado ''real'' para la producción.


Los siguientes pasos son una guía para comenzar:

1) En primer lugar, necesita una autoridad raíz para generar sus certificados de cliente y servidor. Puede usar un proveedor de autoridad externo (por ejemplo, Verisign) o puede generar el suyo usando algo como el Microsoft Certificate Server.

Para generar un certificado de Root Authority de desarrollo puede usar la herramienta "makecert" que viene con Visual Studio, por ejemplo

makecert -n "CN=MyRootCA" -r -sv RootCA.pvk RootCA.cer

2) Luego necesita solicitar / generar sus certificados de cliente y servidor. Ambos tipos de certificados se pueden instalar como certificados de máquina local y ambos deben firmarse con la misma autorización raíz. Puede solicitar certificados de cliente desde la interfaz web de un servidor de certificados de Microsoft, por ejemplo, http://mycertserver/certsrv .

Para generar un certificado de cliente de desarrollo para cada máquina, puede usar "makecert" nuevamente. Tenga en cuenta que los certificados del cliente están firmados con el certificado de Root Authority creado en el paso 1.

makecert -pe -n "CN=MyCert" -ss my -sky exchange -sk MyCert -iv MyRootCA.pvk -ic MyRootCA.cer -sr localmachine MyCert.cer

Esto instalará el certificado en la máquina en la que se ejecuta el comando, en la carpeta Certificados personales en el Almacén de máquinas locales.

Para que el servidor confíe en los certificados del cliente, deberá instalar el certificado de Root Authority en la tienda Trusted Root Certificate Authorities del servidor (use el complemento mmc Certificates para hacer esto). Los clientes también deben tener el certificado raíz instalado de la misma manera para que confíen en sus propios certificados.

3) Configure su servicio WCF para requerir la autenticación del cliente utilizando un certificado (por ejemplo, a través de web.config).

<services> <service name="TestService" behaviorConfiguration="wsHttpCertificateBehavior"> <endpoint name="TestEndPoint" address="" binding="wsHttpBinding" bindingConfiguration="wsHttpEndpointBinding" contract="TestService.IMyContract"> <identity> <dns value=""/> </identity> </endpoint> <endpoint address="mex" binding="mexHttpsBinding" contract="IMetadataExchange"/> </service> </services> <bindings> <wsHttpBinding> <binding name="wsHttpEndpointBinding"> <security mode="Message"> <message clientCredentialType="Certificate"/> </security> </binding> </wsHttpBinding> </bindings> <behaviors> <behavior name="wsHttpCertificateBehavior"> <serviceMetadata httpGetEnabled="false" httpsGetEnabled="true"/> <serviceCredentials> <clientCertificate> <authentication certificateValidationMode="PeerOrChainTrust" revocationMode="NoCheck"/> </clientCertificate> <serverCertificate findValue="CN=MyCert"/> </serviceCredentials> </behavior> </behaviors>

4) Ahora configure la persona que llama (por ejemplo, a través de la aplicación.config).

<client> <endpoint name="wsHttpBinding" address="https://localhost/TestService/TestService.svc" binding="wsHttpBinding" bindingConfiguration="wsHttpBinding" behaviorConfiguration="wsHttpCertificateBehavior" contract="TestService.IMyContract"> <identity> <dns value="MyCert"/> </identity> </endpoint> </client> <bindings> <wsHttpBinding> <binding name="wsHttpBinding"> <security mode="Message"> <message clientCredentialType="Certificate"/> </security> </binding> </wsHttpBinding> </bindings> <behaviors> <endpointBehaviors> <behavior name="wsHttpCertificateBehavior"> <clientCredentials> <clientCertificate findValue="MyCert" storeLocation="LocalMachine"/> <serviceCertificate> <authentication certificateValidationMode="PeerOrChainTrust" revocationMode="NoCheck" trustedStoreLocation="LocalMachine"/> </serviceCertificate> </clientCredentials> </behavior> </endpointBehaviors> </behaviors>