2011-12-08 32 views
0

我有一個用PHP編寫的網站,我想確保我的訪問者使用我的SSL證書,我的意思是我想確保中間沒有人。我該怎麼做?如何檢查與PHP連接中使用的證書?

編輯:從POST或GET發送證書名稱的任何技巧?

編輯:或者我會送一個哈希用戶計算機,用戶計算機將散列證書名稱與一個JavaScript和比較兩者是否馬赫與否。不是最好的解決方案,但比沒有好。

回答

2

你不能那樣做:MitM攻擊是基於服務器和有效客戶端之間的人已經有所有有效證書的事實。因此,對於您的服務器,他的行爲與其他有效的客戶端相同

+0

但是如果我訪問谷歌,如果使用受信任的CertIsrl正被在咖啡館使用摩薩德(MITM),那麼沒有人會得到任何證書錯誤消息(因爲每個人都會看到藍色線)和他們抓住我的密碼。這意味着我每次訪問Gmail時都必須點擊證書才能看到是否是Thawte諮詢公司。 – ilhan

+0

@george:是的,但是如果證書是由任何可信的認證中心頒發的,那麼這是客戶的承諾。這與谷歌的服務器無關 - 這只是關於你的瀏覽器和Thawte – zerkms

+0

@george:它與SO和編程有什麼關係? – zerkms

2

假設有在中間的人,所有的信息說:「你的訪客」提供(你可能會以某種方式使用,以確定他們所使用的證書)實際上是信息的中間人提供。這意味着你不能相信它(即使沒有MITM,這也是一個很好的經驗法則)。

換句話說,這是不可能的。

另一種可以得出這個結論的方法是:如果這個某種程度上可能的話,那麼「中間人」就不是我們今天所知的一個術語。

+0

所以我不能通過非標準方法獲取用戶使用的證書名稱? – ilhan

+0

@george:除非用戶告訴你,否則你怎麼可能知道你的用戶「看到」的證書的任何* *?你怎麼能信任*任何*用戶告訴你,因爲他是MITM? – Jon

+0

@george:它對你有什麼幫助?中間的人是你的同一個客戶。您無法從服務器確定MitM攻擊 – zerkms

1

由於@喬恩和@zerkms已經說過,這是客戶的責任,檢查服務器證書。你可以確保,作爲服務器,客戶端使用已提交服務器證書的連接

一種方法是要求客戶端證書身份驗證。事實上,在與客戶端證書握手期間,TLS消息中包含了迄今爲止已交換的所有handhsake消息(包括服務器證書)的摘要簽名。如果TLS握手成功,則客戶將發送正確的簽名,可對照其證書進行驗證。

當然,從服務器的角度來看,如果你信任的客戶端證書這僅適用。

這並不能完全解決問題,特別是因爲不建議客戶端使用其證書對其無法驗證的服務器進行身份驗證(即使私鑰不會被泄露,身份該證書將被髮送給流氓黨)。

同樣,在一天結束的時候,它仍然是用戶的責任,以決定是否信任服務器的身份。

相關問題