So in the MQTT example the following function is used to write the CA certificate to the modem so a TLS connection can be setup.
err = modem_key_mgmt_write(CONFIG_MQTT_TLS_SEC_TAG, MODEM_KEY_MGMT_CRED_TYPE_CA_CHAIN, CA_CERTIFICATE, strlen(CA_CERTIFICATE)); if (err) { LOG_ERR("Failed to provision CA certificate: %d", err); return err; }
In our code/TLS setup we want to use Client certificates aswell that is why we are using the following setup.
#if defined(CONFIG_NRF_MODEM_LIB) && defined(CONFIG_MODEM_KEY_MGMT) err = modem_key_mgmt_write(CONFIG_MQTT_TLS_SEC_TAG, MODEM_KEY_MGMT_CRED_TYPE_CA_CHAIN, CA_CERTIFICATE, strlen(CA_CERTIFICATE)); if (err) { LOG_ERR("Failed to provision CA certificate: %d", err); return err; } err = modem_key_mgmt_write(CONFIG_MQTT_TLS_SEC_TAG, MODEM_KEY_MGMT_CRED_TYPE_PRIVATE_CERT, CLIENT_PRIVATE_KEY, strlen(CLIENT_PRIVATE_KEY)); if (err) { LOG_ERR("Failed to register private key: %d", err); return err; } err = modem_key_mgmt_write(CONFIG_MQTT_TLS_SEC_TAG, MODEM_KEY_MGMT_CRED_TYPE_PUBLIC_CERT, CLIENT_PUBLIC_CERTIFICATE, strlen(CLIENT_PUBLIC_CERTIFICATE)); if (err) { LOG_ERR("Failed to register public certificate: %d", err); return err; }
The problem is that this writes the certificate on startup to the modem. Making it debugable from outside. Thats why you have a very large warning in the AWS_FOTA example saying that this is not best practice. But if I turn off debugging and make memory and all that stuff non-readable is it secure again? If not what is best practise to use if I dont wish to do multistage programming in which I write the TLS first and then use the modem_key_mgmt_read function. I would love to know!