Skip to content

Commit 05f05d0

Browse files
authored
ESP8266HTTPClient - prefer trust anchors to fingerprinting in examples (#9181)
1 parent bd136f1 commit 05f05d0

File tree

5 files changed

+207
-24
lines changed

5 files changed

+207
-24
lines changed

libraries/ESP8266HTTPClient/examples/BasicHttpsClient/BasicHttpsClient.ino

+8-3
Original file line numberDiff line numberDiff line change
@@ -39,10 +39,15 @@ void loop() {
3939
// wait for WiFi connection
4040
if ((WiFiMulti.run() == WL_CONNECTED)) {
4141

42-
std::unique_ptr<BearSSL::WiFiClientSecure> client(new BearSSL::WiFiClientSecure);
42+
auto certs = std::make_unique<BearSSL::X509List>(cert_Cloudflare_Inc_ECC_CA_3);
43+
auto client = std::make_unique<BearSSL::WiFiClientSecure>();
4344

44-
client->setFingerprint(fingerprint_sni_cloudflaressl_com);
45-
// Or, if you happy to ignore the SSL certificate, then use the following line instead:
45+
client->setTrustAnchors(certs.get());
46+
// Or, if you prefer to use fingerprinting:
47+
// client->setFingerprint(fingerprint_w3_org);
48+
// This is *not* a recommended option, as fingerprint changes with the host certificate
49+
50+
// Or, if you are *absolutely* sure it is ok to ignore the SSL certificate:
4651
// client->setInsecure();
4752

4853
HTTPClient https;

libraries/ESP8266HTTPClient/examples/BasicHttpsClient/certs.h

+8-8
Original file line numberDiff line numberDiff line change
@@ -1,7 +1,7 @@
11

22
// this file is autogenerated - any modification will be overwritten
33
// unused symbols will not be linked in the final binary
4-
// generated on 2023-03-20 23:02:42
4+
// generated on 2024-07-30 22:46:21
55
// by ['../../../../tools/cert.py', '-s', 'jigsaw.w3.org', '-n', 'jigsaw']
66

77
#pragma once
@@ -12,14 +12,14 @@
1212
const char* jigsaw_host = "jigsaw.w3.org";
1313
const uint16_t jigsaw_port = 443;
1414

15-
// CN: sni.cloudflaressl.com => name: sni_cloudflaressl_com
16-
// not valid before: 2023-02-14 00:00:00
17-
// not valid after: 2024-02-14 23:59:59
18-
const char fingerprint_sni_cloudflaressl_com [] PROGMEM = "70:7c:82:07:f3:58:18:87:25:42:31:83:45:86:bd:17:86:71:4e:1f";
19-
const char pubkey_sni_cloudflaressl_com [] PROGMEM = R"PUBKEY(
15+
// CN: w3.org => name: w3_org
16+
// not valid before: 2024-01-26 00:00:00
17+
// not valid after: 2024-12-31 23:59:59
18+
const char fingerprint_w3_org [] PROGMEM = "07:f2:bd:4c:d0:ce:58:da:13:03:9d:a9:0d:df:e9:5b:60:5f:7f:a5";
19+
const char pubkey_w3_org [] PROGMEM = R"PUBKEY(
2020
-----BEGIN PUBLIC KEY-----
21-
MFkwEwYHKoZIzj0CAQYIKoZIzj0DAQcDQgAE/NU/7vfdymScyhfx81ieO8XiwGqq
22-
TU4tjeWzSosWSpmQwnGmRqiU2h2wyT9uYxRme6uQ0yLedf4nz9ks+4OxtA==
21+
MFkwEwYHKoZIzj0CAQYIKoZIzj0DAQcDQgAEPwx1EbG8lugJ74owfhQChFkoxc9R
22+
EZ9D7g5JfO7TUZH+nxWxCT7njoKgD9yvJZYTy/oijTdhB7o7knUsBLRj8A==
2323
-----END PUBLIC KEY-----
2424
)PUBKEY";
2525

libraries/ESP8266HTTPClient/examples/StreamHttpsClient/StreamHttpsClient.ino

+16-13
Original file line numberDiff line numberDiff line change
@@ -1,17 +1,16 @@
11
/**
2-
StreamHTTPClient.ino
3-
4-
Created on: 24.05.2015
2+
Based on StreamHTTPClient.ino
53
64
*/
75

86
#include <Arduino.h>
97

108
#include <ESP8266WiFi.h>
119
#include <ESP8266WiFiMulti.h>
12-
1310
#include <ESP8266HTTPClient.h>
1411

12+
#include "certs.h"
13+
1514
ESP8266WiFiMulti WiFiMulti;
1615

1716
void setup() {
@@ -37,23 +36,27 @@ void loop() {
3736
// wait for WiFi connection
3837
if ((WiFiMulti.run() == WL_CONNECTED)) {
3938

40-
std::unique_ptr<BearSSL::WiFiClientSecure> client(new BearSSL::WiFiClientSecure);
39+
auto certs = std::make_unique<BearSSL::X509List>(cert_Amazon_RSA_2048_M02);
40+
auto client = std::make_unique<BearSSL::WiFiClientSecure>();
41+
42+
client->setTrustAnchors(certs.get());
43+
// Or, if you prefer to use fingerprinting:
44+
// client->setFingerprint(fingerprint___mbed_com);
45+
// This is *not* a recommended option, as fingerprint changes with the host certificate
4146

42-
bool mfln = client->probeMaxFragmentLength("tls.mbed.org", 443, 1024);
43-
Serial.printf("\nConnecting to https://tls.mbed.org\n");
47+
// Or, if you are *absolutely* sure it is ok to ignore the SSL certificate:
48+
// client->setInsecure();
49+
50+
bool mfln = client->probeMaxFragmentLength(mbed_host, mbed_port, 1024);
51+
Serial.printf("\nConnecting to %s:%hu...\n", mbed_host, mbed_port);
4452
Serial.printf("Maximum fragment Length negotiation supported: %s\n", mfln ? "yes" : "no");
4553
if (mfln) { client->setBufferSizes(1024, 1024); }
4654

4755
Serial.print("[HTTPS] begin...\n");
4856

49-
// configure server and url
50-
const uint8_t fingerprint[20] = { 0x15, 0x77, 0xdc, 0x04, 0x7c, 0x00, 0xf8, 0x70, 0x09, 0x34, 0x24, 0xf4, 0xd3, 0xa1, 0x7a, 0x6c, 0x1e, 0xa3, 0xe0, 0x2a };
51-
52-
client->setFingerprint(fingerprint);
53-
5457
HTTPClient https;
5558

56-
if (https.begin(*client, "https://tls.mbed.org/")) {
59+
if (https.begin(*client, mbed_host, mbed_port)) {
5760

5861
Serial.print("[HTTPS] GET...\n");
5962
// start connection and send HTTP header
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,2 @@
1+
cd ${0%/*} 2>/dev/null
2+
python3 ../../../../tools/cert.py -s tls.mbed.org -n mbed > certs.h
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,173 @@
1+
2+
// this file is autogenerated - any modification will be overwritten
3+
// unused symbols will not be linked in the final binary
4+
// generated on 2024-07-30 22:46:02
5+
// by ['../../../../tools/cert.py', '-s', 'tls.mbed.org', '-n', 'mbed']
6+
7+
#pragma once
8+
9+
////////////////////////////////////////////////////////////
10+
// certificate chain for tls.mbed.org:443
11+
12+
const char* mbed_host = "tls.mbed.org";
13+
const uint16_t mbed_port = 443;
14+
15+
// CN: *.mbed.com => name: __mbed_com
16+
// not valid before: 2023-12-15 00:00:00
17+
// not valid after: 2025-01-12 23:59:59
18+
const char fingerprint___mbed_com [] PROGMEM = "cf:a3:3a:98:de:77:ee:a0:d8:2d:b1:0e:c9:eb:d3:5d:71:5c:4d:1c";
19+
const char pubkey___mbed_com [] PROGMEM = R"PUBKEY(
20+
-----BEGIN PUBLIC KEY-----
21+
MIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEAnte0NyyUAM7CJHORnzqZ
22+
0vYhz9K1wdi0Fkc11gypDgyaEXmLY3m0X+mXayEbhw/Xkn04uQ0/6WyK/pWTeTeu
23+
MPKD1Gr5xjBNELs0GLdRdfZGhUyFkTgQLtDrbEpD8gNO2bfVOiJh/tMZ43NNmJUj
24+
lJftSW3ZivBO5621NC9gbfqAQJZNkMoSV1c9JNIPzZCv4aPR/XuZVeKNWQKzAULf
25+
wRsfz5Ti37EWUQ2BNPUOIYQQvOqI0y4FETIUmA4UhjUmb3/KsOTIUx0HML0MYkxe
26+
SCfSzO8zjJaFujrC82LQvwFfIfRbGCK63GREzT4B5SGUgIgOGe1NSfEBqioRNtig
27+
SwIDAQAB
28+
-----END PUBLIC KEY-----
29+
)PUBKEY";
30+
31+
// http://crt.r2m02.amazontrust.com/r2m02.cer
32+
// CN: Amazon RSA 2048 M02 => name: Amazon_RSA_2048_M02
33+
// not valid before: 2022-08-23 22:25:30
34+
// not valid after: 2030-08-23 22:25:30
35+
const char cert_Amazon_RSA_2048_M02 [] PROGMEM = R"CERT(
36+
-----BEGIN CERTIFICATE-----
37+
MIIEXjCCA0agAwIBAgITB3MSSkvL1E7HtTvq8ZSELToPoTANBgkqhkiG9w0BAQsF
38+
ADA5MQswCQYDVQQGEwJVUzEPMA0GA1UEChMGQW1hem9uMRkwFwYDVQQDExBBbWF6
39+
b24gUm9vdCBDQSAxMB4XDTIyMDgyMzIyMjUzMFoXDTMwMDgyMzIyMjUzMFowPDEL
40+
MAkGA1UEBhMCVVMxDzANBgNVBAoTBkFtYXpvbjEcMBoGA1UEAxMTQW1hem9uIFJT
41+
QSAyMDQ4IE0wMjCCASIwDQYJKoZIhvcNAQEBBQADggEPADCCAQoCggEBALtDGMZa
42+
qHneKei1by6+pUPPLljTB143Si6VpEWPc6mSkFhZb/6qrkZyoHlQLbDYnI2D7hD0
43+
sdzEqfnuAjIsuXQLG3A8TvX6V3oFNBFVe8NlLJHvBseKY88saLwufxkZVwk74g4n
44+
WlNMXzla9Y5F3wwRHwMVH443xGz6UtGSZSqQ94eFx5X7Tlqt8whi8qCaKdZ5rNak
45+
+r9nUThOeClqFd4oXych//Rc7Y0eX1KNWHYSI1Nk31mYgiK3JvH063g+K9tHA63Z
46+
eTgKgndlh+WI+zv7i44HepRZjA1FYwYZ9Vv/9UkC5Yz8/yU65fgjaE+wVHM4e/Yy
47+
C2osrPWE7gJ+dXMCAwEAAaOCAVowggFWMBIGA1UdEwEB/wQIMAYBAf8CAQAwDgYD
48+
VR0PAQH/BAQDAgGGMB0GA1UdJQQWMBQGCCsGAQUFBwMBBggrBgEFBQcDAjAdBgNV
49+
HQ4EFgQUwDFSzVpQw4J8dHHOy+mc+XrrguIwHwYDVR0jBBgwFoAUhBjMhTTsvAyU
50+
lC4IWZzHshBOCggwewYIKwYBBQUHAQEEbzBtMC8GCCsGAQUFBzABhiNodHRwOi8v
51+
b2NzcC5yb290Y2ExLmFtYXpvbnRydXN0LmNvbTA6BggrBgEFBQcwAoYuaHR0cDov
52+
L2NydC5yb290Y2ExLmFtYXpvbnRydXN0LmNvbS9yb290Y2ExLmNlcjA/BgNVHR8E
53+
ODA2MDSgMqAwhi5odHRwOi8vY3JsLnJvb3RjYTEuYW1hem9udHJ1c3QuY29tL3Jv
54+
b3RjYTEuY3JsMBMGA1UdIAQMMAowCAYGZ4EMAQIBMA0GCSqGSIb3DQEBCwUAA4IB
55+
AQAtTi6Fs0Azfi+iwm7jrz+CSxHH+uHl7Law3MQSXVtR8RV53PtR6r/6gNpqlzdo
56+
Zq4FKbADi1v9Bun8RY8D51uedRfjsbeodizeBB8nXmeyD33Ep7VATj4ozcd31YFV
57+
fgRhvTSxNrrTlNpWkUk0m3BMPv8sg381HhA6uEYokE5q9uws/3YkKqRiEz3TsaWm
58+
JqIRZhMbgAfp7O7FUwFIb7UIspogZSKxPIWJpxiPo3TcBambbVtQOcNRWz5qCQdD
59+
slI2yayq0n2TXoHyNCLEH8rpsJRVILFsg0jc7BaFrMnF462+ajSehgj12IidNeRN
60+
4zl+EoNaWdpnWndvSpAEkq2P
61+
-----END CERTIFICATE-----
62+
)CERT";
63+
64+
// http://crt.rootca1.amazontrust.com/rootca1.cer
65+
// CN: Amazon Root CA 1 => name: Amazon_Root_CA_1
66+
// not valid before: 2015-05-25 12:00:00
67+
// not valid after: 2037-12-31 01:00:00
68+
const char cert_Amazon_Root_CA_1 [] PROGMEM = R"CERT(
69+
-----BEGIN CERTIFICATE-----
70+
MIIEkjCCA3qgAwIBAgITBn+USionzfP6wq4rAfkI7rnExjANBgkqhkiG9w0BAQsF
71+
ADCBmDELMAkGA1UEBhMCVVMxEDAOBgNVBAgTB0FyaXpvbmExEzARBgNVBAcTClNj
72+
b3R0c2RhbGUxJTAjBgNVBAoTHFN0YXJmaWVsZCBUZWNobm9sb2dpZXMsIEluYy4x
73+
OzA5BgNVBAMTMlN0YXJmaWVsZCBTZXJ2aWNlcyBSb290IENlcnRpZmljYXRlIEF1
74+
dGhvcml0eSAtIEcyMB4XDTE1MDUyNTEyMDAwMFoXDTM3MTIzMTAxMDAwMFowOTEL
75+
MAkGA1UEBhMCVVMxDzANBgNVBAoTBkFtYXpvbjEZMBcGA1UEAxMQQW1hem9uIFJv
76+
b3QgQ0EgMTCCASIwDQYJKoZIhvcNAQEBBQADggEPADCCAQoCggEBALJ4gHHKeNXj
77+
ca9HgFB0fW7Y14h29Jlo91ghYPl0hAEvrAIthtOgQ3pOsqTQNroBvo3bSMgHFzZM
78+
9O6II8c+6zf1tRn4SWiw3te5djgdYZ6k/oI2peVKVuRF4fn9tBb6dNqcmzU5L/qw
79+
IFAGbHrQgLKm+a/sRxmPUDgH3KKHOVj4utWp+UhnMJbulHheb4mjUcAwhmahRWa6
80+
VOujw5H5SNz/0egwLX0tdHA114gk957EWW67c4cX8jJGKLhD+rcdqsq08p8kDi1L
81+
93FcXmn/6pUCyziKrlA4b9v7LWIbxcceVOF34GfID5yHI9Y/QCB/IIDEgEw+OyQm
82+
jgSubJrIqg0CAwEAAaOCATEwggEtMA8GA1UdEwEB/wQFMAMBAf8wDgYDVR0PAQH/
83+
BAQDAgGGMB0GA1UdDgQWBBSEGMyFNOy8DJSULghZnMeyEE4KCDAfBgNVHSMEGDAW
84+
gBScXwDfqgHXMCs4iKK4bUqc8hGRgzB4BggrBgEFBQcBAQRsMGowLgYIKwYBBQUH
85+
MAGGImh0dHA6Ly9vY3NwLnJvb3RnMi5hbWF6b250cnVzdC5jb20wOAYIKwYBBQUH
86+
MAKGLGh0dHA6Ly9jcnQucm9vdGcyLmFtYXpvbnRydXN0LmNvbS9yb290ZzIuY2Vy
87+
MD0GA1UdHwQ2MDQwMqAwoC6GLGh0dHA6Ly9jcmwucm9vdGcyLmFtYXpvbnRydXN0
88+
LmNvbS9yb290ZzIuY3JsMBEGA1UdIAQKMAgwBgYEVR0gADANBgkqhkiG9w0BAQsF
89+
AAOCAQEAYjdCXLwQtT6LLOkMm2xF4gcAevnFWAu5CIw+7bMlPLVvUOTNNWqnkzSW
90+
MiGpSESrnO09tKpzbeR/FoCJbM8oAxiDR3mjEH4wW6w7sGDgd9QIpuEdfF7Au/ma
91+
eyKdpwAJfqxGF4PcnCZXmTA5YpaP7dreqsXMGz7KQ2hsVxa81Q4gLv7/wmpdLqBK
92+
bRRYh5TmOTFffHPLkIhqhBGWJ6bt2YFGpn6jcgAKUj6DiAdjd4lpFw85hdKrCEVN
93+
0FE6/V1dN2RMfjCyVSRCnTawXZwXgWHxyvkQAiSr6w10kY17RSlQOYiypok1JR4U
94+
akcjMS9cmvqtmg5iUaQqqcT5NJ0hGA==
95+
-----END CERTIFICATE-----
96+
)CERT";
97+
98+
// http://crt.rootg2.amazontrust.com/rootg2.cer
99+
// CN: Starfield Services Root Certificate Authority - G2 => name: Starfield_Services_Root_Certificate_Authority___G2
100+
// not valid before: 2009-09-02 00:00:00
101+
// not valid after: 2034-06-28 17:39:16
102+
const char cert_Starfield_Services_Root_Certificate_Authority___G2 [] PROGMEM = R"CERT(
103+
-----BEGIN CERTIFICATE-----
104+
MIIEdTCCA12gAwIBAgIJAKcOSkw0grd/MA0GCSqGSIb3DQEBCwUAMGgxCzAJBgNV
105+
BAYTAlVTMSUwIwYDVQQKExxTdGFyZmllbGQgVGVjaG5vbG9naWVzLCBJbmMuMTIw
106+
MAYDVQQLEylTdGFyZmllbGQgQ2xhc3MgMiBDZXJ0aWZpY2F0aW9uIEF1dGhvcml0
107+
eTAeFw0wOTA5MDIwMDAwMDBaFw0zNDA2MjgxNzM5MTZaMIGYMQswCQYDVQQGEwJV
108+
UzEQMA4GA1UECBMHQXJpem9uYTETMBEGA1UEBxMKU2NvdHRzZGFsZTElMCMGA1UE
109+
ChMcU3RhcmZpZWxkIFRlY2hub2xvZ2llcywgSW5jLjE7MDkGA1UEAxMyU3RhcmZp
110+
ZWxkIFNlcnZpY2VzIFJvb3QgQ2VydGlmaWNhdGUgQXV0aG9yaXR5IC0gRzIwggEi
111+
MA0GCSqGSIb3DQEBAQUAA4IBDwAwggEKAoIBAQDVDDrEKvlO4vW+GZdfjohTsR8/
112+
y8+fIBNtKTrID30892t2OGPZNmCom15cAICyL1l/9of5JUOG52kbUpqQ4XHj2C0N
113+
Tm/2yEnZtvMaVq4rtnQU68/7JuMauh2WLmo7WJSJR1b/JaCTcFOD2oR0FMNnngRo
114+
Ot+OQFodSk7PQ5E751bWAHDLUu57fa4657wx+UX2wmDPE1kCK4DMNEffud6QZW0C
115+
zyyRpqbn3oUYSXxmTqM6bam17jQuug0DuDPfR+uxa40l2ZvOgdFFRjKWcIfeAg5J
116+
Q4W2bHO7ZOphQazJ1FTfhy/HIrImzJ9ZVGif/L4qL8RVHHVAYBeFAlU5i38FAgMB
117+
AAGjgfAwge0wDwYDVR0TAQH/BAUwAwEB/zAOBgNVHQ8BAf8EBAMCAYYwHQYDVR0O
118+
BBYEFJxfAN+qAdcwKziIorhtSpzyEZGDMB8GA1UdIwQYMBaAFL9ft9HO3R+G9FtV
119+
rNzXEMIOqYjnME8GCCsGAQUFBwEBBEMwQTAcBggrBgEFBQcwAYYQaHR0cDovL28u
120+
c3MyLnVzLzAhBggrBgEFBQcwAoYVaHR0cDovL3guc3MyLnVzL3guY2VyMCYGA1Ud
121+
HwQfMB0wG6AZoBeGFWh0dHA6Ly9zLnNzMi51cy9yLmNybDARBgNVHSAECjAIMAYG
122+
BFUdIAAwDQYJKoZIhvcNAQELBQADggEBACMd44pXyn3pF3lM8R5V/cxTbj5HD9/G
123+
VfKyBDbtgB9TxF00KGu+x1X8Z+rLP3+QsjPNG1gQggL4+C/1E2DUBc7xgQjB3ad1
124+
l08YuW3e95ORCLp+QCztweq7dp4zBncdDQh/U90bZKuCJ/Fp1U1ervShw3WnWEQt
125+
8jxwmKy6abaVd38PMV4s/KCHOkdp8Hlf9BRUpJVeEXgSYCfOn8J3/yNTd126/+pZ
126+
59vPr5KW7ySaNRB6nJHGDn2Z9j8Z3/VyVOEVqQdZe4O/Ui5GjLIAZHYcSNPYeehu
127+
VsyuLAOQ1xk4meTKCRlb/weWsKh/NEnfVqn3sF/tM+2MR7cwA130A4w=
128+
-----END CERTIFICATE-----
129+
)CERT";
130+
131+
// http://x.ss2.us/x.cer
132+
// CN: => name:
133+
// not valid before: 2004-06-29 17:39:16
134+
// not valid after: 2024-06-29 17:39:16
135+
const char cert_ [] PROGMEM = R"CERT(
136+
-----BEGIN CERTIFICATE-----
137+
MIIFEjCCBHugAwIBAgICAQwwDQYJKoZIhvcNAQEFBQAwgbsxJDAiBgNVBAcTG1Zh
138+
bGlDZXJ0IFZhbGlkYXRpb24gTmV0d29yazEXMBUGA1UEChMOVmFsaUNlcnQsIElu
139+
Yy4xNTAzBgNVBAsTLFZhbGlDZXJ0IENsYXNzIDIgUG9saWN5IFZhbGlkYXRpb24g
140+
QXV0aG9yaXR5MSEwHwYDVQQDExhodHRwOi8vd3d3LnZhbGljZXJ0LmNvbS8xIDAe
141+
BgkqhkiG9w0BCQEWEWluZm9AdmFsaWNlcnQuY29tMB4XDTA0MDYyOTE3MzkxNloX
142+
DTI0MDYyOTE3MzkxNlowaDELMAkGA1UEBhMCVVMxJTAjBgNVBAoTHFN0YXJmaWVs
143+
ZCBUZWNobm9sb2dpZXMsIEluYy4xMjAwBgNVBAsTKVN0YXJmaWVsZCBDbGFzcyAy
144+
IENlcnRpZmljYXRpb24gQXV0aG9yaXR5MIIBIDANBgkqhkiG9w0BAQEFAAOCAQ0A
145+
MIIBCAKCAQEAtzLI/ulxpgSFrQwRZN/OTe/IAxiHP6Gr+zymn/DDodrU2G4rU5D7
146+
JKQ+hPCe6F/s5SdE9SimP3ve4CrwyK9TL57KBQGTHo9mHDmnTfpatnMEJWbrd3/n
147+
WcZKmSUUVOsmx/N/GdUwcI+vsEYq/63rKe3Xn6oEh6PU+YmlNF/bQ5GCNtlmPLG4
148+
uYL9nDo+EMg77wZlZnqbGRg9/3FRPDAuX749d3OyXQZswyNWmiuFJpIcpwKz5D8N
149+
rwh5grg2Peqc0zWzvGnK9cyd6P1kjReAM25eSl2ZyR6HtJ0awNVuEzUjXt+bXz3v
150+
1vd2wuo+u3gNHEJnawTY+Nbab4vyRKABqwIBA6OCAfMwggHvMB0GA1UdDgQWBBS/
151+
X7fRzt0fhvRbVazc1xDCDqmI5zCB0gYDVR0jBIHKMIHHoYHBpIG+MIG7MSQwIgYD
152+
VQQHExtWYWxpQ2VydCBWYWxpZGF0aW9uIE5ldHdvcmsxFzAVBgNVBAoTDlZhbGlD
153+
ZXJ0LCBJbmMuMTUwMwYDVQQLEyxWYWxpQ2VydCBDbGFzcyAyIFBvbGljeSBWYWxp
154+
ZGF0aW9uIEF1dGhvcml0eTEhMB8GA1UEAxMYaHR0cDovL3d3dy52YWxpY2VydC5j
155+
b20vMSAwHgYJKoZIhvcNAQkBFhFpbmZvQHZhbGljZXJ0LmNvbYIBATAPBgNVHRMB
156+
Af8EBTADAQH/MDkGCCsGAQUFBwEBBC0wKzApBggrBgEFBQcwAYYdaHR0cDovL29j
157+
c3Auc3RhcmZpZWxkdGVjaC5jb20wSgYDVR0fBEMwQTA/oD2gO4Y5aHR0cDovL2Nl
158+
cnRpZmljYXRlcy5zdGFyZmllbGR0ZWNoLmNvbS9yZXBvc2l0b3J5L3Jvb3QuY3Js
159+
MFEGA1UdIARKMEgwRgYEVR0gADA+MDwGCCsGAQUFBwIBFjBodHRwOi8vY2VydGlm
160+
aWNhdGVzLnN0YXJmaWVsZHRlY2guY29tL3JlcG9zaXRvcnkwDgYDVR0PAQH/BAQD
161+
AgEGMA0GCSqGSIb3DQEBBQUAA4GBAKVi8afCXSWlcD284ipxs33kDTcdVWptobCr
162+
mADkhWBKIMuh8D1195TaQ39oXCUIuNJ9MxB73HZn8bjhU3zhxoNbKXuNSm8uf0So
163+
GkVrMgfHeMpkksK0hAzc3S1fTbvdiuo43NlmouxBulVtWmQ9twPMHOKRUJ7jCUSV
164+
FxdzPcwl
165+
-----END CERTIFICATE-----
166+
)CERT";
167+
168+
169+
170+
171+
// end of certificate chain for tls.mbed.org:443
172+
////////////////////////////////////////////////////////////
173+

0 commit comments

Comments
 (0)