在webappliciton的情况下,我可以理解客户端身份验证和用户身份验证之间没有区别;忽略XSS和其他漏洞利用服务器/ servlet生成Web客户端。
但是假设您有一个Java客户端应用程序与Java Server应用程序通信;服务器具有与之关联的证书,以便客户端可以验证并验证服务器是否可信。现在客户端还有一个证书(客户端证书),以便服务器可以验证这是否是一个受信任的客户端;完成此相互身份验证后,可以将用户证书(用户证书)传递给服务器,而不是向用户显示用户名/密码对话框。
问题是在这种情况下是否有任何优势/用途(客户证书);或者单独的用户证书是否足以信任客户端?
我知道这是一个显而易见的问题/但是不能创建一个胭脂客户端应用程序?因此,客户端证书也可以防止这种情况发生。
答案 0 :(得分:1)
每当您拥有客户端服务器应用程序时,服务器都需要假设客户端遭到入侵。当发生身份验证(用户名/密码,证书等......无关紧要)时,服务器应授予用户某些权限以使用服务器的功能。每当向服务器发出请求时,服务器都需要检查经过身份验证的用户是否具有执行该操作的权限。
信任客户端仅发出授权请求会让您自己受到攻击。如果您检查服务器上的权限并清理输入,那么您不必担心用户是否使用受信任的客户端,因为即使不受信任的客户端也不能使用相同的身份验证凭据执行更多信任的客户端。
无论您使用的是Web客户端还是独立客户端,这些原则都适用。即使在Web应用程序中,我也可以编写新的客户端和POST数据,使用RESTful服务,或者通常与Web服务器通信并完全绕过您提供给我的Web。
答案 1 :(得分:0)
如果某个攻击者以某种方式改变了客户端应用程序,它可以使用有效的用户认证来访问服务器。
服务器应该验证客户端应用程序,而不是为了服务器(我们假设服务器检查客户端是否可以执行此操作或该操作,但是为了确保客户端不被伪造的客户端钓鱼)。然后,服务器可以宣布客户端1所做的所有操作都是通过一些经过验证的客户端应用程序(代理)进行的,因此用户确实是这样做的。
答案 2 :(得分:0)
客户端应用程序的证书(及其私钥)可以轻松地从应用程序中删除,并且可以创建恶意应用程序。抵消这种情况的方法是:(a)使用用户的证书并让用户在需要时提供它;(b)使用USB cryptotoken存储客户端证书及其私钥。 Cryptotokens不会泄露私钥,因此攻击者无法复制它(尽管他可以使用令牌与他的应用程序,如果他有物理访问令牌)。