簡體   English   中英

客戶端(java獨立客戶端)應用程序身份驗證和用戶身份驗證之間的區別

[英]Difference between client (java standalone client)application authentication and user authentication

對於網絡應用程序,我可以理解,客戶端身份驗證和用戶身份驗證之間沒有區別; 忽略XSS和其他漏洞,Web客戶端由服務器/ Servlet生成。

但是,假設您有一個與Java Server應用程序通信的Java客戶端應用程序; 服務器具有與之關聯的證書,以便客戶端可以驗證和驗證服務器是否受信任。 現在,客戶端還具有一個證書(客戶端證書),以便服務器可以驗證這是否是受信任的客戶端; 完成此相互身份驗證后,可以將用戶證書(用戶證書)傳遞給服務器,而不是向用戶顯示用戶名/密碼對話框。

問題是,在這種情況下擁有(客戶證書)是否有任何優勢/用途? 還是僅憑用戶證書就足以信任客戶端?

我知道這是一個明顯的問題/但無法創建胭脂客戶端應用程序? 因此,客戶端證書將防止這種情況。

每當您擁有客戶端服務器應用程序時,服務器都需要假定客戶端已受到攻擊。 進行身份驗證時(用戶名/密碼,證書等...無關緊要),服務器應向用戶授予某些使用服務器功能的權限。 每當對服務器發出請求時,服務器都需要檢查經過身份驗證的用戶是否具有執行該操作的權限。

信任客戶端僅發出授權的請求可以使自己容易受到攻擊。 如果您檢查服務器上的權限並清除輸入,則不必擔心用戶是否正在使用受信任的客戶端,因為即使不受信任的客戶端也無法使用相同的身份驗證憑據來完成比受信任的客戶端更多的操作。

無論您使用的是Web客戶端還是獨立客戶端,這些原則均適用。 即使在Web應用程序中,我也可以編寫新的客戶端和POST數據,使用RESTful服務,或者通常與Web服務器對話並完全繞開您提供給我的Web UI。

如果某些攻擊者以某種方式更改了客戶端應用程序,則它可以使用有效的用戶證書來訪問服務器。

服務器應該驗證客戶端應用程序,而不是出於服務器的緣故(我們假設服務器檢查客戶端是否可以執行此操作或該操作,而是為了確保客戶端不會被虛假的客戶端攻擊。 然后,服務器可以聲明所有由client-1進行的操作都是通過某些經過驗證的client-app(代理)進行的,因此它們確實是用戶想要的。

客戶端應用程序的證書(及其私鑰)可以很容易地從應用程序中剝離出來,並且可以創建惡意應用程序。 解決此問題的方法是(a)使用用戶的證書,並在需要時讓用戶提供它,以及(b)使用USB加密令牌存儲客戶端證書及其私鑰。 加密令牌不會泄露私鑰,因此攻擊者無法復制它(盡管他可以物理訪問令牌,但可以在應用程序中使用令牌)。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM