c# .net ssl sspi

c# - Cómo especificar certificados aceptados para la autenticación del cliente en.NET SslStream



sspi (3)

Lo que la validación del certificado está haciendo es validar todos los certificados de la cadena. Para realmente hacer eso, simplemente contacte el almacén raíz de cada uno de esos cerficados.

Si eso no es algo que desea que suceda, puede implementar su propio root store localmente.

Estoy intentando utilizar la clase .Net System.Security.SslStream para procesar el lado del servidor de una secuencia SSL / TLS con autenticación de cliente.

Para realizar el apretón de manos, estoy usando este código:

SslStream sslStream = new SslStream(innerStream, false, RemoteCertificateValidation, LocalCertificateSelectionCallback); sslStream.AuthenticateAsServer(serverCertificate, true, SslProtocols.Default, false);

Desafortunadamente, esto da como resultado que SslStream transmita una CertificateRequest que contiene los nombres de todos los certificados en CryptoAPI Trusted Root Store.

Me gustaría poder anular esto. No es una opción para mí solicitar al usuario que instale o elimine certificados de Trusted Root Store.

Parece que SslStream usa SSPI / SecureChannel debajo, por lo que si alguien sabe cómo hacer el equivalente con esa API, eso sería útil también.

¿Algunas ideas?


No es la parte de validación que quiero cambiar. El problema está en el saludo inicial, el servidor transmite el mensaje que informa al cliente que se requiere la autenticación del cliente (es decir, el mensaje CertificateRequest). Como parte de este mensaje, el servidor envía los nombres de las CA que aceptará como emisores del certificado del cliente. Es esa lista que por defecto contiene todas las raíces de confianza en la tienda.

Pero si es posible anular el almacén raíz del certificado para una sola aplicación, probablemente eso solucionaría el problema. ¿Es eso lo que quieres decir? Y si es así, ¿cómo hago eso?


Parece que esto no es posible actualmente con las bibliotecas .NET.

Lo resolví utilizando la implementación de la biblioteca de la clase Mono de System.Security.SslStream, que proporciona un mejor acceso para anular el comportamiento de los servidores durante el intercambio.