问题的快速版本
Gmail、TD(加拿大银行)、Royal Bank(加拿大银行)都使用ssl。当您检查他们的证书时,他们都有
Common Name (CN) mail.google.com
或者更一般地说:
Common Name (CN) <url>
是否需要这样做来防止中间人攻击?
总结
JBoss 允许客户端和服务器使用证书和 ssl 进行身份验证。一件看起来很奇怪的事情是您不需要在证书上提供您的主机名。
我认为这意味着如果服务器 B 在您的信任库中,则服务器 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
服务器知道
客户端拥有所发送证书的公钥(第 7 步)
客户端的证书有效,因为:
- 已由 CA (verisign) 签名
- 它是自签名的,但它在服务器的信任库中
这不是重放攻击,因为随机数(步骤 1 或 2)可能随每条消息一起发送
客户知道
服务器有发送证书的公钥(第 6 步和第 8 步)
服务器证书有效 因为:
- 已由 CA (verisign) 签名
- 它是自签名的,但它在客户的信任库中
这不是重放攻击,因为大概是随机数(步骤 1 或 2) 与每条消息一起发送
潜在问题
假设客户端的信任库中有证书:
- 服务器A
- 服务器 B(恶意)
服务器 A 的主机名为 www.A.com
服务器 B 的主机名是 www.B.com
假设:客户端尝试连接到服务器 A,但服务器 B 发起中间人攻击。
自服务器 B:
- 拥有将发送给客户端的证书的公钥
- 拥有“有效证书”(信任库中的证书)
- 自从:
- 证书中没有主机名字段
看起来服务器 B 可以很容易地伪装成服务器 A。
有什么我想念的吗?
最佳答案
您能否指出一些文本说 JBoss 不需要证书中的主机名,或者这只是您的观察?我假设“主机名”是指通用名称 (CN) 或专有名称 (DN)??
通常应用程序应该检查 X.509 证书:
有效日期范围
用法(例如;服务器身份验证)
链接到受信任的根
CN == 目标主机的 DNS 名称(可能是其他名称,而不仅仅是 DNS)
未撤销(使用 CRL 或 OCSP)
从技术上讲,应用程序可以选择忽略其中任何一个,并简单地表明证书一切正常....但这很糟糕:)
关于security - 使用证书 : Should the Certificates have a hostname? 的 SSL 身份验证,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2602453/