我认为问题是关于 PEAP、EAP-TLS 和 EAP-TTLS 用于保护密码身份验证的“服务器”证书,因为这对于基于客户端证书的 EAP-TLS 根本不是问题。
我怀疑 EAP 标准文档是否会包含这些信息,因为实现之间存在疯狂的不一致(否则肯定不会那么糟糕)。还要考虑到 EAP 和 802.1X 早在 WiFi 之前就被以太网和 PPP 拨号使用,因此标准可能不会谈论 SSID。
更新:RFC 7593(“eduroam”)最近发布并更详细地讨论了这一点。eduroam 可能是使用 802.1X/EAP 的最大服务,在全球拥有许多联合领域。它在 RFC 7593 中的总结,特别是第 7.1 节,谈到了 eduroam 用户中服务器验证的情况。
AP 发送给客户端的证书包含哪些信息:是 SSID,还是其他?
PEAPv0 草案根本没有讨论这个问题。
PEAPv1 草案说:
“对等方应该验证 EAP 服务器证书的有效性,并且还应该检查证书中提供的 EAP 服务器名称,以确定 EAP 服务器是否可以信任。”
然而,它没有描述如何验证服务器名称,实际上承认名称可能是错误的:
“请注意,在远程 EAP 身份验证的情况下,EAP 服务器不会与验证者,因此不能期望 EAP 服务器证书中的名称与预期目的地的名称匹配。在这种情况下,更合适的测试可能是 EAP 服务器的证书是否由控制预期目的地的 CA 签名,以及是否EAP 服务器存在于目标子域中。”
指定 EAP-TTLS 的RFC 5281要求针对已知 CA 进行验证,并检查它是否启用了“服务器身份验证”extendedKeyUsage。
(请注意,即使 CA 检查也不总是实现;例如,iOS 和 Windows 8.1 要求用户在第一次连接时验证证书指纹。
据我所知,EAP-TTLS 规范不需要任何 common-name 或 subjectAltName 值。一些客户端(Windows、wpa_supplicant)对预期的“通用名称”进行了配置设置,而其他客户端则根本不关心。
请注意,证书并不总是由 AP 发送,而是通常由处理身份验证的 RADIUS 服务器发送。有像 eduroam 这样的联盟,它们在任何地方都使用相同的 SSID(有些地方甚至提供 eduroam 认证的以太网端口),但是所有的认证请求都会根据@domain
登录名中的 路由到本地组织,并且每个组织都有自己的 EAP 证书。因此,在一个更美好的世界中,@domain
应该将其与证书进行比较。
例如,Microsoft KB 814394记录了 Windows PEAP 客户端的要求。
用户如何知道它连接到了受信任的 AP?同样,使用 HTTPS,我的浏览器会发出警告。如果我连接到不受信任的接入点,我的 PC 或移动设备会警告我吗?或者是唯一的方法是注意到一个人必须重新输入他/她的凭据这一简单事实有问题?
根据客户的不同,您将进行以下检查的某种组合:
- 首次使用时记住的指纹(在 iOS、Windows 8.1 上看到)
- 根据配置值检查通用名称
- 颁发者对照白名单进行检查,该白名单通常仅包含组织的内部权限(使用公共 CA 仅在检查公用名时才安全)
根据我的经验,不匹配的显示方式实际上与身份验证错误相同;只有 wpa_supplicant 可以变得更详细。
由于许多客户端将 CA 验证作为唯一选项,因此唯一可能的安全模式是针对组织的专用 CA 验证 EAP 证书。(如果您的 EAP 证书来自 Thawte,并且客户端可以配置为需要 Thawte 颁发的证书但不进行任何主题/CN 检查,那么实际上任何人都可以从 Thawte 购买常规 SSL 证书并将其用于假 AP ...)
不幸的是,如果客户端可以选择接受所有内容,几乎每个人都会使用它,因为安装新 CA 很痛苦。(更不用说它还经常允许组织欺骗 HTTPS 站点,这是非常不可取的,甚至会导致 Android 上的永久警告图标。)
eduroam 网络试图通过提供标准设置工具和 iOS 配置文件来简化此操作,但只有一小部分实际使用它。
结果,您可能永远不会注意到有问题。