[Actualización] - Yo también adjuntar archivos de configuración completos, por service, y por client (fuera de aquí, no inundar el tema)Certificado de servicio WCF y la identidad del punto final del lado del cliente: ¿por qué no funciona?
estoy teniendo situación prácticamente idéntica a la descrita en this cuestión, Sin embargo, mi pregunta es algo diferente.
- estoy usando NetTcpBinding con seguridad conjunto de TransportWithMessageCredential
- estoy usando la contraseña/nombre de usuario credenciales respaldados por ASP.NET proveedor de
- Mi servicio se auto alojado en Windows Servicio
- I do tener en mi punto extremo comportamiento autenticación especificada revocationMode = "NoCheck"
Se requiere que el servicio proporcione un certificado para autenticarse ante los clientes. Eso está bien, acabo de hacer:
<serviceCertificate findValue="***"
storeLocation="CurrentUser"
storeName="My"
x509FindType="FindByThumbprint"/>
Ahora, un poco imaginaron que ahora el cliente podría llegar a tener
<identity>
<certificate encodedValue="encoded certificate"/>
</identity>
y será capaz de verificar las credenciales del servicio sin tener ese certificado instalado en la tienda en la máquina del cliente.
me sorprendió to learn que aunque me puse las credenciales de servicio a certificado, WSDL expone
<Identity>
<Dns>Foo</Dns>
</Identity>
Una vez más, el servicio que puedo establecer la identidad de CertificateReference y conectarlo a un mismo certificado, y luego WSDL exponer la identidad como X509Certificate, pero cuando ejecuto el cliente que ajuste se ignora, y termino con el mensaje de error:
System.ServiceModel.Security.SecurityNegotiationException: CER X.509 tificate CN = xxx no está en la tienda de personas de confianza. El X.509 certificado CN = xxx cadena de construcción falló. El certificado que se usó tiene una cadena de confianza que no se puede verificar . Reemplace el certificado cambie el certificateValidationMode. Una cadena de certificado procesada, pero terminada en un certificado raíz que no es de confianza para el proveedor de confianza.
¿Hay alguna manera de hacer que el cliente use ese valor de config y trabajo sin tener que instalar un certificado de servicio (ni su raíz) en la máquina del cliente?
[ACTUALIZACIÓN] Mientras se ajusta a ninguno certificateValidationMode hará la excepción desaparece, es una solución inaceptable desde el punto de vista de la seguridad.
Hace que el cliente simplemente reconozca que recibe '' algo '' de certificado, sin entrar en detalles. Esto hace posible toda la gama de ataques de hombre en el medio. Todavía no validará la información enviada por el (supuesto) servicio contra el certificado descargado en la configuración.
Esto es lo que terminé haciendo. Tengo una pregunta sin embargo, ¿por qué no funciona de la caja? Si el cliente tiene toda la información requerida, y recibe algún certificado de un servicio, es lo más natural que hacer para validar uno contra el otro. ¿Por qué WCF no hace esto? –
Conjetura: por razones de seguridad. Al usar la solución propuesta, la seguridad del proceso de importación de WSDL se vuelve aún más crítica, ya que no se realizará ninguna verificación de certificado adicional cuando se comunique con el servicio. –
Acabo de comenzar una recompensa por mi propia pregunta que parece similar a lo que estás diciendo aquí. Si puede deletrear la solución con más detalle allí, ¡lo agradecería mucho! http://stackoverflow.com/questions/4579666/wcf-newbie-how-to-install-and-use-a-ssl-certificate –