Skip to content

Commit f7aa896

Browse files
committed
Add example of connection via WPA2 Enterprise
1 parent 610fb1d commit f7aa896

File tree

2 files changed

+261
-0
lines changed

2 files changed

+261
-0
lines changed
Lines changed: 134 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,134 @@
1+
2+
/*
3+
Web client
4+
5+
This sketch connects to a website (http://www.google.com)
6+
using the WiFi module.
7+
8+
This example is written for a network using WPA encryption. For
9+
WEP or WPA, change the Wifi.begin() call accordingly.
10+
11+
This example is written for a network using WPA encryption. For
12+
WEP or WPA, change the Wifi.begin() call accordingly.
13+
14+
Circuit:
15+
* Board with NINA module (Arduino MKR WiFi 1010, MKR VIDOR 4000 and UNO WiFi Rev.2)
16+
17+
created 13 July 2010
18+
by dlf (Metodo2 srl)
19+
modified 31 May 2012
20+
by Tom Igoe
21+
*/
22+
23+
24+
#include <SPI.h>
25+
#include <WiFiNINA.h>
26+
27+
#include "arduino_secrets.h"
28+
///////please enter your sensitive data in the Secret tab/arduino_secrets.h
29+
char ssid[] = SECRET_SSID; // your network SSID (name)
30+
char pass[] = SECRET_PASS; // your network password (use for WPA, or use as key for WEP)
31+
int keyIndex = 0; // your network key Index number (needed only for WEP)
32+
33+
int status = WL_IDLE_STATUS;
34+
// if you don't want to use DNS (and reduce your sketch size)
35+
// use the numeric IP instead of the name for the server:
36+
//IPAddress server(74,125,232,128); // numeric IP for Google (no DNS)
37+
char server[] = "www.google.com"; // name address for Google (using DNS)
38+
39+
// Initialize the Ethernet client library
40+
// with the IP address and port of the server
41+
// that you want to connect to (port 80 is default for HTTP):
42+
WiFiClient client;
43+
44+
// Initialize the WPA2 Enterprise object
45+
// Just fill the fields you need
46+
// eg. if you are given only an identity and a certificate, initialize it as
47+
// WPA2Enterprise data("myidentity", ca_pem);
48+
// Certificates are stored in secret tab to avoid sharing them.
49+
50+
WPA2Enterprise data(EAP_TLS, "myidentity", "username", "password", ca_pem, client_crt, client_key);
51+
52+
void setup() {
53+
//Initialize serial and wait for port to open:
54+
Serial.begin(9600);
55+
while (!Serial) {
56+
; // wait for serial port to connect. Needed for native USB port only
57+
}
58+
59+
// configure the wifi module to use provided WPA2 Enterprise parameters
60+
WiFi.config(data);
61+
62+
// check for the WiFi module:
63+
if (WiFi.status() == WL_NO_MODULE) {
64+
Serial.println("Communication with WiFi module failed!");
65+
// don't continue
66+
while (true);
67+
}
68+
69+
String fv = WiFi.firmwareVersion();
70+
if (fv < WIFI_FIRMWARE_LATEST_VERSION) {
71+
Serial.println("Please upgrade the firmware");
72+
}
73+
74+
// attempt to connect to Wifi network:
75+
while (status != WL_CONNECTED) {
76+
Serial.print("Attempting to connect to SSID: ");
77+
Serial.println(ssid);
78+
// Connect to WPA/WPA2 network. Change this line if using open or WEP network:
79+
status = WiFi.begin(ssid, pass);
80+
81+
// wait 10 seconds for connection:
82+
delay(10000);
83+
}
84+
Serial.println("Connected to wifi");
85+
printWifiStatus();
86+
87+
Serial.println("\nStarting connection to server...");
88+
// if you get a connection, report back via serial:
89+
if (client.connect(server, 80)) {
90+
Serial.println("connected to server");
91+
// Make a HTTP request:
92+
client.println("GET /search?q=arduino HTTP/1.1");
93+
client.println("Host: www.google.com");
94+
client.println("Connection: close");
95+
client.println();
96+
}
97+
}
98+
99+
void loop() {
100+
// if there are incoming bytes available
101+
// from the server, read them and print them:
102+
while (client.available()) {
103+
char c = client.read();
104+
Serial.write(c);
105+
}
106+
107+
// if the server's disconnected, stop the client:
108+
if (!client.connected()) {
109+
Serial.println();
110+
Serial.println("disconnecting from server.");
111+
client.stop();
112+
113+
// do nothing forevermore:
114+
while (true);
115+
}
116+
}
117+
118+
119+
void printWifiStatus() {
120+
// print the SSID of the network you're attached to:
121+
Serial.print("SSID: ");
122+
Serial.println(WiFi.SSID());
123+
124+
// print your board's IP address:
125+
IPAddress ip = WiFi.localIP();
126+
Serial.print("IP Address: ");
127+
Serial.println(ip);
128+
129+
// print the received signal strength:
130+
long rssi = WiFi.RSSI();
131+
Serial.print("signal strength (RSSI):");
132+
Serial.print(rssi);
133+
Serial.println(" dBm");
134+
}
Lines changed: 127 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,127 @@
1+
#define SECRET_SSID ""
2+
#define SECRET_PASS ""
3+
4+
// This certificates are completely bogus, but your own should resemble this format
5+
6+
const char * ca_pem = "-----BEGIN CERTIFICATE-----\n"
7+
"MIID3DCCA0WgAwIBAgIJANe5ZSCKoB8fMA0GCSqGSIb3DQEBCwUAMIGTMQswCQYD\n"
8+
"VQQGEwJGUjEPMA0GA1UECAwGUmFkaXVzMRIwEAYDVQQHDAlTb21ld2hlcmUxFTAT\n"
9+
"BgNVBAoMDEV4YW1wbGUgSW5jLjEgMB4GCSqGSIb3DQEJARYRYWRtaW5AZXhhbXBs\n"
10+
"ZS5jb20xJjAkBgNVBAMMHUV4YW1wbGUgQ2VydGlmaWNhdGUgQXV0aG9yaXR5MB4X\n"
11+
"DTE2MTEyMzAyNTUwN1oXDTE3MDEyMjAyNTUwN1owgZMxCzAJBgNVBAYTAkZSMQ8w\n"
12+
"DQYDVQQIDAZSYWRpdXMxEjAQBgNVBAcMCVNvbWV3aGVyZTEVMBMGA1UECgwMRXhh\n"
13+
"bXBsZSBJbmMuMSAwHgYJKoZIhvcNAQkBFhFhZG1pbkBleGFtcGxlLmNvbTEmMCQG\n"
14+
"A1UEAwwdRXhhbXBsZSBDZXJ0aWZpY2F0ZSBBdXRob3JpdHkwgZ8wDQYJKoZIhvcN\n"
15+
"AQEBBQADgY0AMIGJAoGBAL03y7N2GvNDO9BN8fVtdNonp0bMiqpj1D0He5+OTM+9\n"
16+
"3ZTIsJCNrbzhLQrRI3vMW7UDy8U7GeWORN9W4dWYlYiy/NFRp3hNMrbePhVmNIOV\n"
17+
"ww4ovGzbD+Xo31gPVkhzQ8I5/jbOIQBmgKMAMZyOMlG9VD6yMmAeYqnZYz68WHKt\n"
18+
"AgMBAAGjggE0MIIBMDAdBgNVHQ4EFgQUf1MLQIzAEZcRsgZlS8sosfmVI+UwgcgG\n"
19+
"A1UdIwSBwDCBvYAUf1MLQIzAEZcRsgZlS8sosfmVI+WhgZmkgZYwgZMxCzAJBgNV\n"
20+
"BAYTAkZSMQ8wDQYDVQQIDAZSYWRpdXMxEjAQBgNVBAcMCVNvbWV3aGVyZTEVMBMG\n"
21+
"A1UECgwMRXhhbXBsZSBJbmMuMSAwHgYJKoZIhvcNAQkBFhFhZG1pbkBleGFtcGxl\n"
22+
"LmNvbTEmMCQGA1UEAwwdRXhhbXBsZSBDZXJ0aWZpY2F0ZSBBdXRob3JpdHmCCQDX\n"
23+
"uWUgiqAfHzAMBgNVHRMEBTADAQH/MDYGA1UdHwQvMC0wK6ApoCeGJWh0dHA6Ly93\n"
24+
"d3cuZXhhbXBsZS5jb20vZXhhbXBsZV9jYS5jcmwwDQYJKoZIhvcNAQELBQADgYEA\n"
25+
"GepHc7TE/P+5t/cZPn5TTQkWQ/4/1lgQd82lF36RYWSIW3BdAc0zwYWYZaWixxyp\n"
26+
"s0YOqwz6PZAGRV+SlYO2f8Kf+C3aZs4YHB0GsmksmFOb8r9d7xcDuOKHoA+QV0Zw\n"
27+
"RaK6pttsBAxy7rw3kX/CgTp0Y2puaLdMXv/v9FisCP8=\n"
28+
"-----END CERTIFICATE-----";
29+
30+
const char * client_crt = "Certificate:\n"
31+
" Data:\n"
32+
" Version: 3 (0x2)\n"
33+
" Serial Number: 44 (0x2c)\n"
34+
" Signature Algorithm: sha1WithRSAEncryption\n"
35+
" Issuer: C=FR, ST=Radius, L=Somewhere, O=Example Inc./[email protected], CN=Example Certificate Authority\n"
36+
" Validity\n"
37+
" Not Before: Nov 23 02:55:07 2016 GMT\n"
38+
" Not After : Jan 22 02:55:07 2017 GMT\n"
39+
" Subject: C=FR, ST=Radius, O=Example Inc., [email protected]/[email protected]\n"
40+
" Subject Public Key Info:\n"
41+
" Public Key Algorithm: rsaEncryption\n"
42+
" Public-Key: (2048 bit)\n"
43+
" Modulus:\n"
44+
" 00:ac:41:d4:a2:46:0c:dc:67:1d:7b:89:36:7c:15:\n"
45+
" be:a2:c1:fe:4c:f2:fa:af:5d:76:0e:ee:b5:ca:d4:\n"
46+
" d3:01:c8:6b:30:50:df:2d:57:17:f4:43:47:97:ca:\n"
47+
" f1:8d:f7:c0:9d:56:b3:e7:17:7c:58:59:de:f3:be:\n"
48+
" b5:08:5d:f8:3a:ad:83:44:0d:31:c9:f1:3d:f1:9a:\n"
49+
" cf:84:0c:ad:d3:be:5c:bd:3d:58:b5:1d:2c:fe:70:\n"
50+
" 8d:c5:b0:17:87:d4:8e:85:f7:51:4c:0f:d1:e0:8c:\n"
51+
" 7b:a0:25:ab:91:7c:7f:eb:47:73:c9:4b:6c:8b:e6:\n"
52+
" c1:06:d5:94:30:63:ec:45:1a:f5:7f:46:2f:b3:84:\n"
53+
" 78:5d:1c:37:1a:fa:57:ea:45:5e:45:40:ab:14:c7:\n"
54+
" 81:b0:26:3d:7e:cf:da:db:f0:f1:40:a7:a1:4b:54:\n"
55+
" f3:96:1b:c9:30:3c:3c:d8:19:ba:c7:df:b1:ad:a2:\n"
56+
" d6:17:0a:d6:ed:31:b5:cb:12:39:f5:6e:92:6b:85:\n"
57+
" f2:9e:c7:06:6b:bb:89:ed:a7:5f:ec:56:12:46:fd:\n"
58+
" 3a:74:d1:d2:31:30:1d:58:19:25:33:ff:11:ea:3a:\n"
59+
" 52:33:b1:fb:d3:75:8d:1f:5e:36:a5:35:e0:11:5a:\n"
60+
" 4a:2d:97:58:2c:3d:62:3c:32:af:83:69:a9:1a:32:\n"
61+
" 1b:b7\n"
62+
" Exponent: 65537 (0x10001)\n"
63+
" X509v3 extensions:\n"
64+
" X509v3 Extended Key Usage: \n"
65+
" TLS Web Client Authentication\n"
66+
" X509v3 CRL Distribution Points: \n"
67+
"\n"
68+
" Full Name:\n"
69+
" URI:http://www.example.com/example_ca.crl\n"
70+
"\n"
71+
" Signature Algorithm: sha1WithRSAEncryption\n"
72+
" 8b:8d:b6:19:ce:6f:6b:9e:1d:03:8b:6b:10:fc:99:d0:7a:2f:\n"
73+
" e0:37:ce:b8:a4:e4:b9:a1:c2:36:ff:76:b2:ad:d7:d0:df:d1:\n"
74+
" 03:27:93:a7:4e:1e:bf:ed:d2:b7:65:2a:c9:c3:ab:20:aa:e3:\n"
75+
" 10:4c:75:3b:c4:02:ab:34:08:6e:61:91:cf:e3:02:35:6a:e5:\n"
76+
" f3:25:96:51:92:82:6e:52:81:c1:f1:7b:68:02:b0:ce:f4:ba:\n"
77+
" fd:6e:68:35:b3:7e:77:cb:a0:1e:11:5e:58:bf:f3:2a:ed:b3:\n"
78+
" 4c:82:21:5e:1b:47:b6:2f:f3:f5:c9:1b:6a:70:44:6d:ff:ad:\n"
79+
" a6:e3\n"
80+
"-----BEGIN CERTIFICATE-----\n"
81+
"MIIDTjCCAregAwIBAgIBLDANBgkqhkiG9w0BAQUFADCBkzELMAkGA1UEBhMCRlIx\n"
82+
"DzANBgNVBAgMBlJhZGl1czESMBAGA1UEBwwJU29tZXdoZXJlMRUwEwYDVQQKDAxF\n"
83+
"eGFtcGxlIEluYy4xIDAeBgkqhkiG9w0BCQEWEWFkbWluQGV4YW1wbGUuY29tMSYw\n"
84+
"JAYDVQQDDB1FeGFtcGxlIENlcnRpZmljYXRlIEF1dGhvcml0eTAeFw0xNjExMjMw\n"
85+
"MjU1MDdaFw0xNzAxMjIwMjU1MDdaMHExCzAJBgNVBAYTAkZSMQ8wDQYDVQQIDAZS\n"
86+
"YWRpdXMxFTATBgNVBAoMDEV4YW1wbGUgSW5jLjEZMBcGA1UEAwwQdXNlckBleGFt\n"
87+
"cGxlLmNvbTEfMB0GCSqGSIb3DQEJARYQdXNlckBleGFtcGxlLmNvbTCCASIwDQYJ\n"
88+
"KoZIhvcNAQEBBQADggEPADCCAQoCggEBAKxB1KJGDNxnHXuJNnwVvqLB/kzy+q9d\n"
89+
"dg7utcrU0wHIazBQ3y1XF/RDR5fK8Y33wJ1Ws+cXfFhZ3vO+tQhd+Dqtg0QNMcnx\n"
90+
"PfGaz4QMrdO+XL09WLUdLP5wjcWwF4fUjoX3UUwP0eCMe6Alq5F8f+tHc8lLbIvm\n"
91+
"wQbVlDBj7EUa9X9GL7OEeF0cNxr6V+pFXkVAqxTHgbAmPX7P2tvw8UCnoUtU85Yb\n"
92+
"yTA8PNgZusffsa2i1hcK1u0xtcsSOfVukmuF8p7HBmu7ie2nX+xWEkb9OnTR0jEw\n"
93+
"HVgZJTP/Eeo6UjOx+9N1jR9eNqU14BFaSi2XWCw9Yjwyr4NpqRoyG7cCAwEAAaNP\n"
94+
"ME0wEwYDVR0lBAwwCgYIKwYBBQUHAwIwNgYDVR0fBC8wLTAroCmgJ4YlaHR0cDov\n"
95+
"L3d3dy5leGFtcGxlLmNvbS9leGFtcGxlX2NhLmNybDANBgkqhkiG9w0BAQUFAAOB\n"
96+
"gQCLjbYZzm9rnh0Di2sQ/JnQei/gN864pOS5ocI2/3ayrdfQ39EDJ5OnTh6/7dK3\n"
97+
"ZSrJw6sgquMQTHU7xAKrNAhuYZHP4wI1auXzJZZRkoJuUoHB8XtoArDO9Lr9bmg1\n"
98+
"s353y6AeEV5Yv/Mq7bNMgiFeG0e2L/P1yRtqcERt/62m4w==\n"
99+
"-----END CERTIFICATE-----";
100+
101+
const char * client_key = "-----BEGIN RSA PRIVATE KEY-----\n"
102+
"MIIEpgIBAAKCAQEArEHUokYM3Gcde4k2fBW+osH+TPL6r112Du61ytTTAchrMFDf\n"
103+
"LVcX9ENHl8rxjffAnVaz5xd8WFne8761CF34Oq2DRA0xyfE98ZrPhAyt075cvT1Y\n"
104+
"tR0s/nCNxbAXh9SOhfdRTA/R4Ix7oCWrkXx/60dzyUtsi+bBBtWUMGPsRRr1f0Yv\n"
105+
"s4R4XRw3GvpX6kVeRUCrFMeBsCY9fs/a2/DxQKehS1TzlhvJMDw82Bm6x9+xraLW\n"
106+
"FwrW7TG1yxI59W6Sa4XynscGa7uJ7adf7FYSRv06dNHSMTAdWBklM/8R6jpSM7H7\n"
107+
"03WNH142pTXgEVpKLZdYLD1iPDKvg2mpGjIbtwIDAQABAoIBAQCMhO9GqUpYia2d\n"
108+
"VyOhOcPX1dTzRMuHPwDN0aFvIwo2zB3UvkQxInkiA7hldWJz44W3VEFR5PDEyht8\n"
109+
"Tzgy6SVUCLOqUfEpwag8bYOXPxiWQRY6Mc8pf/FyZrLgb3PilFznoAcru0QEn9VB\n"
110+
"oTlCZ4OalSE5NlQIFGemgZhvmTPmcm4OwPW2diBjLtb3AA8eaaw8okWZwr8g4Bcd\n"
111+
"el5KX6pZpDRpGQueh3iKaKxYWbxLYK+c30gKWD65tsAqKyVg2Tm1R2c+kFXgizZt\n"
112+
"EexD95SGMjSkGg3R05sKv6m71iJhlOzVQ4ZCKm18Kqa7wZuZ4SIehVmKIV0gaupz\n"
113+
"gjyr7+NBAoGBAOGjjGI3nxJTZY3O+KeaQo/jqrKowqZxzMOsCgAvW56xDuAvx9TJ\n"
114+
"m4428NGubMl/0RwX6TnxJDm6oe+tnOxLIgE/VnsQLiNzQuFJxrs5JYctdGc4uvk2\n"
115+
"KuXDr7tPEYlU/7OLRReov9emydIXJnsGejkIPllUj+DGNjNFqtXh2VoHAoGBAMNv\n"
116+
"eSgJSkcM6AUaDuUKaXBL2nkKHNoTtRQ0eCEUds6arKyMo0mSP753FNEuOWToVz1O\n"
117+
"oaddSFw81J9t+Xd6XSRbhMj63bQ9nvFKBA1lJfLu+xe3ts0f+vmp1PguOuUHsgNP\n"
118+
"aAm/gLPSKUpBO46NG6KhUrZ2ej6AEg7SuGXrDITRAoGBAKK7s6m6d81dvGZ0GT23\n"
119+
"sb3Y8ul7cTdd59JPp77OaQOgqxvhGfxLkxcUZMa1R9xjhMsAK8MQOZIxGk2kJwL8\n"
120+
"hP/lUFfdKYmDvX6CGQQ6iOhfTg6MCb1m5bVkVr9+nSUw2mIBVclkeUftEK2m6Kfd\n"
121+
"2hR774u5wzLXgYuk+TrcckfNAoGBAJ9X8hacjH0lnr8aIe7I8HLoxbZOcnuz+b4B\n"
122+
"kbiW8M8++W6uNCw2G9b1THnJEG6fqRGJXPASdH8P8eQTTIUHtY2BOOCM+dqNK1xc\n"
123+
"FrW9NJXAF+WcmmTgoEaTG9tGBirafV+JjK/1/b+fqJ6sVRzDHDcbBU9ThhQTY6XG\n"
124+
"VSZz4H8hAoGBAMeQQjiUlKBnpGt1oTgKDZo58b7ui61yftg+dEAwIKs6eb5X20vZ\n"
125+
"Ca4v/zg06k9lKTzyspQjJZuzpMjFUvDK4ReamEvmwQTIc+oYVJm9Af1HUytzrHJH\n"
126+
"u0/dDt0eYpZpzrFqxlP+0oXxlegD8REMVvwNCy+4isyCvjogDaYRfJqi\n"
127+
"-----END RSA PRIVATE KEY-----";

0 commit comments

Comments
 (0)