-
-
Save me-no-dev/2d2b51b17226f5e9c5a4d9a78bdc0720 to your computer and use it in GitHub Desktop.
#include "WiFi.h" | |
#include "esp_wpa2.h" | |
#include "esp_wifi.h" | |
const char * ca_pem = "-----BEGIN CERTIFICATE-----\n" | |
"MIID3DCCA0WgAwIBAgIJANe5ZSCKoB8fMA0GCSqGSIb3DQEBCwUAMIGTMQswCQYD\n" | |
"VQQGEwJGUjEPMA0GA1UECAwGUmFkaXVzMRIwEAYDVQQHDAlTb21ld2hlcmUxFTAT\n" | |
"BgNVBAoMDEV4YW1wbGUgSW5jLjEgMB4GCSqGSIb3DQEJARYRYWRtaW5AZXhhbXBs\n" | |
"ZS5jb20xJjAkBgNVBAMMHUV4YW1wbGUgQ2VydGlmaWNhdGUgQXV0aG9yaXR5MB4X\n" | |
"DTE2MTEyMzAyNTUwN1oXDTE3MDEyMjAyNTUwN1owgZMxCzAJBgNVBAYTAkZSMQ8w\n" | |
"DQYDVQQIDAZSYWRpdXMxEjAQBgNVBAcMCVNvbWV3aGVyZTEVMBMGA1UECgwMRXhh\n" | |
"bXBsZSBJbmMuMSAwHgYJKoZIhvcNAQkBFhFhZG1pbkBleGFtcGxlLmNvbTEmMCQG\n" | |
"A1UEAwwdRXhhbXBsZSBDZXJ0aWZpY2F0ZSBBdXRob3JpdHkwgZ8wDQYJKoZIhvcN\n" | |
"AQEBBQADgY0AMIGJAoGBAL03y7N2GvNDO9BN8fVtdNonp0bMiqpj1D0He5+OTM+9\n" | |
"3ZTIsJCNrbzhLQrRI3vMW7UDy8U7GeWORN9W4dWYlYiy/NFRp3hNMrbePhVmNIOV\n" | |
"ww4ovGzbD+Xo31gPVkhzQ8I5/jbOIQBmgKMAMZyOMlG9VD6yMmAeYqnZYz68WHKt\n" | |
"AgMBAAGjggE0MIIBMDAdBgNVHQ4EFgQUf1MLQIzAEZcRsgZlS8sosfmVI+UwgcgG\n" | |
"A1UdIwSBwDCBvYAUf1MLQIzAEZcRsgZlS8sosfmVI+WhgZmkgZYwgZMxCzAJBgNV\n" | |
"BAYTAkZSMQ8wDQYDVQQIDAZSYWRpdXMxEjAQBgNVBAcMCVNvbWV3aGVyZTEVMBMG\n" | |
"A1UECgwMRXhhbXBsZSBJbmMuMSAwHgYJKoZIhvcNAQkBFhFhZG1pbkBleGFtcGxl\n" | |
"LmNvbTEmMCQGA1UEAwwdRXhhbXBsZSBDZXJ0aWZpY2F0ZSBBdXRob3JpdHmCCQDX\n" | |
"uWUgiqAfHzAMBgNVHRMEBTADAQH/MDYGA1UdHwQvMC0wK6ApoCeGJWh0dHA6Ly93\n" | |
"d3cuZXhhbXBsZS5jb20vZXhhbXBsZV9jYS5jcmwwDQYJKoZIhvcNAQELBQADgYEA\n" | |
"GepHc7TE/P+5t/cZPn5TTQkWQ/4/1lgQd82lF36RYWSIW3BdAc0zwYWYZaWixxyp\n" | |
"s0YOqwz6PZAGRV+SlYO2f8Kf+C3aZs4YHB0GsmksmFOb8r9d7xcDuOKHoA+QV0Zw\n" | |
"RaK6pttsBAxy7rw3kX/CgTp0Y2puaLdMXv/v9FisCP8=\n" | |
"-----END CERTIFICATE-----"; | |
const char * client_crt = "Certificate:\n" | |
" Data:\n" | |
" Version: 3 (0x2)\n" | |
" Serial Number: 44 (0x2c)\n" | |
" Signature Algorithm: sha1WithRSAEncryption\n" | |
" Issuer: C=FR, ST=Radius, L=Somewhere, O=Example Inc./[email protected], CN=Example Certificate Authority\n" | |
" Validity\n" | |
" Not Before: Nov 23 02:55:07 2016 GMT\n" | |
" Not After : Jan 22 02:55:07 2017 GMT\n" | |
" Subject: C=FR, ST=Radius, O=Example Inc., [email protected]/[email protected]\n" | |
" Subject Public Key Info:\n" | |
" Public Key Algorithm: rsaEncryption\n" | |
" Public-Key: (2048 bit)\n" | |
" Modulus:\n" | |
" 00:ac:41:d4:a2:46:0c:dc:67:1d:7b:89:36:7c:15:\n" | |
" be:a2:c1:fe:4c:f2:fa:af:5d:76:0e:ee:b5:ca:d4:\n" | |
" d3:01:c8:6b:30:50:df:2d:57:17:f4:43:47:97:ca:\n" | |
" f1:8d:f7:c0:9d:56:b3:e7:17:7c:58:59:de:f3:be:\n" | |
" b5:08:5d:f8:3a:ad:83:44:0d:31:c9:f1:3d:f1:9a:\n" | |
" cf:84:0c:ad:d3:be:5c:bd:3d:58:b5:1d:2c:fe:70:\n" | |
" 8d:c5:b0:17:87:d4:8e:85:f7:51:4c:0f:d1:e0:8c:\n" | |
" 7b:a0:25:ab:91:7c:7f:eb:47:73:c9:4b:6c:8b:e6:\n" | |
" c1:06:d5:94:30:63:ec:45:1a:f5:7f:46:2f:b3:84:\n" | |
" 78:5d:1c:37:1a:fa:57:ea:45:5e:45:40:ab:14:c7:\n" | |
" 81:b0:26:3d:7e:cf:da:db:f0:f1:40:a7:a1:4b:54:\n" | |
" f3:96:1b:c9:30:3c:3c:d8:19:ba:c7:df:b1:ad:a2:\n" | |
" d6:17:0a:d6:ed:31:b5:cb:12:39:f5:6e:92:6b:85:\n" | |
" f2:9e:c7:06:6b:bb:89:ed:a7:5f:ec:56:12:46:fd:\n" | |
" 3a:74:d1:d2:31:30:1d:58:19:25:33:ff:11:ea:3a:\n" | |
" 52:33:b1:fb:d3:75:8d:1f:5e:36:a5:35:e0:11:5a:\n" | |
" 4a:2d:97:58:2c:3d:62:3c:32:af:83:69:a9:1a:32:\n" | |
" 1b:b7\n" | |
" Exponent: 65537 (0x10001)\n" | |
" X509v3 extensions:\n" | |
" X509v3 Extended Key Usage: \n" | |
" TLS Web Client Authentication\n" | |
" X509v3 CRL Distribution Points: \n" | |
"\n" | |
" Full Name:\n" | |
" URI:http://www.example.com/example_ca.crl\n" | |
"\n" | |
" Signature Algorithm: sha1WithRSAEncryption\n" | |
" 8b:8d:b6:19:ce:6f:6b:9e:1d:03:8b:6b:10:fc:99:d0:7a:2f:\n" | |
" e0:37:ce:b8:a4:e4:b9:a1:c2:36:ff:76:b2:ad:d7:d0:df:d1:\n" | |
" 03:27:93:a7:4e:1e:bf:ed:d2:b7:65:2a:c9:c3:ab:20:aa:e3:\n" | |
" 10:4c:75:3b:c4:02:ab:34:08:6e:61:91:cf:e3:02:35:6a:e5:\n" | |
" f3:25:96:51:92:82:6e:52:81:c1:f1:7b:68:02:b0:ce:f4:ba:\n" | |
" fd:6e:68:35:b3:7e:77:cb:a0:1e:11:5e:58:bf:f3:2a:ed:b3:\n" | |
" 4c:82:21:5e:1b:47:b6:2f:f3:f5:c9:1b:6a:70:44:6d:ff:ad:\n" | |
" a6:e3\n" | |
"-----BEGIN CERTIFICATE-----\n" | |
"MIIDTjCCAregAwIBAgIBLDANBgkqhkiG9w0BAQUFADCBkzELMAkGA1UEBhMCRlIx\n" | |
"DzANBgNVBAgMBlJhZGl1czESMBAGA1UEBwwJU29tZXdoZXJlMRUwEwYDVQQKDAxF\n" | |
"eGFtcGxlIEluYy4xIDAeBgkqhkiG9w0BCQEWEWFkbWluQGV4YW1wbGUuY29tMSYw\n" | |
"JAYDVQQDDB1FeGFtcGxlIENlcnRpZmljYXRlIEF1dGhvcml0eTAeFw0xNjExMjMw\n" | |
"MjU1MDdaFw0xNzAxMjIwMjU1MDdaMHExCzAJBgNVBAYTAkZSMQ8wDQYDVQQIDAZS\n" | |
"YWRpdXMxFTATBgNVBAoMDEV4YW1wbGUgSW5jLjEZMBcGA1UEAwwQdXNlckBleGFt\n" | |
"cGxlLmNvbTEfMB0GCSqGSIb3DQEJARYQdXNlckBleGFtcGxlLmNvbTCCASIwDQYJ\n" | |
"KoZIhvcNAQEBBQADggEPADCCAQoCggEBAKxB1KJGDNxnHXuJNnwVvqLB/kzy+q9d\n" | |
"dg7utcrU0wHIazBQ3y1XF/RDR5fK8Y33wJ1Ws+cXfFhZ3vO+tQhd+Dqtg0QNMcnx\n" | |
"PfGaz4QMrdO+XL09WLUdLP5wjcWwF4fUjoX3UUwP0eCMe6Alq5F8f+tHc8lLbIvm\n" | |
"wQbVlDBj7EUa9X9GL7OEeF0cNxr6V+pFXkVAqxTHgbAmPX7P2tvw8UCnoUtU85Yb\n" | |
"yTA8PNgZusffsa2i1hcK1u0xtcsSOfVukmuF8p7HBmu7ie2nX+xWEkb9OnTR0jEw\n" | |
"HVgZJTP/Eeo6UjOx+9N1jR9eNqU14BFaSi2XWCw9Yjwyr4NpqRoyG7cCAwEAAaNP\n" | |
"ME0wEwYDVR0lBAwwCgYIKwYBBQUHAwIwNgYDVR0fBC8wLTAroCmgJ4YlaHR0cDov\n" | |
"L3d3dy5leGFtcGxlLmNvbS9leGFtcGxlX2NhLmNybDANBgkqhkiG9w0BAQUFAAOB\n" | |
"gQCLjbYZzm9rnh0Di2sQ/JnQei/gN864pOS5ocI2/3ayrdfQ39EDJ5OnTh6/7dK3\n" | |
"ZSrJw6sgquMQTHU7xAKrNAhuYZHP4wI1auXzJZZRkoJuUoHB8XtoArDO9Lr9bmg1\n" | |
"s353y6AeEV5Yv/Mq7bNMgiFeG0e2L/P1yRtqcERt/62m4w==\n" | |
"-----END CERTIFICATE-----"; | |
const char * client_key = "-----BEGIN RSA PRIVATE KEY-----\n" | |
"MIIEpgIBAAKCAQEArEHUokYM3Gcde4k2fBW+osH+TPL6r112Du61ytTTAchrMFDf\n" | |
"LVcX9ENHl8rxjffAnVaz5xd8WFne8761CF34Oq2DRA0xyfE98ZrPhAyt075cvT1Y\n" | |
"tR0s/nCNxbAXh9SOhfdRTA/R4Ix7oCWrkXx/60dzyUtsi+bBBtWUMGPsRRr1f0Yv\n" | |
"s4R4XRw3GvpX6kVeRUCrFMeBsCY9fs/a2/DxQKehS1TzlhvJMDw82Bm6x9+xraLW\n" | |
"FwrW7TG1yxI59W6Sa4XynscGa7uJ7adf7FYSRv06dNHSMTAdWBklM/8R6jpSM7H7\n" | |
"03WNH142pTXgEVpKLZdYLD1iPDKvg2mpGjIbtwIDAQABAoIBAQCMhO9GqUpYia2d\n" | |
"VyOhOcPX1dTzRMuHPwDN0aFvIwo2zB3UvkQxInkiA7hldWJz44W3VEFR5PDEyht8\n" | |
"Tzgy6SVUCLOqUfEpwag8bYOXPxiWQRY6Mc8pf/FyZrLgb3PilFznoAcru0QEn9VB\n" | |
"oTlCZ4OalSE5NlQIFGemgZhvmTPmcm4OwPW2diBjLtb3AA8eaaw8okWZwr8g4Bcd\n" | |
"el5KX6pZpDRpGQueh3iKaKxYWbxLYK+c30gKWD65tsAqKyVg2Tm1R2c+kFXgizZt\n" | |
"EexD95SGMjSkGg3R05sKv6m71iJhlOzVQ4ZCKm18Kqa7wZuZ4SIehVmKIV0gaupz\n" | |
"gjyr7+NBAoGBAOGjjGI3nxJTZY3O+KeaQo/jqrKowqZxzMOsCgAvW56xDuAvx9TJ\n" | |
"m4428NGubMl/0RwX6TnxJDm6oe+tnOxLIgE/VnsQLiNzQuFJxrs5JYctdGc4uvk2\n" | |
"KuXDr7tPEYlU/7OLRReov9emydIXJnsGejkIPllUj+DGNjNFqtXh2VoHAoGBAMNv\n" | |
"eSgJSkcM6AUaDuUKaXBL2nkKHNoTtRQ0eCEUds6arKyMo0mSP753FNEuOWToVz1O\n" | |
"oaddSFw81J9t+Xd6XSRbhMj63bQ9nvFKBA1lJfLu+xe3ts0f+vmp1PguOuUHsgNP\n" | |
"aAm/gLPSKUpBO46NG6KhUrZ2ej6AEg7SuGXrDITRAoGBAKK7s6m6d81dvGZ0GT23\n" | |
"sb3Y8ul7cTdd59JPp77OaQOgqxvhGfxLkxcUZMa1R9xjhMsAK8MQOZIxGk2kJwL8\n" | |
"hP/lUFfdKYmDvX6CGQQ6iOhfTg6MCb1m5bVkVr9+nSUw2mIBVclkeUftEK2m6Kfd\n" | |
"2hR774u5wzLXgYuk+TrcckfNAoGBAJ9X8hacjH0lnr8aIe7I8HLoxbZOcnuz+b4B\n" | |
"kbiW8M8++W6uNCw2G9b1THnJEG6fqRGJXPASdH8P8eQTTIUHtY2BOOCM+dqNK1xc\n" | |
"FrW9NJXAF+WcmmTgoEaTG9tGBirafV+JjK/1/b+fqJ6sVRzDHDcbBU9ThhQTY6XG\n" | |
"VSZz4H8hAoGBAMeQQjiUlKBnpGt1oTgKDZo58b7ui61yftg+dEAwIKs6eb5X20vZ\n" | |
"Ca4v/zg06k9lKTzyspQjJZuzpMjFUvDK4ReamEvmwQTIc+oYVJm9Af1HUytzrHJH\n" | |
"u0/dDt0eYpZpzrFqxlP+0oXxlegD8REMVvwNCy+4isyCvjogDaYRfJqi\n" | |
"-----END RSA PRIVATE KEY-----"; | |
#define EAP_TLS 0 | |
#define EAP_PEAP 1 | |
#define EAP_TTLS 2 | |
#define EXAMPLE_WIFI_SSID "wpa2_test" //SSID (network name) for the example to connect to. | |
#define EXAMPLE_EAP_METHOD EAP_PEAP //EAP method (TLS, PEAP or TTLS) for the example to use. | |
#define EXAMPLE_EAP_ID "[email protected]" //Identity in phase 1 of EAP procedure. | |
#define EXAMPLE_EAP_USERNAME "espressif" //Username for EAP method (PEAP and TTLS). | |
#define EXAMPLE_EAP_PASSWORD "test11" //Password for EAP method (PEAP and TTLS). | |
void initialise_wifi(void) | |
{ | |
WiFi.begin(EXAMPLE_WIFI_SSID, NULL, 0 , NULL, false); | |
if( esp_wifi_sta_wpa2_ent_set_ca_cert((uint8_t *)ca_pem, strlen(ca_pem)) ){ | |
Serial.println("Failed to set WPA2 CA Certificate"); | |
return; | |
} | |
if( esp_wifi_sta_wpa2_ent_set_cert_key((uint8_t *)client_crt, strlen(client_crt), (uint8_t *)client_key, strlen(client_key), NULL, 0) ){ | |
Serial.println("Failed to set WPA2 Client Certificate and Key"); | |
return; | |
} | |
if( esp_wifi_sta_wpa2_ent_set_identity((uint8_t *)EXAMPLE_EAP_ID, strlen(EXAMPLE_EAP_ID)) ){ | |
Serial.println("Failed to set WPA2 Identity"); | |
return; | |
} | |
if (EXAMPLE_EAP_METHOD == EAP_PEAP || EXAMPLE_EAP_METHOD == EAP_TTLS) { | |
if( esp_wifi_sta_wpa2_ent_set_username((uint8_t *)EXAMPLE_EAP_USERNAME, strlen(EXAMPLE_EAP_USERNAME)) ){ | |
Serial.println("Failed to set WPA2 Username"); | |
return; | |
} | |
if( esp_wifi_sta_wpa2_ent_set_password((uint8_t *)EXAMPLE_EAP_PASSWORD, strlen(EXAMPLE_EAP_PASSWORD)) ){ | |
Serial.println("Failed to set WPA2 Password"); | |
return; | |
} | |
} | |
if( esp_wifi_sta_wpa2_ent_enable() ){ | |
Serial.println("Failed to enable WPA2"); | |
return; | |
} | |
esp_wifi_connect(); | |
} | |
void setup(){ | |
Serial.begin(115200); | |
initialise_wifi(); | |
} | |
void loop(){} |
As a quick bodge for right now, you can rename C:\Program Files (x86)\Arduino\libraries\WiFi\src\WiFi.h
to something else like WiFi_Ard.h
. Also, comment out if( esp_wifi_sta_wpa2_ent_enable() ){}
, it gives errors.
Hello,
I have tested this, but it does not work for me.
I have commented out the client cert lines, because we do not use client certs.
We have:
- root CA cert
- user
- password
I also changed
if( esp_wifi_sta_wpa2_ent_enable() ){
to
esp_wpa2_config_t config = WPA2_CONFIG_INIT_DEFAULT();
if( esp_wifi_sta_wpa2_ent_enable(&config) ){
Serial.println("Failed to enable WPA2");
return;
}
The error is: wpa: Method private structure allocated failure
Bye
Rainer
Hello,
here is the solution:
The strlen() function does return the length of the certificate without the terminating 0x00.
The esp_wifi_sta_wpa2_ent_set_ca_cert() does need the terminating 0x00, so you must add +1.
Bye
Rainer
Hey Rainer,
thanks mate, that was the error I was trying to figure out for 3 days!
Hi,
I am new to ESP32. I was trying to connect it to wpa2 enterprise using the above code but got the following error:
esp_err_t esp_wifi_sta_wpa2_ent_enable(const esp_wpa2_config_t config);
^
Multiple libraries were found for "WiFi.h"
Used: C:\Users\xxxxxxxx\Dropbox\Arduino\hardware\espressif\esp32\libraries\WiFi
Not used: C:\Program Files (x86)\Arduino\libraries\WiFi
exit status 1
too few arguments to function 'esp_err_t esp_wifi_sta_wpa2_ent_enable(const esp_wpa2_config_t)'
What could be the possible reason? I am using Arduino IDE 1.8.4, the esp32 wifi library latest version, and compile the code for the esp32 dev module.