安全的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. 用户开始通过提交服务器公钥(或APIKey)+":"+使用RSA服务器公钥(APIKey)加密的(用户名,密码)消息来请求我的WebAPI认证服务

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

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

  8. 客户端收到响应,使用它的"客户端私钥"或"秘密密钥"解密响应,得到令牌。

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

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

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

我卡住的是第9步及以上。

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

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

谢谢! !

编辑:如果你看到这个工作流程中的缺陷,请让我知道!非常感谢。

您可能正在寻找一个不需要域/用户认证的安全身份验证,所以您想要服务器客户端证书交换对吗?如果您只想要加密流量(无论如何您都应该将其用于交换),那么ATK是正确的,但是对于实际使用它作为验证,这篇文章非常有用:http://codebetter.com/johnvpetersen/2012/04/02/making-your-asp-net-web-apis-secure/

请不要推出自己的方案加密货币很难掌握,即使是专家。一个非常微小的错误可以完全消除方案提供的所有安全性。看看过去几年对SSL/TLS的攻击就知道了。

你提到了一个"web api",但不清楚你到底在使用什么协议。如果您正在使用SOAP,请使用"Web Security"(WS),它是为SOAP定义的。如果您使用HTTP(不包括REST)进行通信,请使用HTTPS。如果您通过已连接的通道进行通信,请使用TLS或SSH。

EDIT: Per http://msdn.microsoft.com/en-us/library/hh833994(v=vs.108).aspx,

ASP。. NET Web API是一个使构建HTTP变得容易的框架服务覆盖广泛的客户端,包括浏览器和移动设备。ASP。. NET Web API是一个理想的构建平台.NET框架下的RESTful应用程序

这意味着你可能想使用HTTPS

最新更新