Asp.net web api 安全web api,我的公钥/私钥工作流。如何合并对称密钥?

Asp.net web api 安全web api,我的公钥/私钥工作流。如何合并对称密钥?,asp.net-web-api,Asp.net Web Api,看起来保护ASP.NET Web API的解决方案非常分散,所以我决定推出自己的公钥/私钥加密方案。请看一下我的工作流程,并帮助我回答一个我最后一直坚持的问题。(同样,它特定于.NET4.0WebAPI框架) 用户在我的Web MVC 4.0网站上注册 一旦注册,我的网站做4件事 a) 为此用户生成RSA服务器公钥 b) 。为该用户生成RSA服务器私钥 c) 。为此用户生成RSA客户端公钥 d) 。为此用户生成RSA客户端私钥 我将此用户帐户的所有4个密钥保存在数据库中,并为用户提供服务器公钥(

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

  • 用户在我的Web MVC 4.0网站上注册
  • 一旦注册,我的网站做4件事

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

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

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

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

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

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

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

  • 服务器接收APIKey+“:”+加密消息,查找私钥,解密消息,获取用户名、密码,并使用成员资格提供程序确保其正确性

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

  • 客户端接收响应,使用其“客户端私钥”或“密钥”对响应进行解密,获取令牌

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

    a) 会话令牌 b) 时间戳(因此我可以确保重播攻击不会发生) c) 资料

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

    我坚持的是第9步及以后

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

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

    谢谢


    编辑:如果您看到此工作流中存在缺陷,请务必让我知道!非常感谢

    请不要推出自己的方案。加密是很难得到正确的,即使是由专家。一个非常细微的错误可以完全消除方案提供的所有安全性。只需看看过去几年中针对SSL/TLS的攻击就可以得到一些示例

    您提到了“WebAPI”,但不清楚您使用的是什么协议。如果您使用的是SOAP,请使用“Web安全性”(WS),这是为SOAP定义的。如果您通过HTTP(ex-REST)进行通信,请使用HTTPS。如果您通过连接的通道进行通信,请使用TLS或SSH

    编辑:每

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


    这意味着您可能希望使用HTTPS。

    您可能希望在不需要域/用户身份验证的情况下进行安全身份验证,所以您希望服务器客户端证书交换,对吗?如果您只需要加密的通信量(您无论如何都应该在exchange中使用加密的通信量),ATK是正确的,但对于实际将其用作身份验证,本文非常有用: