問題的快速版
Gmail,TD(加拿大銀行),皇家銀行(加拿大銀行)都使用ssl。當你檢查他們的證件他們都有使用證書進行SSL身份驗證:證書是否應具有主機名?
Common Name (CN) mail.google.com
或者更一般地說:
Common Name (CN) <url>
難道這需要防止中間人攻擊?
摘要
JBoss允許客戶端和服務器使用證書和ssl進行身份驗證。有一件看起來很奇怪的事情是,你不需要在證書上給你的主機名。
我認爲這意味着如果服務器B在您的信任庫中,Sever B可以僞裝成他們想要的任何服務器。
(以及類似:如果客戶B在您的信任...)
我失去了一些東西在這裏?
認證步驟
Client Server
=================================================================================================
1) Client sends Client Hello
ENCRIPTION: None
- highest TLS protocol supported
- random number
- list of cipher suites
- compression methods
2) Sever Hello
ENCRIPTION: None
- highest TLS protocol supported
- random number
- choosen cipher suite
- choosen compression method
3) Certificate Message
ENCRIPTION: None
-
4) ServerHelloDone
ENCRIPTION: None
5) Certificate Message
ENCRIPTION: None
6) ClientKeyExchange Message
ENCRIPTION: server's public key => only server can read
=> if sever can read this he must own the certificate
- may contain a PreMasterSecerate, public key or nothing (depends on cipher)
7) CertificateVerify Message
ENCRIPTION: clients private key
- purpose is to prove to the server that client owns the cert
8) BOTH CLIENT AND SERVER:
- use random numbers and PreMasterSecret to compute a common secerate
9) Finished message
- contains a has and MAC over previous handshakes
(to ensure that those unincripted messages did not get broken)
10) Finished message
- samething
Sever的誰知
客戶端具有發送證書的公鑰(步驟7)
客戶端的證書是有效的,因爲:
- 已經由CA(威瑞信)簽署
- 它已經自簽名,但它是在服務器的信任
它不是一個重放攻擊,因爲大概是隨機數(步驟1或2)與每個消息一起發送
客戶端知道
服務器爲發送證書(步驟6步驟8)公鑰
服務器的證書是有效 因爲無論:
- 已經由CA(Verisign所簽發)
- 已自簽名,但它是在客戶端的信任
它不是一個重放攻擊,因爲presu馬布利的隨機數(步驟1或2) 與每個消息
潛在問題
發送假設客戶機的truststore中有證書:
- 服務器A
- 服務器B(惡蘋果)
服務器A主機名www.A.com
服務器B主機www.B.com
假設:客戶端試圖連接到服務器A,但服務器B在中間推出一個男人攻擊。
由於服務器B:
- 具有將被髮送到客戶端證書的公鑰
- 有一個「有效證書」(在信任一個證書)
- 由於:
- 證書中沒有主機名字樣
看起來服務器B可以很容易地假裝爲服務器A.
有什麼,我失蹤?
這看起來不像一個編程問題。投票轉移到服務器故障。 – 2010-04-08 19:04:40
我認爲這是與算法有關...? – sixtyfootersdude 2010-04-08 19:28:09
@david,是的這是一個編程問題。 ServerFault上的人員不完全理解安全因爲他們不是程序員。 – rook 2010-04-08 19:29:47