Security 服务器如何知道请求来自客户端,而不是窃听黑客?

Security 服务器如何知道请求来自客户端,而不是窃听黑客?,security,authentication,web,client-server,Security,Authentication,Web,Client Server,我有一个简单的问题,我找不到简单的答案,可能我遗漏了什么,或者我不知道一些网络概念是如何工作的。我想知道我不知道的事情 简单地说,问题是,虽然窃听是可能的,但服务器如何知道请求来自客户端,而不是窃听黑客 情景: 无论我有什么安全策略,我都应该给客户发送一些东西。它可能是一个非对称加密的令牌或其他东西。客户端没有私钥,所以无论客户端能够做什么,发送等等,黑客都可以做,发送 保护web应用程序背后的逻辑可能是什么。应该有一些只有客户知道的秘密 顺便说一句,我正在学习JWT,这是我第一次学习auth。

我有一个简单的问题,我找不到简单的答案,可能我遗漏了什么,或者我不知道一些网络概念是如何工作的。我想知道我不知道的事情

简单地说,问题是,虽然窃听是可能的,但服务器如何知道请求来自客户端,而不是窃听黑客

情景:

无论我有什么安全策略,我都应该给客户发送一些东西。它可能是一个非对称加密的令牌或其他东西。客户端没有私钥,所以无论客户端能够做什么,发送等等,黑客都可以做,发送

保护web应用程序背后的逻辑可能是什么。应该有一些只有客户知道的秘密


顺便说一句,我正在学习JWT,这是我第一次学习auth。但这个简单的问题我仍然找不到答案

事实上,当建立新连接时,只有客户端才知道什么。 这就是为什么发明了类似的方法

它们通过在服务器和客户端之间发送问题和答案来工作。 使用(实际上)不太复杂的数学方法多次这样做,客户机和服务器可以共享一个只有他们知道的密钥,即使第三方截获了流量

我不能完全解释这个概念,但我可以推荐StackExchange问题,它将很好地概述这个主题


编辑:我刚刚听说过JWT,所以这个答案可能完全脱离了上下文。

查找Diffie Hellman和SSL/TLS加密。这里有一些东西可以让你开始。

简而言之,当客户端启动到服务器的连接时,它们共享一个未公开的密钥。问题是,客户端需要与它认为要连接的服务器建立初始连接

服务器如何知道请求来自客户机而不是服务器 窃听黑客

没有

由客户机验证服务器是否是它希望与之对话的服务器。它叫

可以使用TLS/SSL,以便通过HTTPS进行连接-注意,它不必是Diffie Hellman,还有其他密钥交换机制,如RSA

想象一下下面的场景

Client --> HTTPS --> example.com
客户端将对example.com进行DNS查找,并返回203.0.113.10。客户端将通过HTTPS连接到203.0.113.10,连接的初始部分称为握手过程。在这里,客户端检查它想连接到的域example.com是否有一个由可信证书颁发机构签名的证书,其主题设置为“
example.com
”。这将防止以下情况发生:

Client --> HTTPS --> Attacker (fake example.com)
例如,如果攻击者接管了DNS服务器并将example.com更改为指向他(198.51.100.200)

由于攻击者无法向证书颁发机构证明example.com的所有权,因此无法对其证书进行签名,以便向客户端证明其服务器是可信的,因此可以防止此攻击

HTTPS还加密连接,并以安全的方式交换密钥。这可确保无法读取已建立的连接

因此,一旦建立了连接,并且用户登录,服务器将向客户端发送会话令牌,该令牌可以是JWT的形式。如果这是一个cookie并且设置了,则只能通过HTTPS连接传输。这就是服务器知道它没有被拦截的原因,因为客户端已经验证了服务器,并使用双方同意的唯一密钥对传输到服务器的数据进行了加密

Client --> HTTPS --> Attacker (fake example.com) --> HTTPS --> example.com
也不可能(中间的主动人),这显示了您原始问题中的情况,即有人截取通信并将JWT传递给真正的服务器,观察传输中的私有数据。但是,如果使用普通HTTP(无SSL/TLS),则会出现这种情况:


想象一个已经建立的HTTPS连接(连接是安全的)到一个标准登录网页。黑客可以创建完全相同的连接。现在客户端可以登录了-只有客户端知道要继续的凭据(一些纯文本“机密”)。在这种情况下,服务器信任连接是安全的,并且基于提供的有效凭据信任客户机是他们的身份。这与要求SSL客户端证书不同,后者将客户端真实性作为HTTPS连接本身的一部分建立。在任何情况下,请参阅。(HTTPS连接是通过密钥交换建立的,以获得共享秘密:这可以保护通道不受窃听者的攻击,但不足以证明客户端不是攻击者。每当客户端必须证明自己时,客户端必须知道(秘密)某件事,或者在多因素身份验证的情况下,必须知道(一个受控的)东西-可以被验证。)清晰而出色的回答。谢谢。你为我节省了很多时间!
Client --> HTTP --> Attacker (fake example.com) --> HTTP --> example.com