2013-07-03 194 views
1

我有一個基於客戶端服務器的C++應用程序,它通過網絡進行通信(使用boost asio),並計劃將此客戶端應用程序分發給我的客戶。我的問題是我不知道如何防止來自其他應用程序的連接請求,那就是如何確保只有我的客戶端應用程序能夠連接到我的服務器。我認爲在沒有建立連接的情況下,沒有辦法做到這一點,而驗證請求來自客戶端的最佳方式是什麼?boost asio客戶端身份驗證

+0

我有同樣的問題;我的解決方案是使用SSH隧道。你必須事先打開隧道,但你直接依靠現有的機制來解決這個問題。 – piwi

回答

0

是的,您必須接受連接才能知道它是否來自您的應用程序。 您可以在連接步驟使用三次握手:

  1. 客戶端連接到服務器的服務器發送一個特定 值(整數,字符串或其他)的新客戶。
  2. 客戶端處理這個值,用它計算一個新值,並向服務器發送新的值 。
  3. 服務器檢查返回值是否正確。

客戶端將具有與服務器相同的計算方法。如果其他應用程序返回錯誤值,則它們將無法使用您的服務。

+0

這很容易受到重播攻擊。 – PSIAlt

+0

它不。如果正確執行握手,則重播攻擊不成問題... – nouney

5

您可以使用asio的內置SSL的能力。所以,你爲每個服務器和客戶端證書生成證書。因此,您可以在SSL握手時檢查服務器上的客戶端證書。作爲獎勵,您的流量將被加密和SSL安全。客戶可以檢查服務器是不是假的;服務器可以檢查客戶端的授權。