# 34.4.无线高级身份验证

FreeBSD 支持多种连接无线网络的方式。本节将介绍如何执行无线网络的高级认证。

要进行连接和基本的无线网络认证，请参阅《网络章节》中的[连接和认证无线网络](https://docs.freebsd.org/en/books/handbook/network/#wireless-authentication)部分。

## 34.4.1. 使用 EAP-TLS 的 WPA

使用 WPA 的第二种方式是通过 802.1X 后端认证服务器。在这种情况下，WPA 被称为 WPA 企业版，以区别于安全性较低的 WPA 个人版。WPA 企业版中的认证基于可扩展认证协议（EAP）。

EAP 本身并不带加密方法，而是嵌入到加密隧道中。有许多 EAP 认证方法，但 EAP-TLS、EAP-TTLS 和 EAP-PEAP 是最常见的。

使用传输层安全性（EAP-TLS）的 EAP 是一种得到广泛支持的无线认证协议，因为它是第一个获得 [Wi-Fi 联盟](http://www.wi-fi.org/)认证的 EAP 方法。EAP-TLS 需要三个证书才能运行：安装在所有机器上的证书颁发机构（CA）证书、认证服务器的服务器证书以及每个无线客户端的客户端证书。在这种 EAP 方法中，认证服务器和无线客户端通过提供各自的证书来互相认证，然后验证这些证书是否由组织的 CA 签发。

如前所述，配置通过 **/etc/wpa\_supplicant.conf** 文件完成：

```ini
network={
  ssid="freebsdap" ①
  proto=RSN  ②
  key_mgmt=WPA-EAP ③
  eap=TLS ④
  identity="loader" ⑤
  ca_cert="/etc/certs/cacert.pem" ⑥
  client_cert="/etc/certs/clientcert.pem" ⑦
  private_key="/etc/certs/clientkey.pem" ⑧
  private_key_passwd="freebsdmallclient" ⑨
}
```

* ① 该字段表示网络名称（SSID）。
* ② 该示例使用 RSN IEEE® 802.11i 协议，也称为 WPA2。
* ③ `key_mgmt` 行指示要使用的密钥管理协议。在此示例中，它是使用 EAP 认证的 WPA。
* ④ 该字段指示连接使用的 EAP 方法。
* ⑤ `identity` 字段包含 EAP 的身份字符串。
* ⑥ `ca_cert` 字段指示 CA 证书文件的路径。此文件用于验证服务器证书。
* ⑦ `client_cert` 行给出了客户端证书文件的路径。该证书对于每个无线客户端都是唯一的。
* ⑧ `private_key` 字段是客户端证书私钥文件的路径。
* ⑨ `private_key_passwd` 字段包含私钥的密码短语。

然后，将以下行添加到 **/etc/rc.conf** 文件中：

```sh
wlans_ath0="wlan0"
ifconfig_wlan0="WPA DHCP"
```

下一步是启动接口：

```sh
# service netif start
Starting wpa_supplicant.
DHCPREQUEST on wlan0 to 255.255.255.255 port 67 interval 7
DHCPREQUEST on wlan0 to 255.255.255.255 port 67 interval 15
DHCPACK from 192.168.0.20
bound to 192.168.0.254 -- renewal in 300 seconds.
wlan0: flags=8843<UP,BROADCAST,RUNNING,SIMPLEX,MULTICAST> mtu 1500
      ether 00:11:95:d5:43:62
      inet 192.168.0.254 netmask 0xffffff00 broadcast 192.168.0.255
      media: IEEE 802.11 Wireless Ethernet DS/11Mbps mode 11g
      status: associated
      ssid freebsdap channel 1 (2412 Mhz 11g) bssid 00:11:95:c3:0d:ac
      country US ecm authmode WPA2/802.11i privacy ON deftxkey UNDEF
      AES-CCM 3:128-bit txpower 21.5 bmiss 7 scanvalid 450 bgscan
      bgscanintvl 300 bgscanidle 250 roam:rssi 7 roam:rate 5 protmode CTS
      wme burst roaming MANUAL
```

也可以使用 [wpa\_supplicant(8)](https://man.freebsd.org/cgi/man.cgi?query=wpa_supplicant\&sektion=8\&format=html) 和 [ifconfig(8)](https://man.freebsd.org/cgi/man.cgi?query=ifconfig\&sektion=8\&format=html) 手动启动接口。

## 34.4.2. 使用 EAP-TTLS 的 WPA

使用 EAP-TLS 时，认证服务器和客户端都需要证书。与此不同，使用 EAP-TTLS 时，客户端证书是可选的。这种方法类似于一个 Web 服务器，即使访客没有客户端证书，也能创建一个安全的 SSL 隧道。EAP-TTLS 使用加密的 TLS 隧道来安全传输认证数据。

所需的配置可以添加到 **/etc/wpa\_supplicant.conf** 文件中：

```ini
network={
  ssid="freebsdap"
  proto=RSN
  key_mgmt=WPA-EAP
  eap=TTLS ①
  identity="test" ②
  password="test" ③
  ca_cert="/etc/certs/cacert.pem" ④
  phase2="auth=MD5" ⑤
}
```

* ①该字段指定连接使用的 EAP 方法。
* ② `identity` 字段包含加密的 TLS 隧道中的 EAP 身份字符串。
* ③ `password` 字段包含 EAP 认证的密码。
* ④ `ca_cert` 字段指示 CA 证书文件的路径。此文件用于验证服务器证书。
* ⑤ 该字段指定加密 TLS 隧道中使用的认证方法。在此示例中，使用了 MD5 挑战的 EAP 认证。通常称为“第二阶段认证”，也可以称为“phase2”。

接下来，将以下行添加到 **/etc/rc.conf** 文件中：

```sh
wlans_ath0="wlan0"
ifconfig_wlan0="WPA DHCP"
```

下一步是启动接口：

```sh
# service netif start
Starting wpa_supplicant.
DHCPREQUEST on wlan0 to 255.255.255.255 port 67 interval 7
DHCPREQUEST on wlan0 to 255.255.255.255 port 67 interval 15
DHCPREQUEST on wlan0 to 255.255.255.255 port 67 interval 21
DHCPACK from 192.168.0.20
bound to 192.168.0.254 -- renewal in 300 seconds.
wlan0: flags=8843<UP,BROADCAST,RUNNING,SIMPLEX,MULTICAST> mtu 1500
      ether 00:11:95:d5:43:62
      inet 192.168.0.254 netmask 0xffffff00 broadcast 192.168.0.255
      media: IEEE 802.11 Wireless Ethernet DS/11Mbps mode 11g
      status: associated
      ssid freebsdap channel 1 (2412 Mhz 11g) bssid 00:11:95:c3:0d:ac
      country US ecm authmode WPA2/802.11i privacy ON deftxkey UNDEF
      AES-CCM 3:128-bit txpower 21.5 bmiss 7 scanvalid 450 bgscan
      bgscanintvl 300 bgscanidle 250 roam:rssi 7 roam:rate 5 protmode CTS
      wme burst roaming MANUAL
```

## 34.4.3. 使用 EAP-PEAP 的 WPA

> **注意**
>
> PEAPv0/EAP-MSCHAPv2 是最常用的 PEAP 方法。在本章中，PEAP 指的是此方法。

受保护的 EAP（PEAP）是作为 EAP-TTLS 的替代方案设计的，并且是继 EAP-TLS 后最常用的 EAP 标准。在混合操作系统的网络中，PEAP 应该是继 EAP-TLS 后最受支持的标准。

PEAP 与 EAP-TTLS 类似，它使用服务器端证书通过创建加密的 TLS 隧道来认证客户端，从而保护随后的认证信息交换。PEAP 认证与 EAP-TTLS 的不同之处在于，PEAP 会以明文方式广播用户名，只有密码才会在加密的 TLS 隧道中传送。而 EAP-TTLS 会将用户名和密码都通过 TLS 隧道传输。

将以下行添加到 **/etc/wpa\_supplicant.conf** 文件，以配置与 EAP-PEAP 相关的设置：

```ini
network={
  ssid="freebsdap"
  proto=RSN
  key_mgmt=WPA-EAP
  eap=PEAP ①
  identity="test" ②
  password="test" ③
  ca_cert="/etc/certs/cacert.pem" ④
  phase1="peaplabel=0" ⑤
  phase2="auth=MSCHAPV2" ⑥
}
```

* ① 该字段指定连接使用的 EAP 方法。
* ② `identity` 字段包含加密 TLS 隧道中的 EAP 身份字符串。
* ③ `password` 字段包含 EAP 认证的密码。
* ④ `ca_cert` 字段指示 CA 证书文件的路径。此文件用于验证服务器证书。
* ⑤ 该字段包含 TLS 隧道第一阶段认证的参数。根据所使用的认证服务器，指定认证的特定标签。大多数情况下，标签为“客户端 EAP 加密”，通过设置 `peaplabel=0` 来实现。更多信息请参见 [wpa\_supplicant.conf(5)](https://man.freebsd.org/cgi/man.cgi?query=wpa_supplicant.conf\&sektion=5\&format=html)。
* ⑥ 该字段指定加密的 TLS 隧道中使用的认证协议。对于 PEAP，使用的是 `auth=MSCHAPV2`。

将以下内容添加到 **/etc/rc.conf** 文件中：

```ini
wlans_ath0="wlan0"
ifconfig_wlan0="WPA DHCP"
```

然后，启动接口：

```sh
# service netif start
Starting wpa_supplicant.
DHCPREQUEST on wlan0 to 255.255.255.255 port 67 interval 7
DHCPREQUEST on wlan0 to 255.255.255.255 port 67 interval 15
DHCPREQUEST on wlan0 to 255.255.255.255 port 67 interval 21
DHCPACK from 192.168.0.20
bound to 192.168.0.254 -- renewal in 300 seconds.
wlan0: flags=8843<UP,BROADCAST,RUNNING,SIMPLEX,MULTICAST> mtu 1500
      ether 00:11:95:d5:43:62
      inet 192.168.0.254 netmask 0xffffff00 broadcast 192.168.0.255
      media: IEEE 802.11 Wireless Ethernet DS/11Mbps mode 11g
      status: associated
      ssid freebsdap channel 1 (2412 Mhz 11g) bssid 00:11:95:c3:0d:ac
      country US ecm authmode WPA2/802.11i privacy ON deftxkey UNDEF
      AES-CCM 3:128-bit txpower 21.5 bmiss 7 scanvalid 450 bgscan
      bgscanintvl 300 bgscanidle 250 roam:rssi 7 roam:rate 5 protmode CTS
      wme burst roaming MANUAL
```
