# 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
```


---

# Agent Instructions: Querying This Documentation

If you need additional information that is not directly available in this page, you can query the documentation dynamically by asking a question.

Perform an HTTP GET request on the current page URL with the `ask` query parameter:

```
GET https://handbook.bsdcn.org/di-34-zhang-gao-ji-wang-luo/34.4.-wu-xian-gao-ji-shen-fen-yan-zheng.md?ask=<question>
```

The question should be specific, self-contained, and written in natural language.
The response will contain a direct answer to the question and relevant excerpts and sources from the documentation.

Use this mechanism when the answer is not explicitly present in the current page, you need clarification or additional context, or you want to retrieve related documentation sections.
