簡體   English   中英

客戶端已知的客戶端-服務器應用程序的加密和身份驗證

[英]Encryption and authentication for client-server application where clients are known

我想編寫一個安全的客戶端-服務器應用程序,其中只有少數(例如五個)客戶端通過TCP套接字與服務器交換數據。 事先已知所有客戶,並且可以離線共享密鑰等。

我想要三件事:

  1. 客戶需要確保他們與正確的服務器通信
  2. 服務器需要確保僅與這五個客戶端通信
  3. 通信需要加密

應該如何實現這樣的設置?

我的第一個想法是啟用SSL / TLS的套接字,但是考慮了一段時間之后,我覺得握手中的密鑰交換並不是我真正需要的。 同樣,整個證書頒發機構業務似乎需要解決,以解決自簽名證書的問題。

另一個選擇似乎是進行常規的套接字通信,並在兩端進行加密/解密和簽名。 類似於基於gpg的電子郵件設置,我可以為服務器和每個客戶端創建密鑰對,並確保服務器具有所有客戶端的所有公共密鑰,並且確保每個客戶端都有服務器的公共密鑰。 因為我可以將文件本地復制到每台計算機,所以可以認為這種密鑰交換是安全的。

還是我應該只對所有客戶端和服務器使用單個密鑰使用對稱加密?

我幾乎可以在網上找到所有關於“經典”設置的信息,其中服務器通過證書頒發機構(例如,類似於HTTPS的設置)向許多任意客戶端進行身份驗證。

我打算用Java編寫它,但實際上我認為我的問題與語言無關。

我建議您使用TLS。 它包含許多所謂的密碼套件 ,這些密碼套件是包括的加密算法的預定義組合,並且它們確保對等身份驗證,非對稱密鑰交換,對稱加密和消息身份驗證。 他們在現實世界中經過了考驗。

使用證書:

  • 創建一個自簽名的CA證書,並使用它簽署所有客戶端和服務器證書。
  • 配置它們以僅接受由您的CA簽名的證書進行身份驗證的相對方。

或者,如果您對證書不滿意,也可以使用使用預共享密鑰身份驗證的密碼套件(查找PSK和SRP)。

暫無
暫無

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

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