1

我正在使用 WebBrowser 控件将 WebInterface 添加到 C# 应用程序。我的愿望是验证只有这样的应用程序才能使用 SSL 客户端证书连接到我们的 Web 服务器。

我的想法是将客户端证书嵌入到应用程序中,并在通过我的应用程序连接时使用。有人对如何做到这一点有建议吗?或者让它工作的唯一方法是在 X509Store 中加载密钥。

如果我把它放在 X509Store 中,它会让我的密钥可用于一般 Internet Explorer 使用吗?

4

3 回答 3

1

所以,这里有几个想法:

1.

我同意 'erickson' 的观点,确认只有您的应用程序可以与应用程序通信,这在您当前的设计中几乎是不可能的。有人对您的应用程序进行逆向工程师然后游戏结束只是时间问题(如果那是您唯一的安全形式)。如果您想验证它是您的应用程序和有效用户,那么您需要对用户进行身份验证以及检查相关应用程序签名的某种机制(我认为这在客户端-服务器模型中是不可能的。 ..毕竟我总是可以撒谎说我的“hackyou”应用程序与你的“realapp”具有相同的签名,你无法从服务器端验证)

2.

请记住,WebBrowser 控件本质上是 IE 的包装器,因此如果没有一些技巧(我将在几秒钟内了解),您将不得不将证书添加到用户存储中。

3.

这是完成您所要求的事情的一种hacky方法(即使这是一个坏主意):

  • 首先使用WebRequest.Create创建一个 HttpWebRequest 对象
  • 从文件或程序中编码的二进制流中手动加载 X509Certificate2 对象
  • 使用HttpWebRequest.ClientCertificates将您的证书添加到 webrequest
  • 发送请求,得到响应
  • 通过将 HttpWebResponse 的 ResponseStream 推送到 WebBrowser 的 DocumentStream 来向 WebBrowser 发送响应

这实质上意味着您必须编写一些包装类来处理与服务器之间的请求和响应,并且只使用 WebBrowser 来处理 HTML 的查看。

实际上,您需要重新设计并查看您要处理的威胁!

于 2008-10-24T18:12:33.390 回答
1

你确定这是你想做的吗?如果您将私钥嵌入到您的应用程序中(根据您的方法),攻击者可以提取它并使用它来验证他们的流氓软件。

服务器无法验证客户端软件。它只能测试客户端是否拥有某些秘密。当您在客户端中嵌入私钥并分发它时,它就不再是秘密了。

我建议对您的软件的用户进行身份验证,而不是对软件本身进行身份验证。您需要让用户生成自己的秘密,无论是密码还是私钥,并给予他们保护它的动力。

于 2008-09-18T21:05:58.307 回答
0

使用密钥的目的与其说是验证用户,不如说是限制对应用程序用户的访问,而不是使用任何 WebBrowser。这是公共互联网上的一种内部网行为。

这是一个穷人的 DRM。人们提取密钥造成的损失并不那么重要。我认为发生这种情况的风险很低,我们可以松懈的可能性很小。

不过,如果有任何其他想法将 WebServer 的访问权限仅限于应用程序的用户,我愿意接受任何建议。基本上,我现在的愿望是拥有一个公开的 WebServer,任何人都可以阅读,但是从不同的地方通过公共网络访问是必要的,因此建立 Intranet 基础设施也是不可能的。

于 2008-09-18T21:23:41.353 回答