first commit
This commit is contained in:
@@ -0,0 +1,25 @@
|
||||
/*
|
||||
* Blink for LOLIN32 ESP32 board
|
||||
*
|
||||
* This sketch can be used to generate an example binary that can be uploaded to ESP32 via OTA.
|
||||
* It needs to be used together with OTA.ino
|
||||
*
|
||||
* Steps to test OTA on ESP32:
|
||||
* 1) Upload this sketch or any other sketch (this one will blink LOLIN32 blue LED).
|
||||
* 2) In the IDE select: Sketch -> Export compiled Binary
|
||||
* 3) Upload the exported binary to a server
|
||||
* 4) Open the related OTA.ino sketch and eventually update the OTA_FILE_LOCATION
|
||||
* 5) Upload the sketch OTA.ino to perform OTA
|
||||
*/
|
||||
|
||||
void setup() {
|
||||
// initialize digital pin 5 as an output.
|
||||
pinMode(5, OUTPUT);
|
||||
}
|
||||
|
||||
void loop() {
|
||||
digitalWrite(5, HIGH);
|
||||
delay(1000);
|
||||
digitalWrite(5, LOW);
|
||||
delay(1000);
|
||||
}
|
||||
Binary file not shown.
@@ -0,0 +1,56 @@
|
||||
/*
|
||||
* Blink for Arduino NANO ESP32 board
|
||||
*
|
||||
* This sketch can be used to generate an example binary that can be uploaded to ESP32 via OTA.
|
||||
* It needs to be used together with OTA.ino
|
||||
*
|
||||
* Steps to test OTA:
|
||||
* 1) Upload this sketch or any other sketch (this one this one lights up the RGB LED with different colours).
|
||||
* 2) In the IDE select: Sketch -> Export compiled Binary
|
||||
* 3) Upload the exported binary to a server
|
||||
* 4) Open the related OTA.ino sketch and eventually update the OTA_FILE_LOCATION
|
||||
* 5) Upload the sketch OTA.ino to perform OTA
|
||||
*/
|
||||
|
||||
void setLed(int blue, int gree, int red) {
|
||||
if (blue == 1) {
|
||||
digitalWrite(LED_BLUE, LOW);
|
||||
}
|
||||
else {
|
||||
digitalWrite(LED_BLUE, HIGH);
|
||||
}
|
||||
|
||||
if (gree == 1) {
|
||||
digitalWrite(LED_GREEN, LOW);
|
||||
}
|
||||
else {
|
||||
digitalWrite(LED_GREEN, HIGH);
|
||||
}
|
||||
|
||||
if (red == 1) {
|
||||
digitalWrite(LED_RED, LOW);
|
||||
}
|
||||
else {
|
||||
digitalWrite(LED_RED, HIGH);
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
void setup()
|
||||
{
|
||||
pinMode(LED_BLUE, OUTPUT);
|
||||
pinMode(LED_GREEN, OUTPUT);
|
||||
pinMode(LED_RED, OUTPUT);
|
||||
}
|
||||
|
||||
void loop()
|
||||
{ // Blue LED on
|
||||
setLed(1, 0, 0);
|
||||
delay(1000);
|
||||
// Green LED on
|
||||
setLed(0, 1, 0);
|
||||
delay(1000);
|
||||
// Red LED on
|
||||
setLed(0, 0, 1);
|
||||
delay(1000);
|
||||
}
|
||||
Binary file not shown.
@@ -0,0 +1,115 @@
|
||||
/*
|
||||
* This example demonstrates how to use to update the firmware using Arduino_ESP_OTA library
|
||||
*
|
||||
* Steps:
|
||||
* 1) Create a sketch for your ESP board and verify
|
||||
* that it both compiles and works.
|
||||
* 2) In the IDE select: Sketch -> Export compiled Binary.
|
||||
* 3) Create an OTA update file utilising the tools 'lzss.py' and 'bin2ota.py' stored in
|
||||
* https://github.com/arduino-libraries/ArduinoIoTCloud/tree/master/extras/tools .
|
||||
* A) ./lzss.py --encode SKETCH.bin SKETCH.lzss
|
||||
* B) ./bin2ota.py ESP SKETCH.lzss SKETCH.ota
|
||||
* 4) Upload the OTA file to a network reachable location, e.g. LOLIN_32_Blink.ino.ota
|
||||
* has been uploaded to: http://downloads.arduino.cc/ota/LOLIN_32_Blink.ino.ota
|
||||
* 5) Verify if a custom ca_cert is needed by default Amazon root CA are used
|
||||
* https://www.amazontrust.com/repository/
|
||||
* 6) Perform an OTA update via steps outlined below.
|
||||
*/
|
||||
|
||||
/******************************************************************************
|
||||
* INCLUDE
|
||||
******************************************************************************/
|
||||
|
||||
#include <Arduino_ESP32_OTA.h>
|
||||
|
||||
#include <WiFi.h>
|
||||
|
||||
#include "arduino_secrets.h"
|
||||
|
||||
#include "root_ca.h"
|
||||
|
||||
/******************************************************************************
|
||||
* CONSTANT
|
||||
******************************************************************************/
|
||||
|
||||
/* Please enter your sensitive data in the Secret tab/arduino_secrets.h */
|
||||
static char const SSID[] = SECRET_SSID; /* your network SSID (name) */
|
||||
static char const PASS[] = SECRET_PASS; /* your network password (use for WPA, or use as key for WEP) */
|
||||
|
||||
|
||||
#if defined(ARDUINO_NANO_ESP32)
|
||||
static char const OTA_FILE_LOCATION[] = "https://downloads.arduino.cc/ota/NANO_ESP32_Blink.ino.ota";
|
||||
#else
|
||||
static char const OTA_FILE_LOCATION[] = "https://downloads.arduino.cc/ota/LOLIN_32_Blink.ino.ota";
|
||||
#endif
|
||||
|
||||
/******************************************************************************
|
||||
* SETUP/LOOP
|
||||
******************************************************************************/
|
||||
|
||||
void setup()
|
||||
{
|
||||
Serial.begin(9600);
|
||||
while (!Serial) {}
|
||||
|
||||
while (WiFi.status() != WL_CONNECTED)
|
||||
{
|
||||
Serial.print ("Attempting to connect to '");
|
||||
Serial.print (SSID);
|
||||
Serial.println("'");
|
||||
WiFi.begin(SSID, PASS);
|
||||
delay(2000);
|
||||
}
|
||||
Serial.print ("You're connected to '");
|
||||
Serial.print (WiFi.SSID());
|
||||
Serial.println("'");
|
||||
|
||||
Arduino_ESP32_OTA ota;
|
||||
Arduino_ESP32_OTA::Error ota_err = Arduino_ESP32_OTA::Error::None;
|
||||
|
||||
/* Configure custom Root CA */
|
||||
ota.setCACert(root_ca);
|
||||
|
||||
Serial.println("Initializing OTA storage");
|
||||
if ((ota_err = ota.begin()) != Arduino_ESP32_OTA::Error::None)
|
||||
{
|
||||
Serial.print ("Arduino_ESP_OTA::begin() failed with error code ");
|
||||
Serial.println((int)ota_err);
|
||||
return;
|
||||
}
|
||||
|
||||
|
||||
Serial.println("Starting download to flash ...");
|
||||
int const ota_download = ota.download(OTA_FILE_LOCATION);
|
||||
if (ota_download <= 0)
|
||||
{
|
||||
Serial.print ("Arduino_ESP_OTA::download failed with error code ");
|
||||
Serial.println(ota_download);
|
||||
return;
|
||||
}
|
||||
Serial.print (ota_download);
|
||||
Serial.println(" bytes stored.");
|
||||
|
||||
|
||||
Serial.println("Verify update integrity and apply ...");
|
||||
if ((ota_err = ota.update()) != Arduino_ESP32_OTA::Error::None)
|
||||
{
|
||||
Serial.print ("ota.update() failed with error code ");
|
||||
Serial.println((int)ota_err);
|
||||
return;
|
||||
}
|
||||
|
||||
Serial.println("Performing a reset after which the bootloader will start the new firmware.");
|
||||
#if defined(ARDUINO_NANO_ESP32)
|
||||
Serial.println("Hint: Arduino NANO ESP32 will blink Red Green and Blue.");
|
||||
#else
|
||||
Serial.println("Hint: LOLIN32 will blink Blue.");
|
||||
#endif
|
||||
delay(1000); /* Make sure the serial message gets out before the reset. */
|
||||
ota.reset();
|
||||
}
|
||||
|
||||
void loop()
|
||||
{
|
||||
|
||||
}
|
||||
@@ -0,0 +1,2 @@
|
||||
#define SECRET_SSID ""
|
||||
#define SECRET_PASS ""
|
||||
@@ -0,0 +1,88 @@
|
||||
const char* root_ca = \
|
||||
/* Baltimore CyberTrust Root */
|
||||
"-----BEGIN CERTIFICATE-----\n" \
|
||||
"MIIDdzCCAl+gAwIBAgIEAgAAuTANBgkqhkiG9w0BAQUFADBaMQswCQYDVQQGEwJJRTESMBAGA1UE\n" \
|
||||
"ChMJQmFsdGltb3JlMRMwEQYDVQQLEwpDeWJlclRydXN0MSIwIAYDVQQDExlCYWx0aW1vcmUgQ3li\n" \
|
||||
"ZXJUcnVzdCBSb290MB4XDTAwMDUxMjE4NDYwMFoXDTI1MDUxMjIzNTkwMFowWjELMAkGA1UEBhMC\n" \
|
||||
"SUUxEjAQBgNVBAoTCUJhbHRpbW9yZTETMBEGA1UECxMKQ3liZXJUcnVzdDEiMCAGA1UEAxMZQmFs\n" \
|
||||
"dGltb3JlIEN5YmVyVHJ1c3QgUm9vdDCCASIwDQYJKoZIhvcNAQEBBQADggEPADCCAQoCggEBAKME\n" \
|
||||
"uyKrmD1X6CZymrV51Cni4eiVgLGw41uOKymaZN+hXe2wCQVt2yguzmKiYv60iNoS6zjrIZ3AQSsB\n" \
|
||||
"UnuId9Mcj8e6uYi1agnnc+gRQKfRzMpijS3ljwumUNKoUMMo6vWrJYeKmpYcqWe4PwzV9/lSEy/C\n" \
|
||||
"G9VwcPCPwBLKBsua4dnKM3p31vjsufFoREJIE9LAwqSuXmD+tqYF/LTdB1kC1FkYmGP1pWPgkAx9\n" \
|
||||
"XbIGevOF6uvUA65ehD5f/xXtabz5OTZydc93Uk3zyZAsuT3lySNTPx8kmCFcB5kpvcY67Oduhjpr\n" \
|
||||
"l3RjM71oGDHweI12v/yejl0qhqdNkNwnGjkCAwEAAaNFMEMwHQYDVR0OBBYEFOWdWTCCR1jMrPoI\n" \
|
||||
"VDaGezq1BE3wMBIGA1UdEwEB/wQIMAYBAf8CAQMwDgYDVR0PAQH/BAQDAgEGMA0GCSqGSIb3DQEB\n" \
|
||||
"BQUAA4IBAQCFDF2O5G9RaEIFoN27TyclhAO992T9Ldcw46QQF+vaKSm2eT929hkTI7gQCvlYpNRh\n" \
|
||||
"cL0EYWoSihfVCr3FvDB81ukMJY2GQE/szKN+OMY3EU/t3WgxjkzSswF07r51XgdIGn9w/xZchMB5\n" \
|
||||
"hbgF/X++ZRGjD8ACtPhSNzkE1akxehi/oCr0Epn3o0WC4zxe9Z2etciefC7IpJ5OCBRLbf1wbWsa\n" \
|
||||
"Y71k5h+3zvDyny67G7fyUIhzksLi4xaNmjICq44Y3ekQEe5+NauQrz4wlHrQMz2nZQ/1/I6eYs9H\n" \
|
||||
"RCwBXbsdtTLSR9I4LtD+gdwyah617jzV/OeBHRnDJELqYzmp\n" \
|
||||
"-----END CERTIFICATE-----\n" \
|
||||
/* Amazon Root CA 1 */
|
||||
"-----BEGIN CERTIFICATE-----\n" \
|
||||
"MIIDQTCCAimgAwIBAgITBmyfz5m/jAo54vB4ikPmljZbyjANBgkqhkiG9w0BAQsFADA5MQswCQYD\n" \
|
||||
"VQQGEwJVUzEPMA0GA1UEChMGQW1hem9uMRkwFwYDVQQDExBBbWF6b24gUm9vdCBDQSAxMB4XDTE1\n" \
|
||||
"MDUyNjAwMDAwMFoXDTM4MDExNzAwMDAwMFowOTELMAkGA1UEBhMCVVMxDzANBgNVBAoTBkFtYXpv\n" \
|
||||
"bjEZMBcGA1UEAxMQQW1hem9uIFJvb3QgQ0EgMTCCASIwDQYJKoZIhvcNAQEBBQADggEPADCCAQoC\n" \
|
||||
"ggEBALJ4gHHKeNXjca9HgFB0fW7Y14h29Jlo91ghYPl0hAEvrAIthtOgQ3pOsqTQNroBvo3bSMgH\n" \
|
||||
"FzZM9O6II8c+6zf1tRn4SWiw3te5djgdYZ6k/oI2peVKVuRF4fn9tBb6dNqcmzU5L/qwIFAGbHrQ\n" \
|
||||
"gLKm+a/sRxmPUDgH3KKHOVj4utWp+UhnMJbulHheb4mjUcAwhmahRWa6VOujw5H5SNz/0egwLX0t\n" \
|
||||
"dHA114gk957EWW67c4cX8jJGKLhD+rcdqsq08p8kDi1L93FcXmn/6pUCyziKrlA4b9v7LWIbxcce\n" \
|
||||
"VOF34GfID5yHI9Y/QCB/IIDEgEw+OyQmjgSubJrIqg0CAwEAAaNCMEAwDwYDVR0TAQH/BAUwAwEB\n" \
|
||||
"/zAOBgNVHQ8BAf8EBAMCAYYwHQYDVR0OBBYEFIQYzIU07LwMlJQuCFmcx7IQTgoIMA0GCSqGSIb3\n" \
|
||||
"DQEBCwUAA4IBAQCY8jdaQZChGsV2USggNiMOruYou6r4lK5IpDB/G/wkjUu0yKGX9rbxenDIU5PM\n" \
|
||||
"CCjjmCXPI6T53iHTfIUJrU6adTrCC2qJeHZERxhlbI1Bjjt/msv0tadQ1wUsN+gDS63pYaACbvXy\n" \
|
||||
"8MWy7Vu33PqUXHeeE6V/Uq2V8viTO96LXFvKWlJbYK8U90vvo/ufQJVtMVT8QtPHRh8jrdkPSHCa\n" \
|
||||
"2XV4cdFyQzR1bldZwgJcJmApzyMZFo6IQ6XU5MsI+yMRQ+hDKXJioaldXgjUkK642M4UwtBV8ob2\n" \
|
||||
"xJNDd2ZhwLnoQdeXeGADbkpyrqXRfboQnoZsG4q5WTP468SQvvG5\n" \
|
||||
"-----END CERTIFICATE-----\n" \
|
||||
/* Amazon Root CA 2 */
|
||||
"-----BEGIN CERTIFICATE-----\n" \
|
||||
"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\n" \
|
||||
"-----END CERTIFICATE-----\n" \
|
||||
/* Amazon Root CA 3 */
|
||||
"-----BEGIN CERTIFICATE-----\n" \
|
||||
"MIIBtjCCAVugAwIBAgITBmyf1XSXNmY/Owua2eiedgPySjAKBggqhkjOPQQDAjA5MQswCQYDVQQG\n" \
|
||||
"EwJVUzEPMA0GA1UEChMGQW1hem9uMRkwFwYDVQQDExBBbWF6b24gUm9vdCBDQSAzMB4XDTE1MDUy\n" \
|
||||
"NjAwMDAwMFoXDTQwMDUyNjAwMDAwMFowOTELMAkGA1UEBhMCVVMxDzANBgNVBAoTBkFtYXpvbjEZ\n" \
|
||||
"MBcGA1UEAxMQQW1hem9uIFJvb3QgQ0EgMzBZMBMGByqGSM49AgEGCCqGSM49AwEHA0IABCmXp8ZB\n" \
|
||||
"f8ANm+gBG1bG8lKlui2yEujSLtf6ycXYqm0fc4E7O5hrOXwzpcVOho6AF2hiRVd9RFgdszflZwjr\n" \
|
||||
"Zt6jQjBAMA8GA1UdEwEB/wQFMAMBAf8wDgYDVR0PAQH/BAQDAgGGMB0GA1UdDgQWBBSrttvXBp43\n" \
|
||||
"rDCGB5Fwx5zEGbF4wDAKBggqhkjOPQQDAgNJADBGAiEA4IWSoxe3jfkrBqWTrBqYaGFy+uGh0Psc\n" \
|
||||
"eGCmQ5nFuMQCIQCcAu/xlJyzlvnrxir4tiz+OpAUFteMYyRIHN8wfdVoOw==\n" \
|
||||
"-----END CERTIFICATE-----\n" \
|
||||
/* Amazon Root CA 4 */
|
||||
"-----BEGIN CERTIFICATE-----\n" \
|
||||
"MIIB8jCCAXigAwIBAgITBmyf18G7EEwpQ+Vxe3ssyBrBDjAKBggqhkjOPQQDAzA5MQswCQYDVQQG\n" \
|
||||
"EwJVUzEPMA0GA1UEChMGQW1hem9uMRkwFwYDVQQDExBBbWF6b24gUm9vdCBDQSA0MB4XDTE1MDUy\n" \
|
||||
"NjAwMDAwMFoXDTQwMDUyNjAwMDAwMFowOTELMAkGA1UEBhMCVVMxDzANBgNVBAoTBkFtYXpvbjEZ\n" \
|
||||
"MBcGA1UEAxMQQW1hem9uIFJvb3QgQ0EgNDB2MBAGByqGSM49AgEGBSuBBAAiA2IABNKrijdPo1MN\n" \
|
||||
"/sGKe0uoe0ZLY7Bi9i0b2whxIdIA6GO9mif78DluXeo9pcmBqqNbIJhFXRbb/egQbeOc4OO9X4Ri\n" \
|
||||
"83BkM6DLJC9wuoihKqB1+IGuYgbEgds5bimwHvouXKNCMEAwDwYDVR0TAQH/BAUwAwEB/zAOBgNV\n" \
|
||||
"HQ8BAf8EBAMCAYYwHQYDVR0OBBYEFNPsxzplbszh2naaVvuc84ZtV+WBMAoGCCqGSM49BAMDA2gA\n" \
|
||||
"MGUCMDqLIfG9fhGt0O9Yli/W651+kI0rz2ZVwyzjKKlwCkcO8DdZEv8tmZQoTipPNU0zWgIxAOp1\n" \
|
||||
"AE47xDqUEpHJWEadIRNyp4iciuRMStuW1KyLa2tJElMzrdfkviT8tQp21KW8EA==\n" \
|
||||
"-----END CERTIFICATE-----\n";
|
||||
@@ -0,0 +1,115 @@
|
||||
/*
|
||||
* This example demonstrates how to use to update the firmware using Arduino_ESP_OTA library
|
||||
*
|
||||
* Steps:
|
||||
* 1) Create a sketch for your ESP board and verify
|
||||
* that it both compiles and works.
|
||||
* 2) In the IDE select: Sketch -> Export compiled Binary.
|
||||
* 3) Create an OTA update file utilising the tools 'lzss.py' and 'bin2ota.py' stored in
|
||||
* https://github.com/arduino-libraries/ArduinoIoTCloud/tree/master/extras/tools .
|
||||
* A) ./lzss.py --encode SKETCH.bin SKETCH.lzss
|
||||
* B) ./bin2ota.py ESP SKETCH.lzss SKETCH.ota
|
||||
* 4) Upload the OTA file to a network reachable location, e.g. LOLIN_32_Blink.ino.ota
|
||||
* has been uploaded to: http://downloads.arduino.cc/ota/LOLIN_32_Blink.ino.ota
|
||||
* 5) Verify if a custom ca_cert is needed by default DigiCert root CA are used
|
||||
* https://www.digicert.com/kb/digicert-root-certificates.htm
|
||||
* 6) Perform an OTA update via steps outlined below.
|
||||
*/
|
||||
|
||||
/******************************************************************************
|
||||
* INCLUDE
|
||||
******************************************************************************/
|
||||
|
||||
#include <Arduino_ESP32_OTA.h>
|
||||
|
||||
#include <WiFi.h>
|
||||
|
||||
#include "arduino_secrets.h"
|
||||
|
||||
#include "root_ca.h"
|
||||
|
||||
/******************************************************************************
|
||||
* CONSTANT
|
||||
******************************************************************************/
|
||||
|
||||
/* Please enter your sensitive data in the Secret tab/arduino_secrets.h */
|
||||
static char const SSID[] = SECRET_SSID; /* your network SSID (name) */
|
||||
static char const PASS[] = SECRET_PASS; /* your network password (use for WPA, or use as key for WEP) */
|
||||
|
||||
|
||||
#if defined(ARDUINO_NANO_ESP32)
|
||||
static char const OTA_FILE_LOCATION[] = "https://raw.githubusercontent.com/arduino-libraries/Arduino_ESP32_OTA/main/examples/NANO_ESP32_Blink/NANO_ESP32_Blink.ino.ota";
|
||||
#else
|
||||
static char const OTA_FILE_LOCATION[] = "https://raw.githubusercontent.com/arduino-libraries/Arduino_ESP32_OTA/main/examples/LOLIN_32_Blink/LOLIN_32_Blink.ino.ota";
|
||||
#endif
|
||||
|
||||
/******************************************************************************
|
||||
* SETUP/LOOP
|
||||
******************************************************************************/
|
||||
|
||||
void setup()
|
||||
{
|
||||
Serial.begin(9600);
|
||||
while (!Serial) {}
|
||||
|
||||
while (WiFi.status() != WL_CONNECTED)
|
||||
{
|
||||
Serial.print ("Attempting to connect to '");
|
||||
Serial.print (SSID);
|
||||
Serial.println("'");
|
||||
WiFi.begin(SSID, PASS);
|
||||
delay(2000);
|
||||
}
|
||||
Serial.print ("You're connected to '");
|
||||
Serial.print (WiFi.SSID());
|
||||
Serial.println("'");
|
||||
|
||||
Arduino_ESP32_OTA ota;
|
||||
Arduino_ESP32_OTA::Error ota_err = Arduino_ESP32_OTA::Error::None;
|
||||
|
||||
/* Configure custom Root CA */
|
||||
ota.setCACert(root_ca);
|
||||
|
||||
Serial.println("Initializing OTA storage");
|
||||
if ((ota_err = ota.begin()) != Arduino_ESP32_OTA::Error::None)
|
||||
{
|
||||
Serial.print ("Arduino_ESP_OTA::begin() failed with error code ");
|
||||
Serial.println((int)ota_err);
|
||||
return;
|
||||
}
|
||||
|
||||
|
||||
Serial.println("Starting download to flash ...");
|
||||
int const ota_download = ota.download(OTA_FILE_LOCATION);
|
||||
if (ota_download <= 0)
|
||||
{
|
||||
Serial.print ("Arduino_ESP_OTA::download failed with error code ");
|
||||
Serial.println(ota_download);
|
||||
return;
|
||||
}
|
||||
Serial.print (ota_download);
|
||||
Serial.println(" bytes stored.");
|
||||
|
||||
|
||||
Serial.println("Verify update integrity and apply ...");
|
||||
if ((ota_err = ota.update()) != Arduino_ESP32_OTA::Error::None)
|
||||
{
|
||||
Serial.print ("ota.update() failed with error code ");
|
||||
Serial.println((int)ota_err);
|
||||
return;
|
||||
}
|
||||
|
||||
Serial.println("Performing a reset after which the bootloader will start the new firmware.");
|
||||
#if defined(ARDUINO_NANO_ESP32)
|
||||
Serial.println("Hint: Arduino NANO ESP32 will blink Red Green and Blue.");
|
||||
#else
|
||||
Serial.println("Hint: LOLIN32 will blink Blue.");
|
||||
#endif
|
||||
delay(1000); /* Make sure the serial message gets out before the reset. */
|
||||
ota.reset();
|
||||
}
|
||||
|
||||
void loop()
|
||||
{
|
||||
|
||||
}
|
||||
@@ -0,0 +1,2 @@
|
||||
#define SECRET_SSID ""
|
||||
#define SECRET_PASS ""
|
||||
@@ -0,0 +1,55 @@
|
||||
const char* root_ca = \
|
||||
/*DigiCert TLS Hybrid ECC SHA384 2020 CA1*/
|
||||
"-----BEGIN CERTIFICATE-----\n" \
|
||||
"MIIEFzCCAv+gAwIBAgIQB/LzXIeod6967+lHmTUlvTANBgkqhkiG9w0BAQwFADBh\n" \
|
||||
"MQswCQYDVQQGEwJVUzEVMBMGA1UEChMMRGlnaUNlcnQgSW5jMRkwFwYDVQQLExB3\n" \
|
||||
"d3cuZGlnaWNlcnQuY29tMSAwHgYDVQQDExdEaWdpQ2VydCBHbG9iYWwgUm9vdCBD\n" \
|
||||
"QTAeFw0yMTA0MTQwMDAwMDBaFw0zMTA0MTMyMzU5NTlaMFYxCzAJBgNVBAYTAlVT\n" \
|
||||
"MRUwEwYDVQQKEwxEaWdpQ2VydCBJbmMxMDAuBgNVBAMTJ0RpZ2lDZXJ0IFRMUyBI\n" \
|
||||
"eWJyaWQgRUNDIFNIQTM4NCAyMDIwIENBMTB2MBAGByqGSM49AgEGBSuBBAAiA2IA\n" \
|
||||
"BMEbxppbmNmkKaDp1AS12+umsmxVwP/tmMZJLwYnUcu/cMEFesOxnYeJuq20ExfJ\n" \
|
||||
"qLSDyLiQ0cx0NTY8g3KwtdD3ImnI8YDEe0CPz2iHJlw5ifFNkU3aiYvkA8ND5b8v\n" \
|
||||
"c6OCAYIwggF+MBIGA1UdEwEB/wQIMAYBAf8CAQAwHQYDVR0OBBYEFAq8CCkXjKU5\n" \
|
||||
"bXoOzjPHLrPt+8N6MB8GA1UdIwQYMBaAFAPeUDVW0Uy7ZvCj4hsbw5eyPdFVMA4G\n" \
|
||||
"A1UdDwEB/wQEAwIBhjAdBgNVHSUEFjAUBggrBgEFBQcDAQYIKwYBBQUHAwIwdgYI\n" \
|
||||
"KwYBBQUHAQEEajBoMCQGCCsGAQUFBzABhhhodHRwOi8vb2NzcC5kaWdpY2VydC5j\n" \
|
||||
"b20wQAYIKwYBBQUHMAKGNGh0dHA6Ly9jYWNlcnRzLmRpZ2ljZXJ0LmNvbS9EaWdp\n" \
|
||||
"Q2VydEdsb2JhbFJvb3RDQS5jcnQwQgYDVR0fBDswOTA3oDWgM4YxaHR0cDovL2Ny\n" \
|
||||
"bDMuZGlnaWNlcnQuY29tL0RpZ2lDZXJ0R2xvYmFsUm9vdENBLmNybDA9BgNVHSAE\n" \
|
||||
"NjA0MAsGCWCGSAGG/WwCATAHBgVngQwBATAIBgZngQwBAgEwCAYGZ4EMAQICMAgG\n" \
|
||||
"BmeBDAECAzANBgkqhkiG9w0BAQwFAAOCAQEAR1mBf9QbH7Bx9phdGLqYR5iwfnYr\n" \
|
||||
"6v8ai6wms0KNMeZK6BnQ79oU59cUkqGS8qcuLa/7Hfb7U7CKP/zYFgrpsC62pQsY\n" \
|
||||
"kDUmotr2qLcy/JUjS8ZFucTP5Hzu5sn4kL1y45nDHQsFfGqXbbKrAjbYwrwsAZI/\n" \
|
||||
"BKOLdRHHuSm8EdCGupK8JvllyDfNJvaGEwwEqonleLHBTnm8dqMLUeTF0J5q/hos\n" \
|
||||
"Vq4GNiejcxwIfZMy0MJEGdqN9A57HSgDKwmKdsp33Id6rHtSJlWncg+d0ohP/rEh\n" \
|
||||
"xRqhqjn1VtvChMQ1H3Dau0bwhr9kAMQ+959GG50jBbl9s08PqUU643QwmA==\n" \
|
||||
"-----END CERTIFICATE-----\n"
|
||||
/*DigiCert TLS RSA SHA256 2020 CA1*/
|
||||
"-----BEGIN CERTIFICATE-----\n" \
|
||||
"MIIEvjCCA6agAwIBAgIQBtjZBNVYQ0b2ii+nVCJ+xDANBgkqhkiG9w0BAQsFADBh\n" \
|
||||
"MQswCQYDVQQGEwJVUzEVMBMGA1UEChMMRGlnaUNlcnQgSW5jMRkwFwYDVQQLExB3\n" \
|
||||
"d3cuZGlnaWNlcnQuY29tMSAwHgYDVQQDExdEaWdpQ2VydCBHbG9iYWwgUm9vdCBD\n" \
|
||||
"QTAeFw0yMTA0MTQwMDAwMDBaFw0zMTA0MTMyMzU5NTlaME8xCzAJBgNVBAYTAlVT\n" \
|
||||
"MRUwEwYDVQQKEwxEaWdpQ2VydCBJbmMxKTAnBgNVBAMTIERpZ2lDZXJ0IFRMUyBS\n" \
|
||||
"U0EgU0hBMjU2IDIwMjAgQ0ExMIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKC\n" \
|
||||
"AQEAwUuzZUdwvN1PWNvsnO3DZuUfMRNUrUpmRh8sCuxkB+Uu3Ny5CiDt3+PE0J6a\n" \
|
||||
"qXodgojlEVbbHp9YwlHnLDQNLtKS4VbL8Xlfs7uHyiUDe5pSQWYQYE9XE0nw6Ddn\n" \
|
||||
"g9/n00tnTCJRpt8OmRDtV1F0JuJ9x8piLhMbfyOIJVNvwTRYAIuE//i+p1hJInuW\n" \
|
||||
"raKImxW8oHzf6VGo1bDtN+I2tIJLYrVJmuzHZ9bjPvXj1hJeRPG/cUJ9WIQDgLGB\n" \
|
||||
"Afr5yjK7tI4nhyfFK3TUqNaX3sNk+crOU6JWvHgXjkkDKa77SU+kFbnO8lwZV21r\n" \
|
||||
"eacroicgE7XQPUDTITAHk+qZ9QIDAQABo4IBgjCCAX4wEgYDVR0TAQH/BAgwBgEB\n" \
|
||||
"/wIBADAdBgNVHQ4EFgQUt2ui6qiqhIx56rTaD5iyxZV2ufQwHwYDVR0jBBgwFoAU\n" \
|
||||
"A95QNVbRTLtm8KPiGxvDl7I90VUwDgYDVR0PAQH/BAQDAgGGMB0GA1UdJQQWMBQG\n" \
|
||||
"CCsGAQUFBwMBBggrBgEFBQcDAjB2BggrBgEFBQcBAQRqMGgwJAYIKwYBBQUHMAGG\n" \
|
||||
"GGh0dHA6Ly9vY3NwLmRpZ2ljZXJ0LmNvbTBABggrBgEFBQcwAoY0aHR0cDovL2Nh\n" \
|
||||
"Y2VydHMuZGlnaWNlcnQuY29tL0RpZ2lDZXJ0R2xvYmFsUm9vdENBLmNydDBCBgNV\n" \
|
||||
"HR8EOzA5MDegNaAzhjFodHRwOi8vY3JsMy5kaWdpY2VydC5jb20vRGlnaUNlcnRH\n" \
|
||||
"bG9iYWxSb290Q0EuY3JsMD0GA1UdIAQ2MDQwCwYJYIZIAYb9bAIBMAcGBWeBDAEB\n" \
|
||||
"MAgGBmeBDAECATAIBgZngQwBAgIwCAYGZ4EMAQIDMA0GCSqGSIb3DQEBCwUAA4IB\n" \
|
||||
"AQCAMs5eC91uWg0Kr+HWhMvAjvqFcO3aXbMM9yt1QP6FCvrzMXi3cEsaiVi6gL3z\n" \
|
||||
"ax3pfs8LulicWdSQ0/1s/dCYbbdxglvPbQtaCdB73sRD2Cqk3p5BJl+7j5nL3a7h\n" \
|
||||
"qG+fh/50tx8bIKuxT8b1Z11dmzzp/2n3YWzW2fP9NsarA4h20ksudYbj/NhVfSbC\n" \
|
||||
"EXffPgK2fPOre3qGNm+499iTcc+G33Mw+nur7SpZyEKEOxEXGlLzyQ4UfaJbcme6\n" \
|
||||
"ce1XR2bFuAJKZTRei9AqPCCcUZlM51Ke92sRKw2Sfh3oius2FkOH6ipjv3U/697E\n" \
|
||||
"A7sKPPcw7+uvTPyLNhBzPvOk\n" \
|
||||
"-----END CERTIFICATE-----\n";
|
||||
Reference in New Issue
Block a user