2014-10-31 94 views
0

我的客戶端服務器程序使用OpenSSL來處理數據交換並正在工作,但我需要確保我的客戶端連接的服務器是正確的服務器而不是假的服務器。安全的服務器 - 客戶端握手方法

問題是我的程序生成一個自簽名證書,客戶端無法驗證。如果我嵌入證書,任何人都可以提取它,製作一個假的客戶端服務器並嘗試竊取信息。 OpenPGP密鑰也一樣。

因此,即使服務器二進制文件適用於所有人,我是否可以實現一些驗證服務器的方法,因爲它也是客戶端?

+0

「如果我嵌入證書,任何人都可以提取它,製作假客戶服務器並嘗試竊取信息」是不正確的。這隻有在嵌入私鑰的情況下才會發生。與往常一樣,簡單的解決方案是獲得由CA簽名的證書。 – EJP 2014-10-31 05:01:18

+0

但私鑰必須在服務器上,對不對?客戶端也充當服務器,就像P2P一樣。 – Fusgyus 2014-10-31 14:27:26

回答

0

在這種情況下,安全認證不依賴於實際證書,而是依賴於密鑰對。

非對稱加密技術依賴於私鑰和公鑰。私鑰必須保密(因此請將其保存在必須進行身份驗證的服務器上,即您稱爲正確的服務器)。公鑰可以任意傳播,有人可以做的唯一事情就是爲私鑰持有者加密信息,或者驗證他簽發的簽名。

實際身份驗證過程背後的(非常)基本思想是通過身份驗證客戶端發送加密的隨機數,只有正確的服務器可以解密並返回,或者讓服務器簽署客戶端定義的某些內容。實現身份驗證的真正過程要防止中間人攻擊要複雜一點,但遠遠超出了這個答案的範圍。

因此,即使服務器二進制文件可用於所有人,我是否可以實現一些驗證服務器的方法,因爲它也是客戶端?

依賴已經存在的東西,並且不要自己實現加密代碼。無論如何,如果您已經分配了密鑰,也許可以考慮using TLS for encrypted communication,認證將在握手階段完成。

+0

該程序已經在使用TLS 1.2,但假冒的服務器可能會像正確的服務器一樣,檢查我的協議握手(在TLS連接建立後執行),然後開始竊取信息。我認爲任何方法(不涉及第三方)都很容易進行逆向工程,因爲服務器二進制文件是已知的。 – Fusgyus 2014-10-31 14:41:53

+0

如果您驗證服務器證書的指紋,則不會發生這種情況。如果沒有私鑰,沒有人能夠執行TLS握手,您不必(不可以)發佈私鑰。 – 2014-10-31 14:44:54

+0

對不起,我不明白。到我的服務器(也就是客戶端,就像P2P,但不是)執行TLS握手,我必須在其中嵌入私鑰(?)。那麼,如何通過逆向工程攻擊者獲得服務器二進制文件不能進入私鑰。 – Fusgyus 2014-10-31 16:46:57