我正在编写一个客户端应用程序,该应用程序必须查询URL并确认用户已被授权使用该客户端。将其视为非常基本的许可机制。服务器上的页面写出一个纯文本字符串,其中包含有关用户的一些信息(用作验证)。所有这些都是通过SSL完成的。
但是,对于这个“系统”是否足够安全,我有点偏执。例如,如果我设置Fiddler并在ServicePointManager.ServerCertificateValidationCallback中检查SslPolicyError,它就会失效。因此,我可以轻松地使用Fiddler破坏系统。我注意到的是,在这种情况下,X509Certificate参数保存了Issuer:= ... fiddler2.com
现在,我可以检查证书颁发者是否与服务器当前使用的内容匹配。但是服务器证书可能会使用其他CA进行续订。如果发生这种情况,我最终将不得不让所有用户安装一个新客户端:一个支持噩梦。
我想知道,
这是设计上不好的系统吗?例如,在这种情况下SSL是否不足以保证足够的安全性?
要么
我是否尝试不正确地验证端点,如果是,那么进行验证的更好方法是什么?
最佳答案
SSL提供传输层安全性。因此,在这种情况下,如果介于两者之间,则实际上只针对Fiddler而不是目标服务器对客户端进行身份验证。
同样,如果服务器证书是用其他CA续订的,那么只要该CA在客户端上受信任就无所谓。您可以要求用户确认他信任CA,并将CA证书安装到“受信任的根证书颁发机构”存储下的“我的电脑”存储中。由于这是一个客户端应用程序,因此最好将所有此类问题委托给用户,并且您的应用程序可以执行从服务器获取令牌的核心工作。
如果您不希望与用户进行交互,则可以对客户端进行编码,以使其不关心证书的颁发者,只要证书上的名称与您要与之交谈的服务器的域名相匹配即可。
希望能有所帮助。
关于.net - HTTPWebRequest,SSL端点验证和,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/1988012/