2012-07-11 14 views
7

ServicePointManager.ServerCertificateValidationCallback es una propiedad estática global que se puede sobrescribir con cualquier bit del código de la aplicación, simplemente haciendo:¿Cuál es la razón por la cual ServicePointManager.ServerCertificateValidationCallback está diseñado de esa manera?

ServicePointManager.ServerCertificateValidationCallback 
    = (sender, cert, chain, sslPolicyErrors) => true; 

¿Por qué decidieron poner en práctica esa manera? Seguramente debe ser una propiedad en el objeto WebRequest, y debe tener una buena razón para ignorar el certificado.

+0

Entonces, ¿qué es lo que te molesta es que se trata de una propiedad estática en lugar de una propiedad de instancia por lo que es difícil utilizar diferentes políticas en partes independientes de la aplicación? – CodesInChaos

+2

No, se debe a que cualquier código de terceros que consuma como SDK, etc. puede ir y sobrescribir su devolución de llamada con. – superlogical

+0

Esto no parece una pregunta real para mí. Simplemente te estás quejando de un uso innecesario del estado mutable global. – CodesInChaos

Respuesta

5

Otro código que puede establecer esta propiedad no es un problema de seguridad, ya que establecer la propiedad requiere el permiso SecurityPermissionFlag.Infrastructure, que no necesita otorgar al código en el que no confía.

Por otro lado, estoy de acuerdo en que es un mal diseño, ya que es un estado mutable global y eso debe evitarse. En particular, hace innecesariamente difícil utilizar diferentes políticas de validación en diferentes partes del programa. Un archivo de configuración compartida, como sugeriría, sería aún peor IMO.

La opción correcta sería una propiedad de instancia para la devolución de llamada, al igual que lo que utiliza la clase SslStream normal. No estoy lo suficientemente familiarizado con esa parte del marco para decir si esta propiedad existe, y por lo tanto ServicePointManager.ServerCertificateValidationCallback solo sirve como valor por defecto, o si esta variable global es la única forma de influir en la validación del certificado.

Cuestiones relacionadas