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