transportwithmessagecredential clientcredentialtype wcf wcf-encryption

clientcredentialtype - WCF: ¿cómo cifro los mensajes?



nettcpbinding security mode transport (3)

@Martin tiene razón, necesita un certificado en el servidor. Este enlace tiene una buena visión general del flujo de comunicación para la seguridad basada en mensajes y tiene un código de muestra. Este enlace tiene una buena visión general del trabajo con certificados.

Para sus requisitos de autenticación, este enlace revisa las diversas opciones disponibles. Si es nuevo en WCF, Learning WCF: A Hands-on Guide de Michele Bustamante es un buen libro que cubre la seguridad basada en mensajes.

Mi servicio WCF implica el envío de datos de un conjunto de datos (en formato csv) entre el cliente y el servicio. Este conjunto de datos debe estar encriptado para que los datos no puedan ser interceptados. Estoy usando wshttpbinding e intento encriptar el mensaje usando la siguiente configuración en web.config:

<wsHttpBinding> <binding name="wsHttp"> <reliableSession enabled="true" /> <security mode="Message"> <message clientCredentialType="UserName" algorithmSuite="TripleDes" /> </security> </binding> </wsHttpBinding>

Cuando trato de generar un proxy de cliente, aparece un mensaje de error largo (¡que no se puede leer completamente porque sale de la parte inferior de la pantalla!). El mensaje de error menciona algo sobre un "certificado de servicio no proporcionado".

¿Cómo encripto un mensaje? ¿Necesito un certificado? Debo mencionar que este servicio se utilizará en Internet desde diferentes dominios, por lo que no estoy seguro de si usar la seguridad de "Nombre de usuario" es la mejor opción (?)

Básicamente estoy confundido!


Todavía estoy tratando de encontrar la solución a este problema. Lo tengo también, pero con la firma de un xml. De todos modos, para encontrar al usuario IIS se está ejecutando en WinXP Inicio> clic con el botón derecho en Mi PC> Administrar> Servicios y aplicaciones> Servicios> Administrador de IIS> Hacer doble clic y en la pestaña Iniciar sesión generalmente se dice Sistema local.

EDITAR

OK, así es como resolví mi problema. Tuve un certificado que utilicé este artículo para hacer el certificado. Si el proyecto es un ASPWebSite que se guarda en su Carpeta C, es posible que no tenga problemas con esto. Pero si se guarda en IIS como un proyecto HTTP, entonces tendrá problemas.

La forma de resolverlo después de semanas de investigación no es tan difícil. Microsoft tiene algo llamado Mejoras en los servicios web, descargará lo último pero estoy usando el segundo con el último paquete de servicio. Cuando instalé habilité todo.

Los certificados pueden estar en un archivo físico pero normalmente se encuentran en el Almacén de administración de certificados para acceder. Use la herramienta Herramienta de certificado X509 en WSE 2.0. Aquí abre tu certificado buscándolo en las diferentes secciones hasta que lo encuentres. Luego ábralo y en la parte inferior habrá una clave privada de vista, en la pestaña de seguridad agregue LOCALHOST / ASPNET. Y esto debería permitir que su sitio web lea el certificado.

En resumen, lo que sucede es que cuando creas las claves pública y privada, aunque puedes ver la clave privada bien, realmente se envía a Timbuktu en el sistema de archivos y necesitas encontrarla para agregar la cuenta de ASPNET para acceso de lectura. Estoy leyendo que en Vista esto es mucho más fácil pero estoy usando XP.


Sí, su servicio necesita un certificado para que sus claves de cifrado puedan intercambiarse de forma segura. Puede crear un certificado de autenticación de servicio de prueba con makecert.exe. Vea esta entrada en mi blog para los detalles de eso.

También debe asegurarse de que la cuenta en la que se está ejecutando su servicio sea capaz de leer el archivo de clave privada del certificado. Si utiliza Windows Vista (o posterior), el complemento Certificados MMC le permite controlar los permisos en esa clave privada, pero para las versiones anteriores de Windows es un poco más difícil. Solía ​​usar una utilidad que venía con WSE3, pero alguien más podría sugerir una manera más directa. A menos que su servicio se ejecute como administrador, lo más probable es que tenga que ajustar estos permisos.

Actualización: como todas las cosas buenas, mi blog llegó a su fin. Gracias a makerofthings7 por recordarme. El comando makecert que necesita para generar un certificado de autenticación de servicio es algo como esto ...

makecert -sr LocalMachine -ss My -pe -n CN=subject-name -eku 1.3.6.1.5.5.7.3.1 -sky exchange

... simplemente reemplace el nombre del sujeto con cualquier nombre de certificado que tenga sentido para su servicio.