Sí, por supuesto, pero solo si usa Seguridad de mensajes (en lugar de seguridad de transporte). Definir la configuración de la unión de este modo:
<netTcpBinding>
<binding name="UserNameSecurity">
<security mode="Message">
<message clientCredentialType="UserName"/>
</security>
</binding>
</netTcpBinding>
y después hacer referencia a que la configuración de la unión en los puntos finales (en el servidor y el cliente):
<endpoint address="....."
binding="netTcpBinding"
bindingConfiguration="UserNameSecurity"
contract="IMyService" />
Marc
ACTUALIZACIÓN:
Ah, sí, en el lado del servidor, necesitará un certificado para autenticar el servicio al cliente que lo llama, y también se utiliza para encriptar y firmar los mensajes. Solo en el servidor: los clientes no necesitan instalar nada.
Configuración:
<behaviors>
<serviceBehavior>
<behavior name="ServerInternet">
<serviceCredentials>
<serviceCertificate
findValue="MyServiceCertificate"
storeLocation="LocalMachine"
storeName="My"
x509FindType="FindBySubjectName" />
</serviceCredentials>
</behavior>
</serviceBehavior>
</behaviors>
<services>
<service name="MyServiceInternet"
behaviorConfiguration="ServerInternet">
....
</service>
</services>
Asegúrese de instalar el certificado de servidor en la carpeta "Local Machine" en su servidor, bajo el "nombre de asunto" que especifique en su configuración.
Entonces, eso es lo que tenía originalmente. Pero recibo una excepción solicitando un certificado de servicio: "No se proporciona el certificado de servicio. Especifique un certificado de servicio en ServiceCredentials". ¿Alguna idea? –
Hmmm. Eso es lo que sospechaba. Gracias por confirmarlo –
En este enfoque ¿hay algún daño de usar un certificado autofirmado en el entorno de producción? Si solo se utiliza para cifrar mensajes, pero no para verificar la identidad. ¿Cuándo no usaría un certificado autofirmado para el cifrado de mensajes? – Vitalik