看起来用于保护ASP.NET Web API的解决方案非常分散,因此我决定推出自己的公钥/私钥加密方案。请看一下我的工作流程,并帮我回答一下我最后坚持的问题。 (同样,它特定于.NET 4.0 Web API框架)
注册后,我的网站会做4件事
a)为此用户生成RSA 服务器公钥
B)。为此用户生成RSA 服务器私钥
C)。为此用户生成RSA 客户端公钥
d)。为此用户生成RSA 客户端私钥
我将所有4个密钥保存到数据库中的此用户帐户,并为用户提供服务器公钥,称为“APIKey”以及名为“SecretKey”的客户端私钥。这是为了将来的握手目的。用户永远不会知道服务器私钥和客户端公钥。
一旦用户确认他们有密钥,我出于安全目的从数据库中删除“客户私钥”。
用户通过使用RSA服务器公钥(APIKey)提交服务器公钥(或APIKey)+“:”+加密消息(用户名,密码)来开始请求我的WebAPI身份验证服务
服务器收到APIKey +“:”+加密邮件,找到私钥,解密邮件,获取用户名,密码,并使用成员资格提供程序确保它们是正确的。
如果不正确,则创建拒绝回复。否则,它会为用户找到记录的客户端公钥,创建一个唯一的时间敏感会话令牌(在5分钟后到期),在数据库中记录+创建的时间,并使用客户端公钥加密令牌并将其发回给客户。
客户端收到响应,使用它的“客户端私钥”或“密钥”来解密响应,获取令牌。
用户使用服务器公钥对服务发出其他请求以加密以下
a)会话令牌 b)时间戳(所以我可以确保不会发生重放攻击) c)数据
并向服务器发送其APIKEy +“:”+加密消息
我坚持的是第9步及以后。
步骤9是否还需要使用公钥/私钥进行通信?我问的原因是因为浏览器通过SSL与服务器通信,最后,一旦握手发生,他们使用商定的密码套件对称算法来回传递消息,据说它更快?但是,如果我们这样做,从病房的这一点来看它是否安全?
在这种情况下,在我的工作流程中,我可以在Web API和客户端之间交换此协议,以使用相同的对称算法来回加密/解密信息吗?
谢谢!
编辑:如果您发现此工作流程存在缺陷,请告诉我们!非常感谢。
答案 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/