mirror of
				https://github.com/esp8266/Arduino.git
				synced 2025-10-30 04:26:50 +03:00 
			
		
		
		
	In the HTTPS example we were using a fingerprint which changes almost daily as the github.com certificates are regenerated. Replace this with a trust anchor based on the ultimate root CA that github.com uses to sign their certificates. Assuming they don't change CAs, this certificate should be good until 2030+ Fixes #7489
		
			
				
	
	
		
			133 lines
		
	
	
		
			4.0 KiB
		
	
	
	
		
			C++
		
	
	
	
	
	
			
		
		
	
	
			133 lines
		
	
	
		
			4.0 KiB
		
	
	
	
		
			C++
		
	
	
	
	
	
| /*
 | |
|     HTTP over TLS (HTTPS) example sketch
 | |
| 
 | |
|     This example demonstrates how to use
 | |
|     WiFiClientSecure class to access HTTPS API.
 | |
|     We fetch and display the status of
 | |
|     esp8266/Arduino project continuous integration
 | |
|     build.
 | |
| 
 | |
|     Created by Ivan Grokhotkov, 2015.
 | |
|     This example is in public domain.
 | |
| */
 | |
| 
 | |
| #include <ESP8266WiFi.h>
 | |
| #include <WiFiClientSecure.h>
 | |
| 
 | |
| #ifndef STASSID
 | |
| #define STASSID "your-ssid"
 | |
| #define STAPSK  "your-password"
 | |
| #endif
 | |
| 
 | |
| const char* ssid = STASSID;
 | |
| const char* password = STAPSK;
 | |
| 
 | |
| const char* host = "api.github.com";
 | |
| const int httpsPort = 443;
 | |
| 
 | |
| // DigiCert High Assurance EV Root CA
 | |
| const char trustRoot[] PROGMEM = R"EOF(
 | |
| -----BEGIN CERTIFICATE-----
 | |
| MIIDxTCCAq2gAwIBAgIQAqxcJmoLQJuPC3nyrkYldzANBgkqhkiG9w0BAQUFADBs
 | |
| MQswCQYDVQQGEwJVUzEVMBMGA1UEChMMRGlnaUNlcnQgSW5jMRkwFwYDVQQLExB3
 | |
| d3cuZGlnaWNlcnQuY29tMSswKQYDVQQDEyJEaWdpQ2VydCBIaWdoIEFzc3VyYW5j
 | |
| ZSBFViBSb290IENBMB4XDTA2MTExMDAwMDAwMFoXDTMxMTExMDAwMDAwMFowbDEL
 | |
| MAkGA1UEBhMCVVMxFTATBgNVBAoTDERpZ2lDZXJ0IEluYzEZMBcGA1UECxMQd3d3
 | |
| LmRpZ2ljZXJ0LmNvbTErMCkGA1UEAxMiRGlnaUNlcnQgSGlnaCBBc3N1cmFuY2Ug
 | |
| RVYgUm9vdCBDQTCCASIwDQYJKoZIhvcNAQEBBQADggEPADCCAQoCggEBAMbM5XPm
 | |
| +9S75S0tMqbf5YE/yc0lSbZxKsPVlDRnogocsF9ppkCxxLeyj9CYpKlBWTrT3JTW
 | |
| PNt0OKRKzE0lgvdKpVMSOO7zSW1xkX5jtqumX8OkhPhPYlG++MXs2ziS4wblCJEM
 | |
| xChBVfvLWokVfnHoNb9Ncgk9vjo4UFt3MRuNs8ckRZqnrG0AFFoEt7oT61EKmEFB
 | |
| Ik5lYYeBQVCmeVyJ3hlKV9Uu5l0cUyx+mM0aBhakaHPQNAQTXKFx01p8VdteZOE3
 | |
| hzBWBOURtCmAEvF5OYiiAhF8J2a3iLd48soKqDirCmTCv2ZdlYTBoSUeh10aUAsg
 | |
| EsxBu24LUTi4S8sCAwEAAaNjMGEwDgYDVR0PAQH/BAQDAgGGMA8GA1UdEwEB/wQF
 | |
| MAMBAf8wHQYDVR0OBBYEFLE+w2kD+L9HAdSYJhoIAu9jZCvDMB8GA1UdIwQYMBaA
 | |
| FLE+w2kD+L9HAdSYJhoIAu9jZCvDMA0GCSqGSIb3DQEBBQUAA4IBAQAcGgaX3Nec
 | |
