如何使用 RSA、AES 和 JWT 进行安全授权?
How to do a Secure Authorization with RSA, AES and JWT?
首先,让我解释一下我想做什么:
假设 Bob 想要获得 Alice 的授权(经典示例),在我的示例中,Alice 是一个服务器。
让我们也想象一下,Bob 和 Alice 已经获得了每个 RSA 密钥 (4096)。
所以 Bobs 的步骤是:
- 使用 SHA512 和他的私钥签署学分(明文)
- 使用 AES CBC 256 加密签名数据和信用
- 使用 RSA 加密 AES 密钥
- 正在向 Alice 发送数据
所以 Alice 会从相反的方向执行上述步骤来解密它并从 Bob 验证它。
在 Alice 验证它是 Bob 之后,她生成了一个 JWT 令牌并使用她的私钥对其进行签名,并在响应 Header 授权中对其进行 Return 签名。
JWT 从 3600 获得了 TTL。
到目前为止一切顺利,但我现在的问题是我们如何保护 JWT 不被盗用?
确定它已签名,因此无法修改(除了攻击者从服务器获得私钥,但我的天哪,它无论如何都结束了)。
让我们想象一下,他将能够破解 HTTPS 并窃取令牌,将其放入他的 Header 中,这样他就可以欺骗爱丽丝相信他,直到它过期,他需要再次发送积分。
我在考虑两个选项:
选项 1:
总是发送 Credits 和 Decrypted 来验证 Bob。
但这会在每次请求时消耗巨大的性能,并且 JWT 的好处会丢失。
选项 2:
发送唯一 ID 并从 Bobs 设备确认它(加密,与选项 1 相同的问题)
我们可以做些什么来保护它?
也许我想太多了,一如既往,但我真的很想知道在那种情况下会是什么"Best Practise"。
谢谢你的回答
好吧,如果 Alice 不确定是谁发送了请求,那么 Bob 也不确定,所以这是一个双向问题,没有人 确定对方的身份,您可以使用来自证书颁发机构的签名证书来解决此问题。
您发送带有签名的证书,并且此证书是使用证书颁发机构(第三方)的私钥签名的,这确保了客户端服务器之间的连接是安全的并防止任何修改。
So far so good but my Question is now how do we Protect the JWT from getting Stoled ?
如您所知,它是 https
Lets Imagin he would be Able to Break the HTTPS and stealing the token
如果有人能够破解 HTTPS,那么我们的问题就比被盗的问题大得多 header。默认情况下,您可以信任 https(某些国家/地区的特殊情况除外)
假设通道不安全,例如,您可以分别对每条消息进行签名(使用不安全的通道,仅保护 header 是不够的)。
首先,让我解释一下我想做什么:
假设 Bob 想要获得 Alice 的授权(经典示例),在我的示例中,Alice 是一个服务器。
让我们也想象一下,Bob 和 Alice 已经获得了每个 RSA 密钥 (4096)。
所以 Bobs 的步骤是:
- 使用 SHA512 和他的私钥签署学分(明文)
- 使用 AES CBC 256 加密签名数据和信用
- 使用 RSA 加密 AES 密钥
- 正在向 Alice 发送数据
所以 Alice 会从相反的方向执行上述步骤来解密它并从 Bob 验证它。
在 Alice 验证它是 Bob 之后,她生成了一个 JWT 令牌并使用她的私钥对其进行签名,并在响应 Header 授权中对其进行 Return 签名。
JWT 从 3600 获得了 TTL。
到目前为止一切顺利,但我现在的问题是我们如何保护 JWT 不被盗用?
确定它已签名,因此无法修改(除了攻击者从服务器获得私钥,但我的天哪,它无论如何都结束了)。
让我们想象一下,他将能够破解 HTTPS 并窃取令牌,将其放入他的 Header 中,这样他就可以欺骗爱丽丝相信他,直到它过期,他需要再次发送积分。
我在考虑两个选项:
选项 1: 总是发送 Credits 和 Decrypted 来验证 Bob。
但这会在每次请求时消耗巨大的性能,并且 JWT 的好处会丢失。
选项 2: 发送唯一 ID 并从 Bobs 设备确认它(加密,与选项 1 相同的问题)
我们可以做些什么来保护它?
也许我想太多了,一如既往,但我真的很想知道在那种情况下会是什么"Best Practise"。
谢谢你的回答
好吧,如果 Alice 不确定是谁发送了请求,那么 Bob 也不确定,所以这是一个双向问题,没有人 确定对方的身份,您可以使用来自证书颁发机构的签名证书来解决此问题。
您发送带有签名的证书,并且此证书是使用证书颁发机构(第三方)的私钥签名的,这确保了客户端服务器之间的连接是安全的并防止任何修改。
So far so good but my Question is now how do we Protect the JWT from getting Stoled ?
如您所知,它是 https
Lets Imagin he would be Able to Break the HTTPS and stealing the token
如果有人能够破解 HTTPS,那么我们的问题就比被盗的问题大得多 header。默认情况下,您可以信任 https(某些国家/地区的特殊情况除外)
假设通道不安全,例如,您可以分别对每条消息进行签名(使用不安全的通道,仅保护 header 是不够的)。