/* HTTP over TLS (HTTPS) example sketch This example demonstrates how to use WiFiClientSecure class to connect to a TLS server. This example verifies server certificate using the root CA certificate. We fetch and display the status of esp8266/Arduino project continuous integration build. Created by Ivan Grokhotkov, 2017. This example is in public domain. */ #define USING_AXTLS #include #include // force use of AxTLS (BearSSL is now default) #include using namespace axTLS; #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; // Root certificate used by api.github.com. // Defined in "CACert" tab. extern const unsigned char caCert[] PROGMEM; extern const unsigned int caCertLen; #pragma GCC diagnostic push #pragma GCC diagnostic ignored "-Wdeprecated-declarations" WiFiClientSecure client; #pragma GCC diagnostic pop 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()); // Synchronize time useing SNTP. This is necessary to verify that // the TLS certificates offered by the server are currently valid. Serial.print("Setting time using SNTP"); configTime(8 * 3600, 0, "pool.ntp.org", "time.nist.gov"); 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)); // Load root certificate in DER format into WiFiClientSecure object bool res = client.setCACert_P(caCert, caCertLen); if (!res) { Serial.println("Failed to load root CA certificate!"); while (true) { yield(); } } } void loop() { // Connect to remote server Serial.print("connecting to "); Serial.println(host); if (!client.connect(host, httpsPort)) { Serial.println("connection failed"); return; } // Verify validity of server's certificate if (client.verifyCertChain(host)) { Serial.println("Server certificate verified"); } else { Serial.println("ERROR: certificate verification 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(); static int repeat = 0; if (++repeat == 3) { Serial.println("Done"); while (true) { delay(1000); } } delay(10000); }