Skip to content

Commit 7bcf946

Browse files
committed
examples/aws/awsiot: replace deprecated VeriSign CA with Amazon Root CA 1 + Starfield G2
1 parent 9cfac07 commit 7bcf946

1 file changed

Lines changed: 87 additions & 3 deletions

File tree

examples/aws/awsiot.c

Lines changed: 87 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -76,8 +76,27 @@ static int mTestDone = 0;
7676

7777
#define AWSIOT_PUBLISH_MSG_SZ 400
7878

79-
/* Demo Certificates */
79+
/* Demo Certificates
80+
*
81+
* Default: Amazon Root CA 1 + Starfield Services Root CA G2, the trust
82+
* anchors AWS IoT documents for ATS endpoints. Sources:
83+
* https://www.amazontrust.com/repository/AmazonRootCA1.pem
84+
* https://www.amazontrust.com/repository/SFSRootCAG2.pem
85+
*
86+
* Note: Starfield Services Root CA G2 has serialNumber=0, so wolfSSL's
87+
* default strict ASN parser drops it. Builds that need real chain
88+
* verification against AWS IoT must define WOLFSSL_NO_ASN_STRICT.
89+
*
90+
* Regression toggle: define WOLFMQTT_AWSIOT_LEGACY_VERISIGN_CA at build
91+
* time to restore the pre-fix VeriSign Class 3 G5 root. That CA was
92+
* deprecated by AWS IoT Core (see AWS server-authentication docs) and
93+
* no longer verifies any AWS IoT chain; the toggle exists so the test
94+
* can assert that strict verification rejects the old anchor.
95+
*/
96+
#ifdef WOLFMQTT_AWSIOT_LEGACY_VERISIGN_CA
8097
WOLFMQTT_EXAMPLE_CERT const char* root_ca =
98+
/* VeriSign Class 3 Public Primary Certification Authority - G5
99+
* (deprecated by AWS IoT Core; preserved only for regression testing). */
81100
"-----BEGIN CERTIFICATE-----\n"
82101
"MIIE0zCCA7ugAwIBAgIQGNrRniZ96LtKIVjNzGs7SjANBgkqhkiG9w0BAQUFADCB\n"
83102
"yjELMAkGA1UEBhMCVVMxFzAVBgNVBAoTDlZlcmlTaWduLCBJbmMuMR8wHQYDVQQL\n"
@@ -106,6 +125,55 @@ WOLFMQTT_EXAMPLE_CERT const char* root_ca =
106125
"4fQRbxC1lfznQgUy286dUV4otp6F01vvpX1FQHKOtw5rDgb7MzVIcbidJ4vEZV8N\n"
107126
"hnacRHr2lVz2XTIIM6RUthg/aFzyQkqFOFSDX9HoLPKsEdao7WNq\n"
108127
"-----END CERTIFICATE-----";
128+
#else
129+
WOLFMQTT_EXAMPLE_CERT const char* root_ca =
130+
/* Amazon Root CA 1 */
131+
"-----BEGIN CERTIFICATE-----\n"
132+
"MIIDQTCCAimgAwIBAgITBmyfz5m/jAo54vB4ikPmljZbyjANBgkqhkiG9w0BAQsF\n"
133+
"ADA5MQswCQYDVQQGEwJVUzEPMA0GA1UEChMGQW1hem9uMRkwFwYDVQQDExBBbWF6\n"
134+
"b24gUm9vdCBDQSAxMB4XDTE1MDUyNjAwMDAwMFoXDTM4MDExNzAwMDAwMFowOTEL\n"
135+
"MAkGA1UEBhMCVVMxDzANBgNVBAoTBkFtYXpvbjEZMBcGA1UEAxMQQW1hem9uIFJv\n"
136+
"b3QgQ0EgMTCCASIwDQYJKoZIhvcNAQEBBQADggEPADCCAQoCggEBALJ4gHHKeNXj\n"
137+
"ca9HgFB0fW7Y14h29Jlo91ghYPl0hAEvrAIthtOgQ3pOsqTQNroBvo3bSMgHFzZM\n"
138+
"9O6II8c+6zf1tRn4SWiw3te5djgdYZ6k/oI2peVKVuRF4fn9tBb6dNqcmzU5L/qw\n"
139+
"IFAGbHrQgLKm+a/sRxmPUDgH3KKHOVj4utWp+UhnMJbulHheb4mjUcAwhmahRWa6\n"
140+
"VOujw5H5SNz/0egwLX0tdHA114gk957EWW67c4cX8jJGKLhD+rcdqsq08p8kDi1L\n"
141+
"93FcXmn/6pUCyziKrlA4b9v7LWIbxcceVOF34GfID5yHI9Y/QCB/IIDEgEw+OyQm\n"
142+
"jgSubJrIqg0CAwEAAaNCMEAwDwYDVR0TAQH/BAUwAwEB/zAOBgNVHQ8BAf8EBAMC\n"
143+
"AYYwHQYDVR0OBBYEFIQYzIU07LwMlJQuCFmcx7IQTgoIMA0GCSqGSIb3DQEBCwUA\n"
144+
"A4IBAQCY8jdaQZChGsV2USggNiMOruYou6r4lK5IpDB/G/wkjUu0yKGX9rbxenDI\n"
145+
"U5PMCCjjmCXPI6T53iHTfIUJrU6adTrCC2qJeHZERxhlbI1Bjjt/msv0tadQ1wUs\n"
146+
"N+gDS63pYaACbvXy8MWy7Vu33PqUXHeeE6V/Uq2V8viTO96LXFvKWlJbYK8U90vv\n"
147+
"o/ufQJVtMVT8QtPHRh8jrdkPSHCa2XV4cdFyQzR1bldZwgJcJmApzyMZFo6IQ6XU\n"
148+
"5MsI+yMRQ+hDKXJioaldXgjUkK642M4UwtBV8ob2xJNDd2ZhwLnoQdeXeGADbkpy\n"
149+
"rqXRfboQnoZsG4q5WTP468SQvvG5\n"
150+
"-----END CERTIFICATE-----\n"
151+
/* Starfield Services Root Certificate Authority - G2 */
152+
"-----BEGIN CERTIFICATE-----\n"
153+
"MIID7zCCAtegAwIBAgIBADANBgkqhkiG9w0BAQsFADCBmDELMAkGA1UEBhMCVVMx\n"
154+
"EDAOBgNVBAgTB0FyaXpvbmExEzARBgNVBAcTClNjb3R0c2RhbGUxJTAjBgNVBAoT\n"
155+
"HFN0YXJmaWVsZCBUZWNobm9sb2dpZXMsIEluYy4xOzA5BgNVBAMTMlN0YXJmaWVs\n"
156+
"ZCBTZXJ2aWNlcyBSb290IENlcnRpZmljYXRlIEF1dGhvcml0eSAtIEcyMB4XDTA5\n"
157+
"MDkwMTAwMDAwMFoXDTM3MTIzMTIzNTk1OVowgZgxCzAJBgNVBAYTAlVTMRAwDgYD\n"
158+
"VQQIEwdBcml6b25hMRMwEQYDVQQHEwpTY290dHNkYWxlMSUwIwYDVQQKExxTdGFy\n"
159+
"ZmllbGQgVGVjaG5vbG9naWVzLCBJbmMuMTswOQYDVQQDEzJTdGFyZmllbGQgU2Vy\n"
160+
"dmljZXMgUm9vdCBDZXJ0aWZpY2F0ZSBBdXRob3JpdHkgLSBHMjCCASIwDQYJKoZI\n"
161+
"hvcNAQEBBQADggEPADCCAQoCggEBANUMOsQq+U7i9b4Zl1+OiFOxHz/Lz58gE20p\n"
162+
"OsgPfTz3a3Y4Y9k2YKibXlwAgLIvWX/2h/klQ4bnaRtSmpDhcePYLQ1Ob/bISdm2\n"
163+
"8xpWriu2dBTrz/sm4xq6HZYuajtYlIlHVv8loJNwU4PahHQUw2eeBGg6345AWh1K\n"
164+
"Ts9DkTvnVtYAcMtS7nt9rjrnvDH5RfbCYM8TWQIrgMw0R9+53pBlbQLPLJGmpufe\n"
165+
"hRhJfGZOozptqbXuNC66DQO4M99H67FrjSXZm86B0UVGMpZwh94CDklDhbZsc7tk\n"
166+
"6mFBrMnUVN+HL8cisibMn1lUaJ/8viovxFUcdUBgF4UCVTmLfwUCAwEAAaNCMEAw\n"
167+
"DwYDVR0TAQH/BAUwAwEB/zAOBgNVHQ8BAf8EBAMCAQYwHQYDVR0OBBYEFJxfAN+q\n"
168+
"AdcwKziIorhtSpzyEZGDMA0GCSqGSIb3DQEBCwUAA4IBAQBLNqaEd2ndOxmfZyMI\n"
169+
"bw5hyf2E3F/YNoHN2BtBLZ9g3ccaaNnRbobhiCPPE95Dz+I0swSdHynVv/heyNXB\n"
170+
"ve6SbzJ08pGCL72CQnqtKrcgfU28elUSwhXqvfdqlS5sdJ/PHLTyxQGjhdByPq1z\n"
171+
"qwubdQxtRbeOlKyWN7Wg0I8VRw7j6IPdj/3vQQF3zCepYoUz8jcI73HPdwbeyBkd\n"
172+
"iEDPfUYd/x7H4c7/I9vG+o1VTqkC50cRRj70/b17KSa7qWFiNyi2LSr2EIZkyXCn\n"
173+
"0q23KXB56jzaYyWf/Wi3MOxw+3WKt21gZ7IeyLnp2KhvAotnDU0mV3HaIPzBSlCN\n"
174+
"sSi6\n"
175+
"-----END CERTIFICATE-----";
176+
#endif /* WOLFMQTT_AWSIOT_LEGACY_VERISIGN_CA */
109177

