您好
我正试图在一个企业接入点上设置 WiFi 连接(我的情况是 WPA2-enterprise,但也可能是其他任何接入点)。
由于需要动态加载证书,我定义了 eap_ca_cert 和 eap_client_key 将数据存储在 RAM 中,并执行以下操作:
struct wifi_enterprise_creds_params creds{
.ca_cert = eap_ca_cert,
.ca_cert_len = strlen(reinterpret_cast(eap_ca_cert)),
.client_cert = eap_client_cert,
.client_cert_len = strlen(reinterpret_cast(eap_client_cert)),
.client_key = eap_client_key,
.client_key_len = strlen(reinterpret_cast(eap_client_key))
};
net_mgmt(NET_REQUEST_WIFI_ENTERPRISE_CREDS, m_netIface, &creds, sizeof(creds));
struct wifi_connect_req_params params{};
params.ssid = reinterpret_cast(m_wiFiStationConfig.ssid.data());
params.ssid_length = m_wiFiStationConfig.ssid.size();
params.security = WIFI_SECURITY_TYPE_EAP_TLS;
static const char* identity = "user@example.org";
params.eap_identity = reinterpret_cast(identity);
params.eap_id_length = strlen(identity);
net_mgmt(NET_REQUEST_WIFI_CONNECT, m_netIface, ¶ms, sizeof(params)); 对 net_mgmt 的调用没有错误返回,但我没有看到发生任何事情。下面是 wpa_supplicant 日志:
00017717: [networkThread] net_wifi_mgmt: wifi_connect: ssid
45 6d 62 53 57 5f 41 73 75 73 41 50 |EmbSW_As usAP
00017719: [networkThread] net_wifi_mgmt: wifi_connect: psk
00017720: [networkThread] net_wifi_mgmt: wifi_connect: (networkThread): ch 6 sec 7
00017721: [networkThread] wpa_supp: wpa_printf_impl: Calling wpa_cli: remove_network, argc: 2
00017723: [networkThread] wpa_supp: wpa_printf_impl: argv[0]: remove_network
00017724: [networkThread] wpa_supp: wpa_printf_impl: argv[1]: all
00017725: [hostap_handler] wpa_supp: wpa_printf_impl: ml: Control interface command 'REMOVE_NETWORK all'
00017727: [hostap_handler] wpa_supp: wpa_printf_impl: CTRL_IFACE: REMOVE_NETWORK all
00017728: [hostap_handler] wpa_supp: wpa_printf_impl: ml: Control interface command 'ADD_NETWORK'
00017730: [hostap_handler] wpa_supp: wpa_printf_impl: CTRL_IFACE: ADD_NETWORK
00017731: [networkThread] wpa_supp: wpa_printf_impl: NET added: 0
00017732: [networkThread] wpa_supp: wpa_printf_impl: Calling wpa_cli: set_network, argc: 4
00017733: [networkThread] wpa_supp: wpa_printf_impl: argv[0]: set_network
00017734: [networkThread] wpa_supp: wpa_printf_impl: argv[1]: 0
00017735: [networkThread] wpa_supp: wpa_printf_impl: argv[2]: ssid
00017736: [networkThread] wpa_supp: wpa_printf_impl: argv[3]: "EmbSW_AsusAP"
00017737: [hostap_handler] wpa_supp: wpa_printf_impl: ml: Control interface command 'SET_NETWORK [REMOVED]'
00017739: [hostap_handler] wpa_supp: wpa_printf_impl: CTRL_IFACE: SET_NETWORK id=0 name='ssid'
00017740: [hostap_handler] wpa_supp: wpa_printf_impl: CTRL_IFACE: value - hexdump_ascii(len=14): [REMOVED]
00017742: [hostap_handler] wpa_supp: wpa_printf_impl: ssid - hexdump_ascii(len=12):
00017743: [hostap_handler] wpa_supp: _wpa_hexdump_ascii:
45 6d 62 53 57 5f 41 73 75 73 41 50 |EmbSW_As usAP
00017745: [networkThread] wpa_supp: wpa_printf_impl: Calling wpa_cli: set_network, argc: 4
00017746: [networkThread] wpa_supp: wpa_printf_impl: argv[0]: set_network
00017747: [networkThread] wpa_supp: wpa_printf_impl: argv[1]: 0
00017748: [networkThread] wpa_supp: wpa_printf_impl: argv[2]: scan_ssid
00017749: [networkThread] wpa_supp: wpa_printf_impl: argv[3]: 1
00017751: [hostap_handler] wpa_supp: wpa_printf_impl: ml: Control interface command 'SET_NETWORK [REMOVED]'
00017752: [hostap_handler] wpa_supp: wpa_printf_impl: CTRL_IFACE: SET_NETWORK id=0 name='scan_ssid'
00017753: [hostap_handler] wpa_supp: wpa_printf_impl: CTRL_IFACE: value - hexdump_ascii(len=1): [REMOVED]
00017755: [hostap_handler] wpa_supp: wpa_printf_impl: scan_ssid=1 (0x1)
00017756: [networkThread] wpa_supp: wpa_printf_impl: Calling wpa_cli: set_network, argc: 4
00017757: [networkThread] wpa_supp: wpa_printf_impl: argv[0]: set_network
00017758: [networkThread] wpa_supp: wpa_printf_impl: argv[1]: 0
00017759: [networkThread] wpa_supp: wpa_printf_impl: argv[2]: key_mgmt
00017760: [networkThread] wpa_supp: wpa_printf_impl: argv[3]: NONE
00017761: [hostap_handler] wpa_supp: wpa_printf_impl: ml: Control interface command 'SET_NETWORK [REMOVED]'
00017763: [hostap_handler] wpa_supp: wpa_printf_impl: CTRL_IFACE: SET_NETWORK id=0 name='key_mgmt'
00017764: [hostap_handler] wpa_supp: wpa_printf_impl: CTRL_IFACE: value - hexdump_ascii(len=4): [REMOVED]
00017766: [hostap_handler] wpa_supp: wpa_printf_impl: key_mgmt: 0x4
00017767: [networkThread] wpa_supp: wpa_printf_impl: Calling wpa_cli: set_network, argc: 4
00017768: [networkThread] wpa_supp: wpa_printf_impl: argv[0]: set_network
00017769: [networkThread] wpa_supp: wpa_printf_impl: argv[1]: 0
00017770: [networkThread] wpa_supp: wpa_printf_impl: argv[2]: ieee80211w
00017771: [networkThread] wpa_supp: wpa_printf_impl: argv[3]: 0
00017772: [hostap_handler] wpa_supp: wpa_printf_impl: ml: Control interface command 'SET_NETWORK [REMOVED]'
00017774: [hostap_handler] wpa_supp: wpa_printf_impl: CTRL_IFACE: SET_NETWORK id=0 name='ieee80211w'
00017775: [hostap_handler] wpa_supp: wpa_printf_impl: CTRL_IFACE: value - hexdump_ascii(len=1): [REMOVED]
00017777: [hostap_handler] wpa_supp: wpa_printf_impl: ieee80211w=0 (0x0)
00017778: [networkThread] wpa_supp: wpa_printf_impl: Calling wpa_cli: set_network, argc: 4
00017779: [networkThread] wpa_supp: wpa_printf_impl: argv[0]: set_network
00017780: [networkThread] wpa_supp: wpa_printf_impl: argv[1]: 0
00017781: [networkThread] wpa_supp: wpa_printf_impl: argv[2]: proto
00017782: [networkThread] wpa_supp: wpa_printf_impl: argv[3]: RSN
00017783: [hostap_handler] wpa_supp: wpa_printf_impl: ml: Control interface command 'SET_NETWORK [REMOVED]'
00017785: [hostap_handler] wpa_supp: wpa_printf_impl: CTRL_IFACE: SET_NETWORK id=0 name='proto'
00017786: [hostap_handler] wpa_supp: wpa_printf_impl: CTRL_IFACE: value - hexdump_ascii(len=3): [REMOVED]
00017787: [hostap_handler] wpa_supp: wpa_printf_impl: proto: 0x2
00017789: [networkThread] wpa_supp: wpa_printf_impl: Calling wpa_cli: set_network, argc: 4
00017790: [networkThread] wpa_supp: wpa_printf_impl: argv[0]: set_network
00017791: [networkThread] wpa_supp: wpa_printf_impl: argv[1]: 0
00017792: [networkThread] wpa_supp: wpa_printf_impl: argv[2]: key_mgmt
00017793: [networkThread] wpa_supp: wpa_printf_impl: argv[3]: WPA-EAP
00017794: [hostap_handler] wpa_supp: wpa_printf_impl: ml: Control interface command 'SET_NETWORK [REMOVED]'
00017796: [hostap_handler] wpa_supp: wpa_printf_impl: CTRL_IFACE: SET_NETWORK id=0 name='key_mgmt'
00017797: [hostap_handler] wpa_supp: wpa_printf_impl: CTRL_IFACE: value - hexdump_ascii(len=7): [REMOVED]
00017798: [hostap_handler] wpa_supp: wpa_printf_impl: key_mgmt: 0x1
00017799: [networkThread] wpa_supp: wpa_printf_impl: Calling wpa_cli: set, argc: 3
00017801: [networkThread] wpa_supp: wpa_printf_impl: argv[0]: set
00017802: [networkThread] wpa_supp: wpa_printf_impl: argv[1]: openssl_ciphers
00017803: [networkThread] wpa_supp: wpa_printf_impl: argv[2]: "DEFAULT:!EXP:!LOW"
00017804: [hostap_handler] wpa_supp: wpa_printf_impl: ml: Control interface command 'SET openssl_ciphers "DEFAULT:!EXP:!LOW"'
00017806: [hostap_handler] wpa_supp: wpa_printf_impl: CTRL_IFACE SET 'openssl_ciphers'='"DEFAULT:!EXP:!LOW"'
00017807: [hostap_handler] wpa_supp: wpa_printf_impl: openssl_ciphers='"DEFAULT:!EXP:!LOW"'
00017809: [networkThread] wpa_supp: wpa_printf_impl: Calling wpa_cli: set_network, argc: 4
00017810: [networkThread] wpa_supp: wpa_printf_impl: argv[0]: set_network
00017811: [networkThread] wpa_supp: wpa_printf_impl: argv[1]: 0
00017812: [networkThread] wpa_supp: wpa_printf_impl: argv[2]: group
00017813: [networkThread] wpa_supp: wpa_printf_impl: argv[3]: CCMP
00017814: [hostap_handler] wpa_supp: wpa_printf_impl: ml: Control interface command 'SET_NETWORK [REMOVED]'
00017816: [hostap_handler] wpa_supp: wpa_printf_impl: CTRL_IFACE: SET_NETWORK id=0 name='group'
00017817: [hostap_handler] wpa_supp: wpa_printf_impl: CTRL_IFACE: value - hexdump_ascii(len=4): [REMOVED]
00017818: [hostap_handler] wpa_supp: wpa_printf_impl: group: 0x10
00017819: [networkThread] wpa_supp: wpa_printf_impl: Calling wpa_cli: set_network, argc: 4
00017821: [networkThread] wpa_supp: wpa_printf_impl: argv[0]: set_network
00017822: [networkThread] wpa_supp: wpa_printf_impl: argv[1]: 0
00017823: [networkThread] wpa_supp: wpa_printf_impl: argv[2]: pairwise
00017824: [networkThread] wpa_supp: wpa_printf_impl: argv[3]: CCMP
00017825: [hostap_handler] wpa_supp: wpa_printf_impl: ml: Control interface command 'SET_NETWORK [REMOVED]'
00017826: [hostap_handler] wpa_supp: wpa_printf_impl: CTRL_IFACE: SET_NETWORK id=0 name='pairwise'
00017828: [hostap_handler] wpa_supp: wpa_printf_impl: CTRL_IFACE: value - hexdump_ascii(len=4): [REMOVED]
00017829: [hostap_handler] wpa_supp: wpa_printf_impl: pairwise: 0x10
00017830: [networkThread] wpa_supp: wpa_printf_impl: Calling wpa_cli: set_network, argc: 4
00017831: [networkThread] wpa_supp: wpa_printf_impl: argv[0]: set_network
00017832: [networkThread] wpa_supp: wpa_printf_impl: argv[1]: 0
00017833: [networkThread] wpa_supp: wpa_printf_impl: argv[2]: group_mgmt
00017834: [networkThread] wpa_supp: wpa_printf_impl: argv[3]: AES-128-CMAC
00017836: [hostap_handler] wpa_supp: wpa_printf_impl: ml: Control interface command 'SET_NETWORK [REMOVED]'
00017837: [hostap_handler] wpa_supp: wpa_printf_impl: CTRL_IFACE: SET_NETWORK id=0 name='group_mgmt'
00017839: [hostap_handler] wpa_supp: wpa_printf_impl: CTRL_IFACE: value - hexdump_ascii(len=12): [REMOVED]
00017840: [hostap_handler] wpa_supp: wpa_printf_impl: group_mgmt: 0x20
00017841: [networkThread] wpa_supp: wpa_printf_impl: Calling wpa_cli: set_network, argc: 4
00017842: [networkThread] wpa_supp: wpa_printf_impl: argv[0]: set_network
00017843: [networkThread] wpa_supp: wpa_printf_impl: argv[1]: 0
00017844: [networkThread] wpa_supp: wpa_printf_impl: argv[2]: proto
00017845: [networkThread] wpa_supp: wpa_printf_impl: argv[3]: RSN
00017847: [hostap_handler] wpa_supp: wpa_printf_impl: ml: Control interface command 'SET_NETWORK [REMOVED]'
00017848: [hostap_handler] wpa_supp: wpa_printf_impl: CTRL_IFACE: SET_NETWORK id=0 name='proto'
00017849: [hostap_handler] wpa_supp: wpa_printf_impl: CTRL_IFACE: value - hexdump_ascii(len=3): [REMOVED]
00017851: [networkThread] wpa_supp: wpa_printf_impl: Calling wpa_cli: set_network, argc: 4
00017852: [networkThread] wpa_supp: wpa_printf_impl: argv[0]: set_network
00017853: [networkThread] wpa_supp: wpa_printf_impl: argv[1]: 0
00017854: [networkThread] wpa_supp: wpa_printf_impl: argv[2]: eap
00017855: [networkThread] wpa_supp: wpa_printf_impl: argv[3]: TLS
00017856: [hostap_handler] wpa_supp: wpa_printf_impl: ml: Control interface command 'SET_NETWORK [REMOVED]'
00017858: [hostap_handler] wpa_supp: wpa_printf_impl: CTRL_IFACE: SET_NETWORK id=0 name='eap'
00017859: [hostap_handler] wpa_supp: wpa_printf_impl: CTRL_IFACE: value - hexdump_ascii(len=3): [REMOVED]
00017860: [hostap_handler] wpa_supp: wpa_printf_impl: eap methods - hexdump(len=16): 00 00 00 00 0d 00 00 00 00 00 00 00 00 00 00 00
00017862: [networkThread] wpa_supp: wpa_printf_impl: Calling wpa_cli: set_network, argc: 4
00017864: [networkThread] wpa_supp: wpa_printf_impl: argv[0]: set_network
00017865: [networkThread] wpa_supp: wpa_printf_impl: argv[1]: 0
00017866: [networkThread] wpa_supp: wpa_printf_impl: argv[2]: identity
00017867: [networkThread] wpa_supp: wpa_printf_impl: argv[3]: "user@example.org"
00017868: [hostap_handler] wpa_supp: wpa_printf_impl: ml: Control interface command 'SET_NETWORK [REMOVED]'
00017869: [hostap_handler] wpa_supp: wpa_printf_impl: CTRL_IFACE: SET_NETWORK id=0 name='identity'
00017871: [hostap_handler] wpa_supp: wpa_printf_impl: CTRL_IFACE: value - hexdump_ascii(len=18): [REMOVED]
00017872: [hostap_handler] wpa_supp: wpa_printf_impl: identity - hexdump_ascii(len=16):
00017873: [hostap_handler] wpa_supp: _wpa_hexdump_ascii:
75 73 65 72 40 65 78 61 6d 70 6c 65 2e 6f 72 67 |user@exa mple.org
00017876: [networkThread] wpa_supp: wpa_printf_impl: Calling wpa_cli: set_network, argc: 4
00017877: [networkThread] wpa_supp: wpa_printf_impl: argv[0]: set_network
00017878: [networkThread] wpa_supp: wpa_printf_impl: argv[1]: 0
00017879: [networkThread] wpa_supp: wpa_printf_impl: argv[2]: anonymous_identity
00017880: [networkThread] wpa_supp: wpa_printf_impl: argv[3]: "(null)"
00017881: [hostap_handler] wpa_supp: wpa_printf_impl: ml: Control interface command 'SET_NETWORK [REMOVED]'
00017883: [hostap_handler] wpa_supp: wpa_printf_impl: CTRL_IFACE: SET_NETWORK id=0 name='anonymous_identity'
00017884: [hostap_handler] wpa_supp: wpa_printf_impl: CTRL_IFACE: value - hexdump_ascii(len=8): [REMOVED]
00017886: [hostap_handler] wpa_supp: wpa_printf_impl: anonymous_identity - hexdump_ascii(len=6):
00017887: [hostap_handler] wpa_supp: _wpa_hexdump_ascii:
28 6e 75 6c 6c 29 |(null)
00017889: [networkThread] wpa_supp: wpa_printf_impl: Calling wpa_cli: set_network, argc: 4
00017891: [networkThread] wpa_supp: wpa_printf_impl: argv[0]: set_network
00017892: [networkThread] wpa_supp: wpa_printf_impl: argv[1]: 0
00017892: [networkThread] wpa_supp: wpa_printf_impl: argv[2]: ca_cert
00017893: [networkThread] wpa_supp: wpa_printf_impl: argv[3]: "blob://ca_cert"
00017895: [hostap_handler] wpa_supp: wpa_printf_impl: ml: Control interface command 'SET_NETWORK [REMOVED]'
00017896: [hostap_handler] wpa_supp: wpa_printf_impl: CTRL_IFACE: SET_NETWORK id=0 name='ca_cert'
00017898: [hostap_handler] wpa_supp: wpa_printf_impl: CTRL_IFACE: value - hexdump_ascii(len=16): [REMOVED]
00017899: [hostap_handler] wpa_supp: wpa_printf_impl: ca_cert - hexdump_ascii(len=14):
00017900: [hostap_handler] wpa_supp: _wpa_hexdump_ascii:
62 6c 6f 62 3a 2f 2f 63 61 5f 63 65 72 74 |blob://c a_cert
00017903: [networkThread] wpa_supp: wpa_printf_impl: Calling wpa_cli: set_network, argc: 4
00017904: [networkThread] wpa_supp: wpa_printf_impl: argv[0]: set_network
00017905: [networkThread] wpa_supp: wpa_printf_impl: argv[1]: 0
00017906: [networkThread] wpa_supp: wpa_printf_impl: argv[2]: client_cert
00017907: [networkThread] wpa_supp: wpa_printf_impl: argv[3]: "blob://client_cert"
00017908: [hostap_handler] wpa_supp: wpa_printf_impl: ml: Control interface command 'SET_NETWORK [REMOVED]'
00017910: [hostap_handler] wpa_supp: wpa_printf_impl: CTRL_IFACE: SET_NETWORK id=0 name='client_cert'
00017911: [hostap_handler] wpa_supp: wpa_printf_impl: CTRL_IFACE: value - hexdump_ascii(len=20): [REMOVED]
00017912: [hostap_handler] wpa_supp: wpa_printf_impl: client_cert - hexdump_ascii(len=18):
00017914: [hostap_handler] wpa_supp: _wpa_hexdump_ascii:
62 6c 6f 62 3a 2f 2f 63 6c 69 65 6e 74 5f 63 65 |blob://c lient_ce
72 74 |rt
00017917: [networkThread] wpa_supp: wpa_printf_impl: Calling wpa_cli: set_network, argc: 4
00017918: [networkThread] wpa_supp: wpa_printf_impl: argv[0]: set_network
00017920: [networkThread] wpa_supp: wpa_printf_impl: argv[1]: 0
00017920: [networkThread] wpa_supp: wpa_printf_impl: argv[2]: private_key
00017921: [networkThread] wpa_supp: wpa_printf_impl: argv[3]: "blob://private_key"
00017923: [hostap_handler] wpa_supp: wpa_printf_impl: ml: Control interface command 'SET_NETWORK [REMOVED]'
00017924: [hostap_handler] wpa_supp: wpa_printf_impl: CTRL_IFACE: SET_NETWORK id=0 name='private_key'
00017926: [hostap_handler] wpa_supp: wpa_printf_impl: CTRL_IFACE: value - hexdump_ascii(len=20): [REMOVED]
00017927: [hostap_handler] wpa_supp: wpa_printf_impl: private_key - hexdump_ascii(len=18):
00017928: [hostap_handler] wpa_supp: _wpa_hexdump_ascii:
62 6c 6f 62 3a 2f 2f 70 72 69 76 61 74 65 5f 6b |blob://p rivate_k
65 79 |ey
00017932: [networkThread] wpa_supp: wpa_printf_impl: Calling wpa_cli: set_network, argc: 4
00017933: [networkThread] wpa_supp: wpa_printf_impl: argv[0]: set_network
00017934: [networkThread] wpa_supp: wpa_printf_impl: argv[1]: 0
00017935: [networkThread] wpa_supp: wpa_printf_impl: argv[2]: private_key_passwd
00017936: [networkThread] wpa_supp: wpa_printf_impl: argv[3]: "(null)"
00017937: [hostap_handler] wpa_supp: wpa_printf_impl: ml: Control interface command 'SET_NETWORK [REMOVED]'
00017939: [hostap_handler] wpa_supp: wpa_printf_impl: CTRL_IFACE: SET_NETWORK id=0 name='private_key_passwd'
00017940: [hostap_handler] wpa_supp: wpa_printf_impl: CTRL_IFACE: value - hexdump_ascii(len=8): [REMOVED]
00017942: [hostap_handler] wpa_supp: wpa_printf_impl: private_key_passwd - hexdump_ascii(len=6): [REMOVED]
我是不是漏掉了什么?这样做可行吗?
看起来存在一个已知错误(https://github.com/zephyrproject-rtos/zephyr/issues/94326)。如果在wifi_enterprise_creds_params中定义 ca_cert2、client_cert2 和 client_key2,就能正常工作!