| nzyIZgYIVyHbIUf4KmeqvxgydkAQV8GK83rZEWWONfqe/EW1ntlMMUu4kehDLI6z
 | |
| eM7b41N5cdblIZQB2lWHmiRk9opmzN6cN82oNLFpmyPInngiK3BD41VHMWEZ71jF
 | |
| hS9OMPagMRYjyOfiZRYzy78aG6A9+MpeizGLYAiJLQwGXFK3xPkKmNEVX58Svnw2
 | |
| Yzi9RKR/5CYrCsSXaQ3pjOLAEFe4yHYSkVXySGnYvCoCWw9E1CAx2/S6cCZdkGCe
 | |
| vEsXCS+0yx5DaMkHJ8HSXPfqIbloEpw8nL+e/IBcm2PN7EeqJSdnoDfzAIJ9VNep
 | |
| +OkuE6N36B9K
 | |
| -----END CERTIFICATE-----
 | |
| )EOF";
 | |
| X509List cert(trustRoot);
 | |
| 
 | |
| void setup() {
 | |
|   Serial.begin(115200);
 | |
|   Serial.println();
 | |
|   Serial.print("Connecting to ");
 | |
|   Serial.println(ssid);
 | |
|   WiFi.mode(WIFI_STA);
 | |
|   WiFi.begin(ssid, password);
 | |
|   while (WiFi.status() != WL_CONNECTED) {
 | |
|     delay(500);
 | |
|     Serial.print(".");
 | |
|   }
 | |
|   Serial.println("");
 | |
|   Serial.println("WiFi connected");
 | |
|   Serial.println("IP address: ");
 | |
|   Serial.println(WiFi.localIP());
 | |
| 
 | |
|   // Set time via NTP, as required for x.509 validation
 | |
|   configTime(3 * 3600, 0, "pool.ntp.org", "time.nist.gov");
 | |
| 
 | |
|   Serial.print("Waiting for NTP time sync: ");
 | |
|   time_t now = time(nullptr);
 | |
|   while (now < 8 * 3600 * 2) {
 | |
|     delay(500);
 | |
|     Serial.print(".");
 | |
|     now = time(nullptr);
 | |
|   }
 | |
|   Serial.println("");
 | |
|   struct tm timeinfo;
 | |
|   gmtime_r(&now, &timeinfo);
 | |
|   Serial.print("Current time: ");
 | |
|   Serial.print(asctime(&timeinfo));
 | |
| 
 | |
|   // Use WiFiClientSecure class to create TLS connection
 | |
|   WiFiClientSecure client;
 | |
|   Serial.print("Connecting to ");
 | |
|   Serial.println(host);
 | |
| 
 | |
|   Serial.printf("Using certificate: %s\n", trustRoot);
 | |
|   client.setTrustAnchors(&cert);
 | |
| 
 | |
|   if (!client.connect(host, httpsPort)) {
 | |
|     Serial.println("Connection failed");
 | |
|     return;
 | |
|   }
 | |
| 
 | |
|   String url = "/repos/esp8266/Arduino/commits/master/status";
 | |
|   Serial.print("Requesting URL: ");
 | |
|   Serial.println(url);
 | |
| 
 | |
|   client.print(String("GET ") + url + " HTTP/1.1\r\n" +
 | |
|                "Host: " + host + "\r\n" +
 | |
|                "User-Agent: BuildFailureDetectorESP8266\r\n" +
 | |
|                "Connection: close\r\n\r\n");
 | |
| 
 | |
|   Serial.println("Request sent");
 | |
|   while (client.connected()) {
 | |
|     String line = client.readStringUntil('\n');
 | |
|     if (line == "\r") {
 | |
|       Serial.println("Headers received");
 | |
|       break;
 | |
|     }
 | |
|   }
 | |
|   String line = client.readStringUntil('\n');
 | |
|   if (line.startsWith("{\"state\":\"success\"")) {
 | |
|     Serial.println("esp8266/Arduino CI successfull!");
 | |
|   } else {
 | |
|     Serial.println("esp8266/Arduino CI has failed");
 | |
|   }
 | |
|   Serial.println("Reply was:");
 | |
|   Serial.println("==========");
 | |
|   Serial.println(line);
 | |
|   Serial.println("==========");
 | |
|   Serial.println("Closing connection");
 | |
| }
 | |
| 
 | |
| void loop() {
 | |
| }
 |