mirror of
				https://github.com/esp8266/Arduino.git
				synced 2025-11-03 14:33:37 +03:00 
			
		
		
		
	
		
			
				
	
	
		
			123 lines
		
	
	
		
			5.0 KiB
		
	
	
	
		
			C++
		
	
	
	
	
	
			
		
		
	
	
			123 lines
		
	
	
		
			5.0 KiB
		
	
	
	
		
			C++
		
	
	
	
	
	
/*
 | 
						|
  SecureBearSSLUpdater - SSL encrypted, password-protected firmware update
 | 
						|
 | 
						|
  This example starts a HTTPS server on the ESP8266 to allow firmware updates
 | 
						|
  to be performed.  All communication, including the username and password,
 | 
						|
  is encrypted via SSL.  Be sure to update the SSID and PASSWORD before running
 | 
						|
  to allow connection to your WiFi network.
 | 
						|
 | 
						|
  To upload through terminal you can use:
 | 
						|
  curl -u admin:admin -F "image=@firmware.bin" esp8266-webupdate.local/firmware
 | 
						|
 | 
						|
  Adapted by Earle F. Philhower, III, from the SecureWebUpdater.ino example.
 | 
						|
  This example is released into the public domain.
 | 
						|
*/
 | 
						|
 | 
						|
#include <ESP8266WiFi.h>
 | 
						|
#include <WiFiClient.h>
 | 
						|
#include <ESP8266WebServerSecure.h>
 | 
						|
#include <ESP8266mDNS.h>
 | 
						|
#include <ESP8266HTTPUpdateServer.h>
 | 
						|
 | 
						|
#ifndef STASSID
 | 
						|
#define STASSID "your-ssid"
 | 
						|
#define STAPSK "your-password"
 | 
						|
#endif
 | 
						|
 | 
						|
const char* host = "esp8266-webupdate";
 | 
						|
const char* update_path = "/firmware";
 | 
						|
const char* update_username = "admin";
 | 
						|
const char* update_password = "admin";
 | 
						|
const char* ssid = STASSID;
 | 
						|
const char* password = STAPSK;
 | 
						|
 | 
						|
ESP8266WebServerSecure httpServer(443);
 | 
						|
ESP8266HTTPUpdateServerSecure httpUpdater;
 | 
						|
 | 
						|
static const char serverCert[] PROGMEM = R"EOF(
 | 
						|
-----BEGIN CERTIFICATE-----
 | 
						|
MIIDSzCCAjMCCQD2ahcfZAwXxDANBgkqhkiG9w0BAQsFADCBiTELMAkGA1UEBhMC
 | 
						|
VVMxEzARBgNVBAgMCkNhbGlmb3JuaWExFjAUBgNVBAcMDU9yYW5nZSBDb3VudHkx
 | 
						|
EDAOBgNVBAoMB1ByaXZhZG8xGjAYBgNVBAMMEXNlcnZlci56bGFiZWwuY29tMR8w
 | 
						|
HQYJKoZIhvcNAQkBFhBlYXJsZUB6bGFiZWwuY29tMB4XDTE4MDMwNjA1NDg0NFoX
 | 
						|
DTE5MDMwNjA1NDg0NFowRTELMAkGA1UEBhMCQVUxEzARBgNVBAgMClNvbWUtU3Rh
 | 
						|
dGUxITAfBgNVBAoMGEludGVybmV0IFdpZGdpdHMgUHR5IEx0ZDCCASIwDQYJKoZI
 | 
						|
hvcNAQEBBQADggEPADCCAQoCggEBAPVKBwbZ+KDSl40YCDkP6y8Sv4iNGvEOZg8Y
 | 
						|
X7sGvf/xZH7UiCBWPFIRpNmDSaZ3yjsmFqm6sLiYSGSdrBCFqdt9NTp2r7hga6Sj
 | 
						|
oASSZY4B9pf+GblDy5m10KDx90BFKXdPMCLT+o76Nx9PpCvw13A848wHNG3bpBgI
 | 
						|