110178
#if 0
111179
static const char* device_pub_key =
@@ -214,9 +282,21 @@ static int mqtt_aws_tls_verify_cb(int preverify, WOLFSSL_X509_STORE_CTX* store)
214282
PRINTF(" Subject's domain name is %s", store->domain);
215283

216284
if (store->error != 0) {
217-
/* Allowing to continue */
218-
/* Should check certificate and return 0 if not okay */
285+
#ifdef WOLFSSL_NO_ASN_STRICT
286+
/* With WOLFSSL_NO_ASN_STRICT the full AWS IoT trust bundle
287+
* (Amazon Root CA 1 + Starfield Services Root CA G2) loads and
288+
* a real chain must verify. Treat any error as a hard failure
289+
* so regressions in the trust bundle or the server chain are
290+
* caught by scripts/awsiot.test instead of being masked. */
291+
PRINTF(" Rejecting cert: verification must succeed under"
292+
" WOLFSSL_NO_ASN_STRICT");
293+
return 0;
294+
#else
295+
/* Strict ASN parsing drops Starfield Services Root CA G2
296+
* (serialNumber=0), so chain verification can legitimately
297+
* fail here. Keep the demo running. */
219298
PRINTF(" Allowing cert anyways");
299+
#endif
220300
}
221301

222302
return 1;
@@ -227,6 +307,10 @@ static int mqtt_aws_tls_cb(MqttClient* client)
227307
{
228308
int rc = WOLFSSL_FAILURE;
229309

310+
#ifdef DEBUG_WOLFSSL
311+
wolfSSL_Debugging_ON();
312+
#endif
313+
230314
/* Use highest available and allow downgrade. If wolfSSL is built with
231315
* old TLS support, it is possible for a server to force a downgrade to
232316
* an insecure version. */

0 commit comments

Comments
 (0)