This thread has been locked.

If you have a related question, please click the "Ask a related question" button in the top right corner. The newly created question will be automatically linked to this question.

MSP432E401Y: Secure MQTT using a client certificate

Part Number: MSP432E401Y

Tool/software:

I am trying to make a secure MQTT connection using a client certificate and key.  I have generated the client files and need to use them when connecting. 

It looks like the files need to be listed in the "secure_files" list.  I have the file names listed like this:

const char *Mqtt_Client_secure_files[CLIENT_NUM_SECURE_FILES] = {"client.key","client.crt","ca-cert.pem",NULL};

I'm having trouble understanding where to place the key and client certificate in my code.  Do I build them into the list with the CA cert? or do they sit in separate blocks?

How does the mbed TLS stack know were to locate these certs?

Is there any example showing how to use the MQTTClient library to connect to a MQTT broker using client certificates?

uint16_t ti_net_certificate0Len = sizeof(ti_net_certificate0);

const uint8_t mqtt_certificate0[] =

"-----BEGIN PRIVATE KEY-----\r\n"
"MIIEvQIBADANBgkqhkiG9w0BAQEFAASCBKcwggSjAgEAAoIBAQC0GQ0e53aBHDbR\r\n"
"8ZjJZjORhRG3s28tVtLRv9g7/9QXdDH/1r0HFWRQuofEGqq3BUar5SdQQMFjOVVV\r\n"
"EmJM5iSq1p+b85+6ePtWuVhl9wlGZanwZjAZkE9Dqb74g5K/2DqMlyRC3/Uvu/ff\r\n"
"jFmxnEKHs8L9Ss7yZk+iCP8QgmWqdN7FE5sAz0E2FI0olt4ui52bBOhExnAqZsmy\r\n"
"dRWYND8MUMrPPTwpw0HX7lz4IhwTju/B4SNR/KFSn2HHq8vEta35Em1I9i3MtLpe\r\n"
"sOAIjYgZsT9mvbu7PND2qvtbrHx6LNXPudUNu92p1N51DAasuFV+bbG4xqRFPcqV\r\n"
"vTHrfavDAgMBAAECggEAGWMEoKFuaNG81TL8tLsa3tLxW0HzFI2OHIdcqEyDgvuG\r\n"
"nB09j8o6AKU37nKh3jhjV2dvIhbBYUbGMBPuK7qEsFjzrnc/l04Rg+PkQZn6l+P3\r\n"
"JLjgOTed7ML4oAMQBHSrACwYA53v69bPy0EiAvGCHACWJmqiqbRhWk0cA0xA9Nor\r\n"
"BKEOiBuMot9bBL4vzYP0Jfo73QfhIsB0MPd6Ov7uRhz+tHN3PG14TQZJ3AgZt4vD\r\n"
"gK9Yzoea2MZTMMzrvIm69onIX7kJU2iGShdiS356/hBLBOrVYj5OGtX3M4jQki7C\r\n"
"/hYeoTtFZZ/Dahcimm9jCW0YKR5lbkeIWvHanFb9eQKBgQDewNF6THmdPf7e+/GY\r\n"
"9j5k+P5svyfnIX2DyLEzPf62hE3Ba+tQjPaOyBReNwP5793k1ySl+yKL3x1aoDiB\r\n"
"wKXbCRmaNtC7RPiIar9tEpSUAaUurf2t05s3sf1YwSwNuX8/+sUBpxxeVfG9N366\r\n"
"qC3AGECmsPIB18Kf43d7qD3CiwKBgQDO+moG/kGfJ3UDp+dSvfH/C+YhKse0bUKM\r\n"
"+dU8MU2TEc13hKIe01trViEMt23df+C2sxsSkS1RTSRIPB152d0BoLh3xGaMeCgJ\r\n"
"Z1iQuKnIfm6MYaFpTHBoC3d5BeHBe/pDAL3O/7mid+JX+CcVbfM7FtEfdP87/kSl\r\n"
"YiYm7kZ6qQKBgBtcb96n2iBYZyAYrlptlMhuVUIiUNJxKKuxUSLMMKdWpP5nNSZV\r\n"
"yktLhET2WQSwU/8x9gx1Ro8Lvt1M5OP7N+Qpv/1TUlxOYoDPK+hH6fwsH5AWSxy4\r\n"
"603yDP6D69dbu6euM9i6IB/uSp1FXcmrssLvt7FB9tgHGp7tH9YOmld1AoGBAJKg\r\n"
"DVqU5jH0Rs3nNVWFYBj4+fdHEiB8QmgSWIACwVzNgMwJdrv1qM66PkF+9GK0w6FJ\r\n"
"8oTNudfdmTVe+NaogwszK1sVFDywplQ7FR+44fY5suDaDPnGf98FOIbQpuRlip3K\r\n"
"uawZtw0kdoExN6bTtDqI6G6reGCsuT6b8EEmDWG5AoGAVx1sRFcErOKKZ3o4DMIE\r\n"
"bPfTnE+piW3yS+zYRLjKMmgTJJO4dCPQLx4FfXir6vhsrfvhdBtVInV4ZXWagtPz\r\n"
"362zAWxveNVE4BlsHqOrbBEGrXfQpgJzDk21neqbLMdtnYJdsbPPZM2zIQiIoWJ0\r\n"
"58k6UYkneqXeIxQ71GIQI9c=\r\n"
"-----END PRIVATE KEY-----\r\n"

