2008-11-11 24 views
6

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 y tratando de cifrar el mensaje con la siguiente configuración en web.config:WCF: ¿cómo cifro los mensajes?

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

Cuando intento y generar un proxy de cliente consigo un cuadro de mensaje de error de largo (que no puede ser leído completamente, ya que sale de la parte inferior de la pantalla!). El mensaje de error menciona algo sobre un "certificado de servicio no proporcionado".

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

¡Básicamente estoy confundido!

Respuesta

4

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 this entry in my 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 la 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 reemplazar sujeto- nombre con cualquier nombre de certificado que tenga sentido para su servicio.

+0

El enlace ya no es válido ... – LamonteCristo

+0

@ makerofthings7 Gracias! He actualizado mi respuesta. – Martin

+0

He cambiado el enlace, ahora apunta a una versión de trabajo del blog de archive.org. – svick

4

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

Para sus requisitos de autenticación, this link 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.

1

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, esto es cómo resolví mi problema. Tuve un certificado que utilicé este article 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 manera 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 a ellos utilizando 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 crea las claves públicas y privadas, aunque puede ver la clave privada bien, realmente se envía a Timbuktu en el sistema de archivos y necesita encontrarla para agregar la cuenta ASPNET para el acceso de lectura. Estoy leyendo que en Vista esto es mucho más fácil pero estoy usando XP.

Cuestiones relacionadas