2011-04-06 58 views
3

我對SSL/TLS有一個基本的誤解,我希望能夠清除它。SSL/TLS的誤解

我的理解是,當我得到一個證書爲我的網站有我的所有信息,並通過我的證書頒發機構(VeriSign公司,或任何人)簽字。當有人從我的網站請求使用SSL/TLS的頁面時,證書將發送給用戶,並使用證書頒發機構衆所周知的公鑰對其進行驗證。然後用戶可以查看證書並查看我的信息。他們確信我是我自己說的那個人,並且自從驗證正確運行以來,該消息並未被篡改。

什麼是阻止我在瀏覽器和真正的網站中間放置一個代理服務器,然後發送真實網站的證書(我不知道這是否正確,我想我在這一點上因爲我的瀏覽器把它確認下來),讓客戶認爲它真的是網站whateverdomain.com,當它真的是我的中間?

謝謝。

+0

偉大的問題! – 2011-04-06 19:05:51

回答

2

首先,所有的證書都是公開的,沒有加密。然而,它與CA的私鑰簽署。

當客戶端連接到服務器,它們基於某些祕密信息,即服務器的私有密鑰(和服務器只發送公證書沒有私鑰客戶端)執行密鑰交換。這是步驟1.

步驟2是用於客戶端驗證給定的證書,並確保其(客戶端)已連接到預期位點,即網站已呈現的合法證書。這樣的驗證是一個複雜的過程(許多參數被檢查並且許多步驟被製作)。驗證涉及檢查服務器證書的簽名。

現在關於MITM攻擊。一般來說,這是防止MITM攻擊的第2步。如果驗證不力,攻擊者可以嘗試僞造證書並歪曲網站。另一個可能的薄弱環節是證書頒發機構沒有經過適當驗證或由於安全漏洞(最近發生在某些Comodo的子CA)而頒發了證書。

我們有一個很好的(我希望的SSL在corresponding article如何工作:)描述,但它並不能解釋MITM攻擊。

1

證書只包含SSL連接的公鑰。客戶端將使用證書中的公鑰與服務器進行通信,因此代理服務器將需要保密的相關密鑰。

注意,公共/私人密鑰對通常用於交換其用於散裝通信的對稱加密密鑰。

+0

飢餓 - 你是說它包含我的證書的公鑰或簽名機構的公鑰?如果是用於我的證書並持有私鑰,那麼用戶如何知道這確實來自CA? – skaz 2011-04-06 19:03:32

+0

它包含您的證書的公鑰。瀏覽器擁有根CA的「硬編碼」公鑰,而證書由CA用他們的私鑰簽名。因此,除非您知道CA的私鑰或者妥協瀏覽器,否則您無法僞造證書。另見http://askubuntu.com/questions/30039/warning-about-ssl-ceritificate-am-i-under-attack – Nils 2011-04-06 19:09:35

+0

-1這是誤導。服務器不需要私鑰來向客戶端發送消息 - 他們需要私鑰來讀取客戶端發送的消息。 – 2011-04-06 19:23:02

1

首先,對術語:當有人加密(的散列)與自己的私鑰文件,我們不再叫它加密 - 這就是所謂的簽署。因此證書頒發機構(CA)使用其私鑰簽署(散列)文檔,因此文檔有效性可以由大家使用CA's public key驗證。

其次,SSL現在被稱爲TLS

現在,回答你的問題:一旦你有服務器的公鑰,你可以發送消息只有服務器可以讀取,因爲沒有其他人有他們的私鑰。所以,如果你加密了一個AES密鑰,並且服務器發送回你的消息「Hello world!」使用該密鑰加密,可以確定該消息確實來自服務器,因爲沒有其他人可以讀取密鑰。

實際的handshake in TLS比這更復雜,但這是基本的想法。

+0

或者更確切地說,TLS已經過時了SSL。 – 2011-04-06 20:13:50

3

就SSL/TLS的工作方式和證書交換而言,它們的答案基本上是正確的。但是,讓我們專門看這個,因爲它涉及到你的原始問題。

爲了這個工作,代理服務器必須能夠:

其中通用名稱屬性要連接的網站域名匹配
  1. 提供證書。換句話說,如果您想要訪問https://www.example.com,則代理服務器必須能夠以www.example.com或* .example.com作爲通用名稱提供證書。
  2. 代理提供的證書必須由您的瀏覽器信任的CA簽名。儘管您的瀏覽器信任數十個CA,但理論上它們都不會使用通用名稱www.example.com發佈證書,除非您能證明您擁有該域名。

因此,實際上,要讓代理服務器模仿企業環境之外的SSL/TLS會話是非常困難的。在企業環境中,這是一個不同的故事。公司通常在桌面上的瀏覽器中註冊自己的內部CA證書。當您使用TLS登錄您的銀行時,企業網絡代理通常會使用正確的域名向您的瀏覽器生成證書。您的瀏覽器會看到https://www.mybank.com和來自受信任的CA的匹配證書,非常高興。同時,企業網絡代理向您的銀行維護單獨的TLS會話。在這之間,代理能夠記錄您的所有HTTPS帖子並獲取呼叫,包括任何形式的內容(如ID和密碼)。

在公司環境之外,大多數攻擊者不需要去那麼麻煩,因爲他們可以坐在Wi-Fi熱點並運行SSLStrip。大多數人不會注意到該會話實際上不是SSL,特別是當攻擊者將收藏夾圖標更改爲鎖定符號時。

1

我認爲在不使用證書並添加證書的情況下更容易解釋此問題。

鑑於證書證明公鑰,如果我們刪除證書,您只需要公鑰。如果您的站點有公鑰並將其呈現給某個客戶端,則只有擁有相應的私鑰纔有意義和目的。否則,你的虛張聲勢將被客戶立即調用 - 客戶將選擇一個隨機數字1729,使用公鑰對其進行加密,並詢問您選擇的數字是什麼。如果沒有相應的私鑰,你無法回答這個問題,客戶會拒絕你。

所有來自被接受機構的證書都是爲了證明網站skaz.com的公鑰是xyz。如果我們沒有證書,冒充者可以創建一個(公鑰,私鑰)密鑰對(abc,mno),並告訴世界skaz.com的公鑰是abc。

回答你的問題什麼是阻止我把代理放在瀏覽器和真正的網站中間,只是發送真正的網站證書,這是經典的中間人攻擊,如果在這種情況下的隨機數--- 1729 ---加密的客戶端被用作未來所有流量的加密密鑰(也稱爲會話密鑰),則該代理服務器不能做任何事情。對於例如如果客戶端發送使用會話密鑰加密的密碼,那麼冒充者代理不能讀取它。

總之,您可以將任何實體的證書發送給任何人,但不知道相應的私鑰是無效的。