以这种方式设计ServicePointManager.ServerCertificateValidationCallback的基本原理是什么?

时间:2012-07-11 11:51:29

标签: c# servicepointmanager

ServicePointManager.ServerCertificateValidationCallback是一个全局静态属性,只需执行以下操作即可被应用程序中的任何代码覆盖:

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

他们为什么决定以这种方式实施?当然它应该是WebRequest对象上的属性,你应该有一个很好的理由来解释为什么你忽略了证书。

1 个答案:

答案 0 :(得分:5)

能够设置此属性的其他代码不是安全问题,因为设置属性需要SecurityPermissionFlag.Infrastructure权限,您无需授予您不信任的代码。

另一方面,我同意这是糟糕的设计,因为它是全局可变状态,应该避免。特别是它使得在程序的不同部分中使用不同的验证策略变得不必要地困难。正如你的建议,共享配置文件会更糟糕的IMO。

正确的选择是回调的实例属性,就像普通SslStream类使用的那样。我不太熟悉框架的那一部分来说明这个属性是否存在,因此ServicePointManager.ServerCertificateValidationCallback只作为默认值,或者如果这个全局变量是影响证书验证的唯一方法。