7
7
esp8266/Arduino project continuous integration
8
8
build.
9
9
10
- Limitations:
11
- only RSA certificates
12
- no support of Perfect Forward Secrecy (PFS)
13
- TLSv1.2 is supported since version 2.4.0-rc1
14
-
15
10
Created by Ivan Grokhotkov, 2015.
16
11
This example is in public domain.
17
12
*/
@@ -30,14 +25,38 @@ const char* password = STAPSK;
30
25
const char * host = " api.github.com" ;
31
26
const int httpsPort = 443 ;
32
27
33
- // Use web browser to view and copy
34
- // SHA1 fingerprint of the certificate
35
- const char fingerprint[] PROGMEM = " 5F F1 60 31 09 04 3E F2 90 D2 B0 8A 50 38 04 E8 37 9F BC 76" ;
28
+ // DigiCert High Assurance EV Root CA
29
+ const char trustRoot[] PROGMEM = R"EOF(
30
+ -----BEGIN CERTIFICATE-----
31
+ MIIDxTCCAq2gAwIBAgIQAqxcJmoLQJuPC3nyrkYldzANBgkqhkiG9w0BAQUFADBs
32
+ MQswCQYDVQQGEwJVUzEVMBMGA1UEChMMRGlnaUNlcnQgSW5jMRkwFwYDVQQLExB3
33
+ d3cuZGlnaWNlcnQuY29tMSswKQYDVQQDEyJEaWdpQ2VydCBIaWdoIEFzc3VyYW5j
34
+ ZSBFViBSb290IENBMB4XDTA2MTExMDAwMDAwMFoXDTMxMTExMDAwMDAwMFowbDEL
35
+ MAkGA1UEBhMCVVMxFTATBgNVBAoTDERpZ2lDZXJ0IEluYzEZMBcGA1UECxMQd3d3
36
+ LmRpZ2ljZXJ0LmNvbTErMCkGA1UEAxMiRGlnaUNlcnQgSGlnaCBBc3N1cmFuY2Ug
37
+ RVYgUm9vdCBDQTCCASIwDQYJKoZIhvcNAQEBBQADggEPADCCAQoCggEBAMbM5XPm
38
+ +9S75S0tMqbf5YE/yc0lSbZxKsPVlDRnogocsF9ppkCxxLeyj9CYpKlBWTrT3JTW
39
+ PNt0OKRKzE0lgvdKpVMSOO7zSW1xkX5jtqumX8OkhPhPYlG++MXs2ziS4wblCJEM
40
+ xChBVfvLWokVfnHoNb9Ncgk9vjo4UFt3MRuNs8ckRZqnrG0AFFoEt7oT61EKmEFB
41
+ Ik5lYYeBQVCmeVyJ3hlKV9Uu5l0cUyx+mM0aBhakaHPQNAQTXKFx01p8VdteZOE3
42
+ hzBWBOURtCmAEvF5OYiiAhF8J2a3iLd48soKqDirCmTCv2ZdlYTBoSUeh10aUAsg
43
+ EsxBu24LUTi4S8sCAwEAAaNjMGEwDgYDVR0PAQH/BAQDAgGGMA8GA1UdEwEB/wQF
44
+ MAMBAf8wHQYDVR0OBBYEFLE+w2kD+L9HAdSYJhoIAu9jZCvDMB8GA1UdIwQYMBaA
45
+ FLE+w2kD+L9HAdSYJhoIAu9jZCvDMA0GCSqGSIb3DQEBBQUAA4IBAQAcGgaX3Nec
46
+ nzyIZgYIVyHbIUf4KmeqvxgydkAQV8GK83rZEWWONfqe/EW1ntlMMUu4kehDLI6z
47
+ eM7b41N5cdblIZQB2lWHmiRk9opmzN6cN82oNLFpmyPInngiK3BD41VHMWEZ71jF
48
+ hS9OMPagMRYjyOfiZRYzy78aG6A9+MpeizGLYAiJLQwGXFK3xPkKmNEVX58Svnw2
49
+ Yzi9RKR/5CYrCsSXaQ3pjOLAEFe4yHYSkVXySGnYvCoCWw9E1CAx2/S6cCZdkGCe
50
+ vEsXCS+0yx5DaMkHJ8HSXPfqIbloEpw8nL+e/IBcm2PN7EeqJSdnoDfzAIJ9VNep
51
+ +OkuE6N36B9K
52
+ -----END CERTIFICATE-----
53
+ )EOF" ;
54
+ X509List cert (trustRoot);
36
55
37
56
void setup () {
38
57
Serial.begin (115200 );
39
58
Serial.println ();
40
- Serial.print (" connecting to " );
59
+ Serial.print (" Connecting to " );
41
60
Serial.println (ssid);
42
61
WiFi.mode (WIFI_STA);
43
62
WiFi.begin (ssid, password);
@@ -50,33 +69,49 @@ void setup() {
50
69
Serial.println (" IP address: " );
51
70
Serial.println (WiFi.localIP ());
52
71
72
+ // Set time via NTP, as required for x.509 validation
73
+ configTime (3 * 3600 , 0 , " pool.ntp.org" , " time.nist.gov" );
74
+
75
+ Serial.print (" Waiting for NTP time sync: " );
76
+ time_t now = time (nullptr );
77
+ while (now < 8 * 3600 * 2 ) {
78
+ delay (500 );
79
+ Serial.print (" ." );
80
+ now = time (nullptr );
81
+ }
82
+ Serial.println (" " );
83
+ struct tm timeinfo;
84
+ gmtime_r (&now, &timeinfo);
85
+ Serial.print (" Current time: " );
86
+ Serial.print (asctime (&timeinfo));
87
+
53
88
// Use WiFiClientSecure class to create TLS connection
54
89
WiFiClientSecure client;
55
- Serial.print (" connecting to " );
90
+ Serial.print (" Connecting to " );
56
91
Serial.println (host);
57
92
58
- Serial.printf (" Using fingerprint '%s' \n " , fingerprint );
59
- client.setFingerprint (fingerprint );
93
+ Serial.printf (" Using certificate: %s \n " , trustRoot );
94
+ client.setTrustAnchors (&cert );
60
95
61
96
if (!client.connect (host, httpsPort)) {
62
- Serial.println (" connection failed" );
97
+ Serial.println (" Connection failed" );
63
98
return ;
64
99
}
65
100
66
101
String url = " /repos/esp8266/Arduino/commits/master/status" ;
67
- Serial.print (" requesting URL: " );
102
+ Serial.print (" Requesting URL: " );
68
103
Serial.println (url);
69
104
70
105
client.print (String (" GET " ) + url + " HTTP/1.1\r\n " +
71
106
" Host: " + host + " \r\n " +
72
107
" User-Agent: BuildFailureDetectorESP8266\r\n " +
73
108
" Connection: close\r\n\r\n " );
74
109
75
- Serial.println (" request sent" );
110
+ Serial.println (" Request sent" );
76
111
while (client.connected ()) {
77
112
String line = client.readStringUntil (' \n ' );
78
113
if (line == " \r " ) {
79
- Serial.println (" headers received" );
114
+ Serial.println (" Headers received" );
80
115
break ;
81
116
}
82
117
}
@@ -86,11 +121,11 @@ void setup() {
86
121
} else {
87
122
Serial.println (" esp8266/Arduino CI has failed" );
88
123
}
89
- Serial.println (" reply was:" );
124
+ Serial.println (" Reply was:" );
90
125
Serial.println (" ==========" );
91
126
Serial.println (line);
92
127
Serial.println (" ==========" );
93
- Serial.println (" closing connection" );
128
+ Serial.println (" Closing connection" );
94
129
}
95
130
96
131
void loop () {
0 commit comments