t+w/vJCX3bkRn8yEYAU6GdMbYe7v446hX3kY5UmgeJFr9xz1kq6AzYrMt/UHhNzO
 | 
						|
S+QckJaY0OGWvmTNspY3xCbbFtIDkCdBS8CZAw+itnofvnWWKQEXlt6otPh5njwy
 | 
						|
+O1t/Q+Z7OMDYQaH02IQx3188/kW3FzOY32knER1uzjmRO+jhA8CAwEAATANBgkq
 | 
						|
hkiG9w0BAQsFAAOCAQEAnDrROGRETB0woIcI1+acY1yRq4yAcH2/hdq2MoM+DCyM
 | 
						|
E8CJaOznGR9ND0ImWpTZqomHOUkOBpvu7u315blQZcLbL1LfHJGRTCHVhvVrcyEb
 | 
						|
fWTnRtAQdlirUm/obwXIitoz64VSbIVzcqqfg9C6ZREB9JbEX98/9Wp2gVY+31oC
 | 
						|
JfUvYadSYxh3nblvA4OL+iEZiW8NE3hbW6WPXxvS7Euge0uWMPc4uEcnsE0ZVG3m
 | 
						|
+TGimzSdeWDvGBRWZHXczC2zD4aoE5vrl+GD2i++c6yjL/otHfYyUpzUfbI2hMAA
 | 
						|
5tAF1D5vAAwA8nfPysumlLsIjohJZo4lgnhB++AlOg==
 | 
						|
-----END CERTIFICATE-----
 | 
						|
)EOF";
 | 
						|
 | 
						|
static const char serverKey[] PROGMEM = R"EOF(
 | 
						|
-----BEGIN RSA PRIVATE KEY-----
 | 
						|
MIIEpQIBAAKCAQEA9UoHBtn4oNKXjRgIOQ/rLxK/iI0a8Q5mDxhfuwa9//FkftSI
 | 
						|
IFY8UhGk2YNJpnfKOyYWqbqwuJhIZJ2sEIWp2301OnavuGBrpKOgBJJljgH2l/4Z
 | 
						|
uUPLmbXQoPH3QEUpd08wItP6jvo3H0+kK/DXcDzjzAc0bdukGAi37D+8kJfduRGf
 | 
						|
zIRgBToZ0xth7u/jjqFfeRjlSaB4kWv3HPWSroDNisy39QeE3M5L5ByQlpjQ4Za+
 | 
						|
ZM2yljfEJtsW0gOQJ0FLwJkDD6K2eh++dZYpAReW3qi0+HmePDL47W39D5ns4wNh
 | 
						|
BofTYhDHfXzz+RbcXM5jfaScRHW7OOZE76OEDwIDAQABAoIBAQDKov5NFbNFQNR8
 | 
						|
djcM1O7Is6dRaqiwLeH4ZH1pZ3d9QnFwKanPdQ5eCj9yhfhJMrr5xEyCqT0nMn7T
 | 
						|
yEIGYDXjontfsf8WxWkH2TjvrfWBrHOIOx4LJEvFzyLsYxiMmtZXvy6YByD+Dw2M
 | 
						|
q2GH/24rRdI2klkozIOyazluTXU8yOsSGxHr/aOa9/sZISgLmaGOOuKI/3Zqjdhr
 | 
						|
eHeSqoQFt3xXa8jw01YubQUDw/4cv9rk2ytTdAoQUimiKtgtjsggpP1LTq4xcuqN
 | 
						|
d4jWhTcnorWpbD2cVLxrEbnSR3VuBCJEZv5axg5ZPxLEnlcId8vMtvTRb5nzzszn
 | 
						|
geYUWDPhAoGBAPyKVNqqwQl44oIeiuRM2FYenMt4voVaz3ExJX2JysrG0jtCPv+Y
 | 
						|
