使用证书进行SSL身份验证:证书是否应具有主机名?
问题的快速版本
Gmail,TD(加拿大银行),皇家银行(加拿大银行)都使用ssl。 当你检查他们的证书时,他们都有
Common Name (CN) mail.google.com
或者更一般地说:
Common Name (CN) <url>
这是否需要防止中间人攻击?
概要
JBoss允许客户端和服务器使用证书和ssl进行身份验证。 有一件看起来很奇怪的事情是,你不需要在证书上给你的主机名。
我认为这意味着如果服务器B位于您的信任库中,则Sever B可以伪装成他们想要的任何服务器。
(同样,如果客户B在您的信任库中)
我在这里错过了什么吗?
认证步骤
(Wikipeida页面总结)
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)
客户的证书是有效的,因为:
这不是重播攻击,因为可能随机数(步骤1或2)随每条消息一起发送
客户知道
服务器具有发送证书的公钥(步骤6和步骤8)
服务器的证书有效,因为:
这不是重播攻击,因为可能随机数(步骤1或2)随每条消息一起发送
潜在的问题
假设客户的信任库中有证书:
服务器A的主机名为www.A.com
服务器B的主机名为www.B.com
假设:客户端尝试连接到服务器A,但服务器B在中间人攻击中启动一名男子。
由于服务器B:
看起来服务器B可以很容易地假装成服务器A.
有什么我失踪了吗?
你能指出一些文字说JBoss在证书中不需要主机名,还是仅仅是你的观察? 我认为'主机名'是指通用名称(CN)或可分辨名称(DN)?
通常情况下,应用程序应该检查X.509证书:
有效的日期范围
用法(例如;服务器认证)
链接到受信任的根
CN ==目标主机的DNS名称(可能是另一个名称,不仅仅是DNS)
未被撤销(使用CRL或OCSP)
从技术上讲,一个应用程序可以选择忽略其中的任何一个,并简单地指出所有的证书都很好....但是这很糟糕:)
我想你错过了一些东西,但我不确定是否理解你的推理。
然而,当服务器B试图在中间攻击中启动一个人时,你说它有一个公钥。 这是真的,但要建立一个ssl连接,你还应该有一个属于该公钥的私钥。 此外,所使用的证书与DNS名称(在https的情况下)相结合。 因此,一个客户端尝试连接到A,他在www.a.com中键入。 既然我们假设B不知道A的私钥,他将拥有另一个密钥对。 他永远不会收到来自主要CA的有效(即可信)证书,该证书与他不属于的域相关联。
所以B永远不会得到一个通用名为www.A.com的证书,因此,B在中间人攻击中不能执行一个人。
链接地址: http://www.djcxy.com/p/21827.html上一篇: SSL Authentication with Certificates: Should the Certificates have a hostname?