"-----BEGIN CERTIFICATE-----\r\n"
"MIIDmjCCAoKgAwIBAgIBADANBgkqhkiG9w0BAQsFADCBkDELMAkGA1UEBhMCR0Ix\r\n"
"FzAVBgNVBAgMDlVuaXRlZCBLaW5nZG9tMQ4wDAYDVQQHDAVEZXJieTESMBAGA1UE\r\n"
"CgwJTW9zcXVpdHRvMQswCQYDVQQLDAJDQTEWMBQGA1UEAwwNbW9zcXVpdHRvLm9y\r\n"
"ZzEfMB0GCSqGSIb3DQEJARYQcm9nZXJAYXRjaG9vLm9yZzAeFw0yNTAxMjcxODA5\r\n"
"MTZaFw0yNTA0MjcxODA5MTZaMHQxCzAJBgNVBAYTAlVTMQswCQYDVQQIDAJWVDES\r\n"
"MBAGA1UEBwwJSGluZXNidXJnMQ4wDAYDVQQKDAVTZW5peDEOMAwGA1UEAwwFU2Vu\r\n"
"aXgxJDAiBgkqhkiG9w0BCQEWFXJvYi5tYWNrbGluQHNlbml4LmNvbTCCASIwDQYJ\r\n"
"KoZIhvcNAQEBBQADggEPADCCAQoCggEBALQZDR7ndoEcNtHxmMlmM5GFEbezby1W\r\n"
"0tG/2Dv/1Bd0Mf/WvQcVZFC6h8QaqrcFRqvlJ1BAwWM5VVUSYkzmJKrWn5vzn7p4\r\n"
"+1a5WGX3CUZlqfBmMBmQT0OpvviDkr/YOoyXJELf9S+799+MWbGcQoezwv1KzvJm\r\n"
"T6II/xCCZap03sUTmwDPQTYUjSiW3i6LnZsE6ETGcCpmybJ1FZg0PwxQys89PCnD\r\n"
"QdfuXPgiHBOO78HhI1H8oVKfYcery8S1rfkSbUj2Lcy0ul6w4AiNiBmxP2a9u7s8\r\n"
"0Paq+1usfHos1c+51Q273anU3nUMBqy4VX5tsbjGpEU9ypW9Met9q8MCAwEAAaMa\r\n"
"MBgwCQYDVR0TBAIwADALBgNVHQ8EBAMCBeAwDQYJKoZIhvcNAQELBQADggEBABUB\r\n"
"SWKRt6oDBDSX8lmf7scj4MWUn/6pxXfQWG+jzuGyDIyOAnS2GuDoXrws/Gvuz0Vb\r\n"
"QiWu4UG2250WL5/HuGacZhcvX2BkBvES6qaJL86fZdsQwbxRrSiigXWTRrWB+o5F\r\n"
"BIC+0b5kZtLi5nMpkbzlu8sNXauyS1QPNSgH99EJhlXt5FvKiy//c3365jV3H5xc\r\n"
"QMWoAVaX/846e3Y247Q26mz9/yTgm5MhrK2dAYUuPCBs5Ap1pMD9YMHoHXiNNX7H\r\n"
"ZjAfSo3q9ZWVVtEJchGxYMPRf0uMugfboyArFLhn0P8GrYkRTE97RQV1wlkG6nrc\r\n"
"+xKehdjS5cO9NblF3mM=\r\n"
"-----END CERTIFICATE-----\r\n"