84R6Cv3nfITz3EZDWp5sW3OwoGr77lF7Tv9tD6BptEmgBeuca3SHIdhG2MR+tLyx
 | 
						|
/tkIAarxQcTGsZaSqra3gXOJCMz9h2P5dxpdU+0yeMmOEnAqgQ8qtNBfAoGBAPim
 | 
						|
RAtnrd0WSlCgqVGYFCvDh1kD5QTNbZc+1PcBHbVV45EmJ2fLXnlDeplIZJdYxmzu
 | 
						|
DMOxZBYgfeLY9exje00eZJNSj/csjJQqiRftrbvYY7m5njX1kM5K8x4HlynQTDkg
 | 
						|
rtKO0YZJxxmjRTbFGMegh1SLlFLRIMtehNhOgipRAoGBAPnEEpJGCS9GGLfaX0HW
 | 
						|
YqwiEK8Il12q57mqgsq7ag7NPwWOymHesxHV5mMh/Dw+NyBi4xAGWRh9mtrUmeqK
 | 
						|
iyICik773Gxo0RIqnPgd4jJWN3N3YWeynzulOIkJnSNx5BforOCTc3uCD2s2YB5X
 | 
						|
jx1LKoNQxLeLRN8cmpIWicf/AoGBANjRSsZTKwV9WWIDJoHyxav/vPb+8WYFp8lZ
 | 
						|
zaRxQbGM6nn4NiZI7OF62N3uhWB/1c7IqTK/bVHqFTuJCrCNcsgld3gLZ2QWYaMV
 | 
						|
kCPgaj1BjHw4AmB0+EcajfKilcqtSroJ6MfMJ6IclVOizkjbByeTsE4lxDmPCDSt
 | 
						|
/9MKanBxAoGAY9xo741Pn9WUxDyRplww606ccdNf/ksHWNc/Y2B5SPwxxSnIq8nO
 | 
						|
j01SmsCUYVFAgZVOTiiycakjYLzxlc6p8BxSVqy6LlJqn95N8OXoQ+bkwUux/ekg
 | 
						|
gz5JWYhbD6c38khSzJb0pNXCo3EuYAVa36kDM96k1BtWuhRS10Q1VXk=
 | 
						|
-----END RSA PRIVATE KEY-----
 | 
						|
)EOF";
 | 
						|
 | 
						|
 | 
						|
void setup() {
 | 
						|
 | 
						|
  Serial.begin(115200);
 | 
						|
  Serial.println();
 | 
						|
  Serial.println("Booting Sketch...");
 | 
						|
  WiFi.mode(WIFI_AP_STA);
 | 
						|
  WiFi.begin(ssid, password);
 | 
						|
 | 
						|
  while (WiFi.waitForConnectResult() != WL_CONNECTED) {
 | 
						|
    WiFi.begin(ssid, password);
 | 
						|
    Serial.println("WiFi failed, retrying.");
 | 
						|
  }
 | 
						|
 | 
						|
  configTime(3 * 3600, 0, "pool.ntp.org", "time.nist.gov");
 | 
						|
 | 
						|
  MDNS.begin(host);
 | 
						|
 | 
						|
  httpServer.getServer().setRSACert(new BearSSL::X509List(serverCert), new BearSSL::PrivateKey(serverKey));
 | 
						|
  httpUpdater.setup(&httpServer, update_path, update_username, update_password);
 | 
						|
  httpServer.begin();
 | 
						|
 | 
						|
  MDNS.addService("https", "tcp", 443);
 | 
						|
  Serial.printf("BearSSLUpdateServer ready!\nOpen https://%s.local%s in "
 | 
						|
                "your browser and login with username '%s' and password "
 | 
						|
                "'%s'\n",
 | 
						|
                host, update_path, update_username, update_password);
 | 
						|
}
 | 
						|
 | 
						|
void loop() {
 | 
						|
  httpServer.handleClient();
 | 
						|
  MDNS.update();
 | 
						|
}
 |