在应用中设置 EAP-TLS 网络
可以在高级应用程序中配置 EAP-TLS , az sphere
也可以使用命令手动配置 EAP-TLS。 若要配置和连接到网络,应用程序使用 Certstore 和 WifiConfig API。
要求
若要配置 EAP-TLS 网络,高级应用需要包含相应的头文件,在其 应用程序清单中启用所需的功能,并有权访问身份验证所需的证书。
头文件
你的应用必须包含以下标头:
#include <applibs/wificonfig.h>
如果应用程序调用 CertStore API 来管理证书,则它还必须包含 CertStore 标头。 使用用于检索证书信息的 WifiConfig 函数(如 WifiConfig_GetRootCACertStoreIdentifier )不需要此标头。
#include <applibs/certstore.h>
应用程序清单
应用程序清单必须启用 EnterpriseWiFiConfig 功能才能设置 EAP-TLS 网络。 它还必须具有 WifiConfig 功能,才能使用不管理 EAP-TLS 功能的 WifiConfig_* 函数。 最后,如果应用还管理证书,则必须启用 CertStore 功能。
不要启用应用程序不需要的功能;这会带来安全风险。 如果证书将手动更新,请不要指定 CertStore。 仅当应用程序负责在设备上存储和管理证书时,才使用此功能。
以下示例演示如何在 app_manifest.json 文件中设置所有三个功能:
"Capabilities": {
"WifiConfig" : true,
"EnterpriseWiFiConfig" : true,
"CertStore" : true
}
证书
设备的客户端证书必须在设备上可用。 此外,如果 EAP-TLS 网络配置为相互身份验证,则还必须在设备上安装网络 RADIUS 服务器的根 CA 证书。 这两个证书都必须采用 .pem 格式,即 PKCS1 或 PKCS8。 请参阅 EAP-TLS 证书获取和部署 ,了解证书及其获取位置。
安装证书
应用必须有权访问用于身份验证的根 CA 和客户端证书,然后才能设置 EAP-TLS 网络。 获取和部署 EAP-TLS 网络的证书 介绍了获取证书并将其作为 PEM 文件加载到设备上的策略。 获取和部署证书由你负责:有关详细信息,请与网络管理员检查。
证书位于设备上后,应用程序可以安装它们以供使用。 证书示例演示如何安装它们。 下面是基本步骤:
请确保证书存储中有足够的空间。 证书存储空间有限,因此应用在尝试安装证书之前应调用 CertStore_GetAvailableSpace 。 如果空间不足,应用应删除现有证书,以便为新证书腾出空间。 证书空间限制为 24 KiB。
若要安装根 CA 证书,请调用 CertStore_InstallRootCACertificate。 应用提供指向证书内容的指针,以及稍后可以用作证书友好名称的标识符。 如果网络启用相互身份验证,则需要根 CA 证书。 标识符可以包括大写字母、小写字母、数字 0-9、句点 (.) 、连字符 ( ) 和下划线 (_) 。 标识符的最大长度为 16 个字符。
若要安装客户端证书,请调用 CertStore_InstallClientCertificate。 与根 CA 证书一样,应用提供指向证书内容的指针以及稍后可以用作证书友好名称的标识符。应用还必须提供私钥以及加密密码(如果密钥已加密)。
若要更新证书,应用可以使用 CertStore_MoveCertificate 函数。 此函数使用源证书的内容覆盖现有目标证书的内容,将一个证书移动到另一个证书。 这两个证书必须已安装在证书存储中。 证书生命周期和续订 概述了更新证书的策略,同时避免网络停机。
配置和设置 EAP-TLS 网络
Wifi_HighLevelApp示例演示如何创建、配置和启用 EAP-TLS 网络。 此示例假定证书已在证书存储中,如 安装证书中所述。
若要配置和设置网络,应用应遵循以下基本步骤:
通过调用 WifiConfig_AddNetwork 添加网络。 此函数只是创建一个网络;它不会为网络配置任何特征。
通过调用 WifiConfig_SetSecurityType 设置网络的安全类型。 对于 EAP-TLS 网络,安全类型必须为
WifiConfig_Security_Wpa2_EAP_TLS
。通过调用 WifiConfig_SetSSID 设置网络的 SSID。 如果尚不知道 SSID,应用可以扫描它。 如果网络环境可能有干扰,或者 SSID 可能未广播,则应用应通过调用 WifiConfig_SetTargetedScanEnabled 启用定向扫描。 然后,它可以调用 WifiConfig_TriggerScanAndGetScannedNetworkCount 来扫描所有网络, 并WifiConfig_GetScannedNetworks 以获取扫描结果。 WifiConfig_GetScannedNetworks 返回包含每个网络的详细信息的结构数组。 应用程序可以在结果中搜索具有安全类型的网络,
WifiConfig_Security_Wpa2_EAP_TLS
然后检索其 SSID。通过调用 WifiConfig_SetConfigName 设置网络的配置名称。 配置名称是应用可用于标识此网络配置的友好名称。
如果网络需要服务器身份验证,则通过调用 WifiConfig_SetRootCACertStoreIdentifier 设置 RADIUS 服务器的根 CA 证书的名称。 设备上必须已存在根 CA 证书。
通过调用 WifiConfig_SetClientCertStoreIdentifier 设置客户端证书存储的名称。 客户端证书必须已存在于设备上。
通过调用 WifiConfig_SetClientIdentity 来设置客户端标识。 客户端标识是标识客户端设备的友好名称。
通过调用 WifiConfig_SetNetworkEnabled 启用网络。
通过调用 WifiConfig_PersistConfig 保存网络配置。 此函数保存设备上的网络配置,以便在重新启动后保持网络配置。
更改 EAP-TLS 网络的属性
应用可以通过调用最初用于设置网络的相同函数来更改网络的属性,如 配置和设置 EAP-TLS 网络中所述。
更改属性后,应用不仅必须调用 WifiConfig_PersistConfig 保存配置,还必须调用 WifiConfig_ReloadConfig 来立即更新网络。 当应用程序更新证书时,这一点尤其重要。
删除 EAP-TLS 网络
应用可以通过调用 WifiConfig_ForgetNetworkById 或 WifiConfig_ForgetAllNetworks 来删除网络。
WifiConfig_ForgetNetworkById 连接后断开网络的连接,并将其从设备中删除。 但是,它不会更新 Wi-Fi 配置,因此在重新启动后更改不会保留。 应用必须调用 WifiConfig_PersistConfig 才能永久删除。
WifiConfig_ForgetAllNetworks 断开连接的网络,并从设备中删除所有网络。 此更改在重新启动后会持续存在。
样品
- 证书高级应用 - 演示如何在 Azure Sphere 高级应用程序中使用和管理证书。
- Wifi_HighLevelApp - 演示如何连接到 Wi-Fi 网络并在 MT3620 设备上检查网络状态。
注意
以下示例来自 Azure Sphere 库,该库是 Microsoft 提供的未经维护的软件和硬件示例的集合。 有关详细信息,请参阅 Azure Sphere 库。
- 使用 Azure Sphere 的 EAP-TLS 解决方案 - 演示如何将 Azure Sphere 设备连接到 EAP-TLS 网络。