2009-06-11 77 views
2

我有一個客戶端程序通過SSL連接(https)與Web服務器通信。這種連接有多安全?我購買了安裝在我的Web服務器上的SSL證書,因此我的理解是,即使有人在我的客戶端和我的服務器之間嘗試了中間人攻擊,他們也沒有證書?這是真的?即使使用SSL證書,我的SSL連接安全性如何?

因此,舉例來說,如果他們試圖將主機名www.myserver.com重定向到他們自己的IP,https的仍然會失敗,因爲連接會報告沒有安裝該證書不可信的來源?


只是想指出我的程序是一個二進制文件,而不是用戶通過瀏覽器看到的網頁。因此他們不能簡單地按下「接受不可信任的SSL」並繼續進行。如果檢測到不可信的SSL連接,我的二進制代碼將退出編碼。鑑於此,「中間人」仍然有可能將流量重定向到某處並提取加密數據?

謝謝!

回答

7

如果「人在這方面的中間人」實際上位於客戶端計算機上(想了病毒,木馬或其他惡意軟件的),他們可以讀取/修改任何事情通過該連接。但是,在客戶端和服務器之間,連接非常安全,只要您的客戶端程序檢查SSL證書的有效性即可。

4

如果是選擇是否要接受SSL證書,從主機名稱變動結果可能不會停止一切錯誤,因爲人可能點擊右鍵過去那種警告框,一個人(不是代碼)。

0

服務器和客戶端之間傳輸的數據是加密的。

因此,舉例來說,如果他們試圖 主機名www.myserver.com 重定向到他們自己的IP,因爲連接將 報告安裝不 證書的不可靠來源的HTTPS將 還是失敗?

是的。但是,如果用戶不擔心安全問題,則警告信息仍然可以被用戶忽略。只有溝通是安全和安全的。如果有客戶端程序(病毒)可以解釋接收到的數據並做任何想要的事情。因此,更好地教育客戶(用戶)關於安全問題和擁有「安全」PC的重要性。

如果要是非常機密的轉移,那麼你可以通過添加摘要字段(要與密鑰一起傳送的數據形成的),並將它傳遞給客戶端添加另一層安全數據。然後,客戶端可以再次創建摘要(使用收到的數據和密鑰),然後比較任何不匹配。

如果數據在傳輸過程中發生了不匹配的情況,則進行修改。

3

這取決於你如何驗證在客戶端證書中科院您選擇在驗證過程中信任什麼。

如果您的客戶端應用程序信任已經發出相同的主機名的證書的CA,該證書可在MITM攻擊使用。 (並不是完全沒有聽說過這個證書已經發給"wrong"人)。

過程中使用哪些CA來確定簽名是否有效取決於您的SSL庫以及您如何使用它。

I.e.在瀏覽器的情況下,firefox與來自默認信任的或多或少信譽良好的SSL供應商的一組CA證書捆綁在一起。

Windows類似地有一個IE默認信任的證書存儲區,我猜測其他應用程序使用Microsofts SSL libraraies可以選擇使用此證書存儲區或默認使用它。

0

你感到困惑的問題:

  1. 傳輸層安全性,SSL提供;和
  2. 客戶端身份驗證,SSL不。

根據您的應用程序,您可能要考慮使用類似SSH隧道的東西來代替。這提供了強大的加密功能來保護傳輸,並通過使用公鑰密碼來提供登錄憑證。

您可以爲每個客戶端程序自動生成一個新的公鑰,並將其添加到您的授權密鑰列表中以便登錄。因此,只有您授權的客戶才能訪問。

大多數SSH客戶端在遇到具有與他們期望的已知主機不同的公鑰的服務器時會自動失敗。您可以預先配置它作爲您自己的服務器公鑰。

3

是的,當使用SSL(設計(並修改))來阻止MitM攻擊時,您通常是安全的。

要清楚的是,您的SSL證書是公開信息 - 並且沒有保密價值。你的服務器將把它發給任何說你好的客戶端。這是與證書中的公鑰匹配的私鑰,必須保存,私密。

爲了保證連接的最大安全性,您應該嚴格限制客戶端可以接受的證書 - 事實上,您甚至可以通過將證書本身(或證書的散列)存儲在客戶端,將其限制爲完全匹配。在這種情況下,您甚至不關心主機名匹配 - 甚至可以消除惡意中介從您的主機名中獲得有效證書的機會,同時也破壞了DNS。

0

Tls確實提供了握手中的客戶端認證