安全的网络API,我的公钥/私钥工作流程。如何加入对称密钥?

时间:2013-06-21 02:08:51

标签: asp.net-web-api

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

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

    a)为此用户生成RSA 服务器公钥

    B)。为此用户生成RSA 服务器私钥

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

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

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

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

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

  6. 服务器收到APIKey +“:”+加密邮件,找到私钥,解密邮件,获取用户名,密码,并使用成员资格提供程序确保它们是正确的。

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

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

  9. 用户使用服务器公钥对服务发出其他请求以加密以下

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

  10. 并向服务器发送其APIKEy +“:”+加密消息

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

    步骤9是否还需要使用公钥/私钥进行通信?我问的原因是因为浏览器通过SSL与服务器通信,最后,一旦握手发生,他们使用商定的密码套件对称算法来回传递消息,据说它更快?但是,如果我们这样做,从病房的这一点来看它是否安全?

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

    谢谢!

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

2 个答案:

答案 0 :(得分:0)

请不要推出自己的计划。加密很难做到,即使是专家也是如此。一个非常微妙的错误可以完全删除该方案提供的所有安全性。举几个例子来看看过去几年对SSL / TLS的攻击。<​​/ p>

你提到了“web api”,但目前还不清楚你正在使用什么协议。如果您使用的是SOAP,请使用“Web安全性”(WS),它是为SOAP定义的。如果您通过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。

答案 1 :(得分:0)

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