"-----BEGIN CERTIFICATE-----\r\n"
"MIIEAzCCAuugAwIBAgIUBY1hlCGvdj4NhBXkZ/uLUZNILAwwDQYJKoZIhvcNAQEL\r\n"
"BQAwgZAxCzAJBgNVBAYTAkdCMRcwFQYDVQQIDA5Vbml0ZWQgS2luZ2RvbTEOMAwG\r\n"
"A1UEBwwFRGVyYnkxEjAQBgNVBAoMCU1vc3F1aXR0bzELMAkGA1UECwwCQ0ExFjAU\r\n"
"BgNVBAMMDW1vc3F1aXR0by5vcmcxHzAdBgkqhkiG9w0BCQEWEHJvZ2VyQGF0Y2hv\r\n"
"by5vcmcwHhcNMjAwNjA5MTEwNjM5WhcNMzAwNjA3MTEwNjM5WjCBkDELMAkGA1UE\r\n"
"BhMCR0IxFzAVBgNVBAgMDlVuaXRlZCBLaW5nZG9tMQ4wDAYDVQQHDAVEZXJieTES\r\n"
"MBAGA1UECgwJTW9zcXVpdHRvMQswCQYDVQQLDAJDQTEWMBQGA1UEAwwNbW9zcXVp\r\n"
"dHRvLm9yZzEfMB0GCSqGSIb3DQEJARYQcm9nZXJAYXRjaG9vLm9yZzCCASIwDQYJ\r\n"
"KoZIhvcNAQEBBQADggEPADCCAQoCggEBAME0HKmIzfTOwkKLT3THHe+ObdizamPg\r\n"
"UZmD64Tf3zJdNeYGYn4CEXbyP6fy3tWc8S2boW6dzrH8SdFf9uo320GJA9B7U1FW\r\n"
"Te3xda/Lm3JFfaHjkWw7jBwcauQZjpGINHapHRlpiCZsquAthOgxW9SgDgYlGzEA\r\n"
"s06pkEFiMw+qDfLo/sxFKB6vQlFekMeCymjLCbNwPJyqyhFmPWwio/PDMruBTzPH\r\n"
"3cioBnrJWKXc3OjXdLGFJOfj7pP0j/dr2LH72eSvv3PQQFl90CZPFhrCUcRHSSxo\r\n"
"E6yjGOdnz7f6PveLIB574kQORwt8ePn0yidrTC1ictikED3nHYhMUOUCAwEAAaNT\r\n"
"MFEwHQYDVR0OBBYEFPVV6xBUFPiGKDyo5V3+Hbh4N9YSMB8GA1UdIwQYMBaAFPVV\r\n"
"6xBUFPiGKDyo5V3+Hbh4N9YSMA8GA1UdEwEB/wQFMAMBAf8wDQYJKoZIhvcNAQEL\r\n"
"BQADggEBAGa9kS21N70ThM6/Hj9D7mbVxKLBjVWe2TPsGfbl3rEDfZ+OKRZ2j6AC\r\n"
"6r7jb4TZO3dzF2p6dgbrlU71Y/4K0TdzIjRj3cQ3KSm41JvUQ0hZ/c04iGDg/xWf\r\n"
"+pp58nfPAYwuerruPNWmlStWAXf0UTqRtg4hQDWBuUFDJTuWuuBvEXudz74eh/wK\r\n"
"sMwfu1HFvjy5Z0iMDU8PUDepjVolOCue9ashlS4EB5IECdSR2TItnAIiIwimx839\r\n"
"LdUdRudafMu5T5Xma182OC0/u/xRlEm+tvKGGmfFcN0piqVl8OrSPBgIlb+1IKJE\r\n"
"m/XriWr/Cq4h/JfB7NTsezVslgkBaoU=\r\n"
"-----END CERTIFICATE-----\r\n"
;

  • Hi,

      We don't have any mqtt example with client certificates. However, looking at the https server example, it has code to show how CA cert of client is being used. Can you take at look at the HTTP example? 

      

    In the httpSrvBasicHooks.c file, the example client certificate is included. 

    /*
     *    ======== httpSrvBasicHooks.c ========
     */
    
    #include <stdlib.h>
    #include <stdint.h>
    #include <stdbool.h>
    #include <pthread.h>
    
    #include <ti/ndk/inc/netmain.h>
    
    #include <ti/ndk/slnetif/slnetifndk.h>
    #include <ti/net/slnet.h>
    #include <ti/net/slnetif.h>
    #include <ti/net/slnetutils.h>
    
    #include <ti/display/Display.h>
    #include <ti/drivers/emac/EMACMSP432E4.h>
    
    #define HTTPSTACKSIZE   8192
    #define IF_PRIORITY     1
    #define SERVER_PORT     80
    #define SEC_SERVER_PORT 443
    
    /* Secure object names */
    #define ROOT_CA_CERT_FILE     "DummyCA"
    #define PRIVATE_KEY_FILE      "DummyKey"
    #define TRUSTED_CERT_FILE     "DummyTrustedCert"
    
    /* Prototypes */
    extern Display_Handle display;
    extern void *serverFxn(void *arg0);
    
    /* CA cert of client (clientCaCert.pem) */
    unsigned char cliCAPem[] =
    "-----BEGIN CERTIFICATE-----\r\n"
    "MIICizCCAfQCCQDjeEKNLQFj2jANBgkqhkiG9w0BAQsFADCBiTELMAkGA1UEBhMC\r\n"
    "VVMxEzARBgNVBAgMCkNhbGlmb3JuaWExDzANBgNVBAcMBkdvbGV0YTELMAkGA1UE\r\n"
    "CgwCVEkxEzARBgNVBAsMCmR1bW15X3Jvb3QxEzARBgNVBAMMCmR1bW15X3Jvb3Qx\r\n"
    "HTAbBgkqhkiG9w0BCQEWDnJvb3RAZHVtbXkuY29tMB4XDTE4MDUxMDAwMzY0N1oX\r\n"
    "DTM4MDUwNTAwMzY0N1owgYkxCzAJBgNVBAYTAlVTMRMwEQYDVQQIDApDYWxpZm9y\r\n"
    "bmlhMQ8wDQYDVQQHDAZHb2xldGExCzAJBgNVBAoMAlRJMRMwEQYDVQQLDApkdW1t\r\n"
    "eV9yb290MRMwEQYDVQQDDApkdW1teV9yb290MR0wGwYJKoZIhvcNAQkBFg5yb290\r\n"
    "QGR1bW15LmNvbTCBnzANBgkqhkiG9w0BAQEFAAOBjQAwgYkCgYEA51oMh3E5O0rL\r\n"
    "74096ErsyhtJQnhscRlIMhmFvb1pa6tPF3OAre+qKWhQTG1o0SXoITiNfp71nSwM\r\n"
    "+JO6uC7G5L6GEr6ruvwq7lnEvKCXEU8nBz0H8qWVcZDHlls8FsVsXohOsVa8eyQM\r\n"
    "7Nant7BteV82IbLTzfc7OAWcFxIIY1UCAwEAATANBgkqhkiG9w0BAQsFAAOBgQAC\r\n"
    "qKus1ZUh2hcQWL+3ASAkb56uKWjo4No5xMlx1nyF652BN/u0kh3QVqh53txXAgv5\r\n"
    "QIwHdbPT+YmHqnxtmKXwbDWWuJiuB7A/OYEYmHzsIc5TxboNWXlj/xG3C1XLYDxM\r\n"
    "IkHxye6pRJ5ByqlHhAyGRNcN1PkHHdUrL/ywvAxW6A==\r\n"
    "-----END CERTIFICATE-----";
    
    unsigned int cliCAPemLen = sizeof(cliCAPem);
    
    /*
     * Full chain with server cert followed by CA cert
     *
     * Note that the CA cert is optional as per RFC 5246, but we just
     * want to show an example of how a certificate chain can be supplied.
     */
    unsigned char srvCertPem[] =
    /* server cert (serverCert.pem) */
    "-----BEGIN CERTIFICATE-----\r\n"
    "MIICkTCCAfoCCQCppMM/xH86ITANBgkqhkiG9w0BAQUFADCBiTELMAkGA1UEBhMC\r\n"
    "VVMxEzARBgNVBAgMCkNhbGlmb3JuaWExDzANBgNVBAcMBkdvbGV0YTELMAkGA1UE\r\n"
    "CgwCVEkxEzARBgNVBAsMCmR1bW15X3Jvb3QxEzARBgNVBAMMCmR1bW15X3Jvb3Qx\r\n"
    "HTAbBgkqhkiG9w0BCQEWDnJvb3RAZHVtbXkuY29tMB4XDTE3MTEyNzE4MTE1NFoX\r\n"
    "DTI3MTEyNTE4MTE1NFowgY8xCzAJBgNVBAYTAlVTMRMwEQYDVQQIDApDYWxpZm9y\r\n"
    "bmlhMQ8wDQYDVQQHDAZHb2xldGExCzAJBgNVBAoMAlRJMRUwEwYDVQQLDAxkdW1t\r\n"
    "eV9zZXJ2ZXIxFTATBgNVBAMMDGR1bW15X3NlcnZlcjEfMB0GCSqGSIb3DQEJARYQ\r\n"
    "c2VydmVyQGR1bW15LmNvbTCBnzANBgkqhkiG9w0BAQEFAAOBjQAwgYkCgYEAz0EQ\r\n"
    "B30L687NYQj7NOMbf9O1gauVQSqc3NLdYhSiGQ8QnUvX28GXrABl63s1N49XPaze\r\n"
    "MoC/XX1IZRplVFYnJNHGMt0koe2arWYpWqsUAvNJpZW8X5M3SCdxOW2v3aF/SO6B\r\n"
    "1F+CSYdyeaxGwed1KyNXd48BfzvBzLGKA/SG7oUCAwEAATANBgkqhkiG9w0BAQUF\r\n"
    "AAOBgQAiZM4W81a8h5iGxjOoNgux3iqhJD8RvcewwXrloIpREbqqoZVGFL7xfKFo\r\n"
    "b7U+bTinyRHmjwcYbAzY74g3R+IdB9/2fSdP4sz2CgXcNGewn4FhGOb4G6lG8Eev\r\n"
    "I7WJ4t/HQGW7+SnA990ZYL/5l3d21UFTpAmFk9Co+oMtq6ONqg==\r\n"
    "-----END CERTIFICATE-----\r\n"
    /* CA cert of server (serverCaCert.pem) */
    "-----BEGIN CERTIFICATE-----\r\n"
    "MIICizCCAfQCCQC9wRaASarXVzANBgkqhkiG9w0BAQUFADCBiTELMAkGA1UEBhMC\r\n"
    "VVMxEzARBgNVBAgMCkNhbGlmb3JuaWExDzANBgNVBAcMBkdvbGV0YTELMAkGA1UE\r\n"
    "CgwCVEkxEzARBgNVBAsMCmR1bW15X3Jvb3QxEzARBgNVBAMMCmR1bW15X3Jvb3Qx\r\n"
    "HTAbBgkqhkiG9w0BCQEWDnJvb3RAZHVtbXkuY29tMB4XDTE3MTEyNzE4MDcwOFoX\r\n"
    "DTI3MTEyNTE4MDcwOFowgYkxCzAJBgNVBAYTAlVTMRMwEQYDVQQIDApDYWxpZm9y\r\n"
    "bmlhMQ8wDQYDVQQHDAZHb2xldGExCzAJBgNVBAoMAlRJMRMwEQYDVQQLDApkdW1t\r\n"
    "eV9yb290MRMwEQYDVQQDDApkdW1teV9yb290MR0wGwYJKoZIhvcNAQkBFg5yb290\r\n"
    "QGR1bW15LmNvbTCBnzANBgkqhkiG9w0BAQEFAAOBjQAwgYkCgYEAttRn99pMw3no\r\n"
    "PZzoWjwRO1KMVFztsYHvC06Pct753DKtMn4Zc4F3YIfIDzPx80ZOkX2oMj2RHTKI\r\n"
    "2hzXOp7qHGC8fnFPebguyESkXWtPLGzmt7vQfCNeLKAKclOtoKK6vs98mqtQjxZP\r\n"
    "H3V89cvdV6Lanzw2KhvHSYv+qiPzoc8CAwEAATANBgkqhkiG9w0BAQUFAAOBgQB+\r\n"
    "osjP1mDGxcRN6ZtptXI6Ocq6mL7YusoOiBUmcnjqzBruotcPz+ofbSl58J3twEKG\r\n"
    "HdGDz1CTFEo6h5pgsaYDa66LjCnkInqfPI5+RcmwZ6sULNfNAPL4V40L+KnyP+hd\r\n"
    "U2JLkdWgnZAEsb1S5DZEsFzz+Eq/nWLslFdhbwWgZw==\r\n"
    "-----END CERTIFICATE-----";
    
    unsigned int srvCertPemLen = sizeof(srvCertPem);
    
    /* server private key (serverKey.pem) */
    unsigned char srvKeyPem[] =
    "-----BEGIN RSA PRIVATE KEY-----\r\n"
    "MIICXQIBAAKBgQDPQRAHfQvrzs1hCPs04xt/07WBq5VBKpzc0t1iFKIZDxCdS9fb\r\n"
    "wZesAGXrezU3j1c9rN4ygL9dfUhlGmVUVick0cYy3SSh7ZqtZilaqxQC80mllbxf\r\n"
    "kzdIJ3E5ba/doX9I7oHUX4JJh3J5rEbB53UrI1d3jwF/O8HMsYoD9IbuhQIDAQAB\r\n"
    "AoGBALQz9xL7yBy9UFf5ripa+XMYii34GatyuLdMZQ89r3+oWKLb6hD6b70vD29D\r\n"
    "To9Dg/BtWTmCNmG8Z/D4lXhR/G93RPUWm6hQ88ol6TkqAPYWDgbUI7dCH4j82h6k\r\n"
    "rnKAiCHBpH++KP1wxDw7Zr8BY/XBHLpCvgia0wKcLzZGKvjVAkEA8GpkQ8R8D8XD\r\n"
    "RLl1Ujdb4u11zkaZGOmke0O4V6U6npk0EYgvquwyTnKipJGDfWXMflBYV04PG5rH\r\n"
    "EkctJoudqwJBANywXniYLffn9UcsSXHrwHAXe3lCjcKCPgkUPqs694xOOz1d1uJq\r\n"
    "iqNIESXJK8dMh+dwdR9Sq8dPI34I7F8plI8CQGpJvxYu0eJvPkst6u50Rw1mikSt\r\n"
    "9ZWMBgnxAJjPFcF0Xg66NMjOL9d62ukC5C0WSng1sTi36/n6TbSI/y8hXo0CQFhH\r\n"
    "lQLYnUrV1yApbxfLHqe4PQQ8w0hToU0wdAE7DVtqz/e0WgkoZVz7ryBWYNTQoGzM\r\n"
    "Z42oHF8WITSBjUxj7bECQQDMlPPiBbVsH8SKTnXV+plBRfvhKIbfOdWyDFp1hP4x\r\n"
    "VKlTiDGpKjMb7C++wlQlPVGTYKY7mWpC7b2jLZIIfDDp\r\n"
    "-----END RSA PRIVATE KEY-----";
    
    unsigned int srvKeyPemLen = sizeof(srvKeyPem);
    
    /*
     *  ======== netIPAddrHook ========
     *  user defined network IP address hook
     */
    void netIPAddrHook(uint32_t IPAddr, unsigned int IfIdx, unsigned int fAdd)
    {
        pthread_t           thread;
        pthread_attr_t      attrs;
        struct sched_param  priParam;
        int                 retc;
        int                 detachState;
        uint32_t            hostByteAddr;
        static bool         createTask = true;
        static uint16_t     http_port = SERVER_PORT;
        static uint16_t     https_port = SEC_SERVER_PORT;
        int32_t             status = 0;
    
        if (fAdd) {
            Display_printf(display, 0, 0, "Network Added: ");
        }
        else {
            Display_printf(display, 0, 0, "Network Removed: ");
        }
    
        /* print the IP address that was added/removed */
        hostByteAddr = NDK_ntohl(IPAddr);
        Display_printf(display, 0, 0, "If-%d:%d.%d.%d.%d\n", IfIdx,
                (uint8_t)(hostByteAddr>>24)&0xFF, (uint8_t)(hostByteAddr>>16)&0xFF,
                (uint8_t)(hostByteAddr>>8)&0xFF, (uint8_t)hostByteAddr&0xFF);
    
        /* initialize SlNet interface(s) */
        status = ti_net_SlNet_initConfig();
        if (status < 0)
        {
            Display_printf(display, 0, 0, "Failed to initialize SlNet interface(s)"
                           "- status (%d)\n", status);
            while (1);
        }
    
        if (fAdd && createTask)
        {
            /* Set priority and stack size attributes */
            pthread_attr_init(&attrs);
            priParam.sched_priority = 1;
    
            detachState = PTHREAD_CREATE_DETACHED;
            retc = pthread_attr_setdetachstate(&attrs, detachState);
            if (retc != 0)
            {
                Display_printf(display, 0, 0,
                        "httpSrvBasicHooks main: pthread_attr_setdetachstate() "
                        "failed\n");
                while (1);
            }
    
            pthread_attr_setschedparam(&attrs, &priParam);
    
            retc |= pthread_attr_setstacksize(&attrs, HTTPSTACKSIZE);
            if (retc != 0)
            {
                Display_printf(display, 0, 0,
                        "httpSrvBasicHooks main: pthread_attr_setstacksize() "
                        "failed\n");
                while (1);
            }
    
            /* Begin the thread that will start the INSECURE server */
            retc = pthread_create(&thread, &attrs, serverFxn, (void *)&http_port);
            if (retc != 0)
            {
                Display_printf(display, 0, 0,
                        "httpSrvBasicHooks main: http pthread_create() failed\n");
                while (1);
            }
    
            /* Begin the thread that will start the SECURE server */
            retc = pthread_create(&thread, &attrs, serverFxn, (void *)&https_port);
            if (retc != 0)
            {
                Display_printf(display, 0, 0,
                        "httpSrvBasicHooks main: https pthread_create() failed\n");
                while (1);
            }
    
            createTask = false;
        }
    }
    
    /*
     *  ======== serviceReport ========
     *  NDK service report.  Initially, just reports common system issues.
     */
    void serviceReport(uint32_t item, uint32_t status, uint32_t report, void *h)
    {
        static char *taskName[] = {"Telnet", "", "NAT", "DHCPS", "DHCPC", "DNS"};
        static char *reportStr[] = {"", "Running", "Updated", "Complete", "Fault"};
        static char *statusStr[] =
            {"Disabled", "Waiting", "IPTerm", "Failed","Enabled"};
    
        Display_printf(display, 0, 0, "Service Status: %-9s: %-9s: %-9s: %03d\n",
                taskName[item - 1], statusStr[status], reportStr[report / 256],
                report & 0xFF);
    
        /* report common system issues */
        if ((item == CFGITEM_SERVICE_DHCPCLIENT) &&
                (status == CIS_SRV_STATUS_ENABLED) &&
                (report & NETTOOLS_STAT_FAULT)) {
            Display_printf(display, 0, 0,
                    "DHCP Client initialization failed; check your network.\n");
    
            while (1);
        }
    }

  • Hi Robert,

      Are you able to resolve the issue on your own? I don't know if the example client certification for httpSrvBasicHooks.c is of any help to you.