1

看起来保护 ASP.NET Web API 的解决方案非常分散,所以我决定推出自己的公钥/私钥加密方案。请查看我的工作流程并帮助我回答我最后遇到的问题。(同样,它特定于 .NET 4.0 Web API 框架)

  1. 用户在我的 Web MVC 4.0 网站上注册。
  2. 注册后,我的网站会做 4 件事

    a) 为该用户生成一个 RSA服务器公钥

    乙)。为该用户生成 RSA服务器私钥

    C)。为该用户生成 RSA客户端公钥

    d)。为该用户生成 RSA客户端私钥

  3. 我将所有 4 个密钥保存到数据库中的该用户帐户,并为用户提供称为“APIKey”的服务器公钥以及称为“SecretKey”的客户端私钥。这是为了将来的握手目的。用户永远不会知道服务器私钥或客户端公钥。

  4. 一旦用户确认他们拥有密钥,出于安全目的,我会从我的数据库中删除“客户端私钥”。

  5. 用户通过使用RSA服务器公钥(APIKey)提交服务器公钥(或APIKey)+“:”+(用户名,密码)的加密消息开始请求我的WebAPI认证服务

  6. 服务器收到 APIKey+":"+ 加密消息,找到私钥,解密消息,获取用户名、密码,并使用 Membership 提供者确保它们是正确的。

  7. 如果不正确,则创建拒绝响应。否则,它会为用户找到记录在案的客户端公钥,创建一个唯一的时间敏感会话令牌(在 5 分钟后过期),将其记录在数据库中 + 时间创建,并使用客户端公钥加密令牌并将其发送回给客户。

  8. 客户端收到响应,使用它的“客户端私钥”或“密钥”解密响应,获取令牌。

  9. 用户通过使用服务器公钥加密以下内容向服务发出其他请求

    a) 会话令牌 b) 时间戳(这样我可以确保不会发生重放攻击) c) 数据

并将其 APIKEy+":"+加密消息发送到服务器

我坚持的是第 9 步及以后。

在第 9 步是否有必要仍然使用公钥/私钥进行通信?我问的原因是因为浏览器通过 SSL 与服务器通信,最后,一旦发生握手,他们使用约定的密码套件对称算法来回传递消息,据说它更快?但是,如果我们这样做,从现在开始,它会是安全的吗?

在这种情况下,在我的工作流程中,我可以在我的 Web API 和客户端之间交换此协议以使用相同的对称算法来来回加密/解密信息?

谢谢!!

编辑:如果您在此工作流程中发现缺陷,请告诉我!非常感谢。

4

2 回答 2

0

请不要推出自己的方案。即使是专家也很难做到加密。一个非常细微的错误可以完全消除该方案提供的所有安全性。以过去几年对 SSL/TLS 的攻击为例。

你提到了一个“web api”,但不清楚你使用的是什么协议。如果您使用的是 SOAP,请使用为 SOAP 定义良好的“Web Security”(WS)。如果您通过 HTTP(例如 REST)进行通信,请使用 HTTPS。如果您通过连接的通道进行通信,请使用 TLS 或 SSH。

编辑:根据http://msdn.microsoft.com/en-us/library/hh833994(v=vs.108).aspx

ASP.NET Web API 是一个框架,可让您轻松构建覆盖广泛客户端(包括浏览器和移动设备)的 HTTP 服务。ASP.NET Web API 是在 .NET Framework 上构建 RESTful 应用程序的理想平台

这意味着您可能想要使用 HTTPS。

于 2013-06-21T02:16:35.857 回答
0

您可能希望在不需要域/用户身份验证的情况下进行安全身份验证,因此您希望服务器客户端证书交换正确吗?如果您只想要加密流量(无论如何都应该将其用于交换),ATK 是正确的,但对于实际将其用作身份验证,这篇文章非常有用:http ://codebetter.com/johnvpetersen/2012/04/02/使您的asp-net-web-apis-安全/

于 2013-10-09T15:39:28.303 回答