<?xml version="1.0" encoding="UTF-8" ?>
<?xml-stylesheet type="text/xsl" href="https://devzone.nordicsemi.com/cfs-file/__key/system/syndication/rss.xsl" media="screen"?><rss version="2.0" xmlns:dc="http://purl.org/dc/elements/1.1/" xmlns:slash="http://purl.org/rss/1.0/modules/slash/" xmlns:wfw="http://wellformedweb.org/CommentAPI/" xmlns:atom="http://www.w3.org/2005/Atom"><channel><title>How to use MQTT+TLS in nRF9160?</title><link>https://devzone.nordicsemi.com/f/nordic-q-a/48407/how-to-use-mqtt-tls-in-nrf9160</link><description>I&amp;#39;m working on a project using nRF9160 DK. 
 How can you use MQTT+TLS in nRF9160? 
 Where should ca certificate file be stored? 
 I modified the code below in mqtt_simple project. What code should I modify additionaly?</description><dc:language>en-US</dc:language><generator>Telligent Community 13</generator><lastBuildDate>Fri, 28 Jun 2019 12:40:40 GMT</lastBuildDate><atom:link rel="self" type="application/rss+xml" href="https://devzone.nordicsemi.com/f/nordic-q-a/48407/how-to-use-mqtt-tls-in-nrf9160" /><item><title>RE: How to use MQTT+TLS in nRF9160?</title><link>https://devzone.nordicsemi.com/thread/195365?ContentTypeID=1</link><pubDate>Fri, 28 Jun 2019 12:40:40 GMT</pubDate><guid isPermaLink="false">137ad170-7792-4731-bb38-c0d22fbe4515:379ac768-651e-4a4e-9d61-dde9f159a71a</guid><dc:creator>Yusuke</dc:creator><description>&lt;p&gt;OK. Finally I solved this issue, but I don&amp;#39;t&amp;nbsp;really understand what&amp;#39;s going on. Basically I started over nrf9160 setting following Get Started Assisstant.&lt;/p&gt;
&lt;p&gt;1. Update library: brew upgrade&lt;/p&gt;
&lt;p&gt;2. Choose ncs_tag of&amp;nbsp;&lt;span class="s1"&gt;v1.0.0-rc3&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;&lt;span class="s1"&gt;3. Copy the original prj.conf file, open MQTT+TLS project by &amp;quot;Open nRF Connect SDK Project&amp;quot;, and&amp;nbsp;&lt;span&gt;rebuild it instead of build&lt;/span&gt;.&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;&lt;span class="s1"&gt;4. Copy the prj.conf file that KentaM shows above. Change url and client id according to your AWS IoT core setting. Set a certificates.h in src folder. Modify main.c&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;&lt;span class="s1"&gt;5.&amp;nbsp;O&lt;span&gt;pen MQTT+TLS project again by &amp;quot;Open nRF Connect SDK Project&amp;quot;, and rebuild it instead of build.&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;&lt;span class="s1"&gt;&lt;span&gt;6. Connect J-Link and download the built Intel hex file to DK board util you don&amp;#39;t see timeout error. It often causes timeout error in downloading.&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;&lt;span class="s1"&gt;&lt;span&gt;7. Push reset button.&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;&lt;span class="s1"&gt;&lt;span&gt;Thank you so much, KentaM!!&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;&lt;div style="clear:both;"&gt;&lt;/div&gt;</description></item><item><title>RE: How to use MQTT+TLS in nRF9160?</title><link>https://devzone.nordicsemi.com/thread/194942?ContentTypeID=1</link><pubDate>Wed, 26 Jun 2019 16:42:22 GMT</pubDate><guid isPermaLink="false">137ad170-7792-4731-bb38-c0d22fbe4515:2eeea4a5-8df7-4285-b2e1-a0faaa5ea69d</guid><dc:creator>Yusuke</dc:creator><description>&lt;p&gt;@&lt;a class="internal-link view-user-profile" href="https://devzone.nordicsemi.com/members/hakon"&gt;Hakon&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;I can&amp;#39;t solve the above issue yet.&lt;br /&gt;I tried a project,&amp;nbsp;which&amp;nbsp;KentaM uses successfully,&amp;nbsp;with two different 0.8.2 DK boards, and they&amp;nbsp;throw&amp;nbsp;the same error. He gave me&amp;nbsp;the whole project files including certificates.h&amp;nbsp;through private message and I used it. The project should be the exactly same.&lt;/p&gt;
&lt;p&gt;During&amp;nbsp;nrf_inbuilt_key_delete, the&amp;nbsp;project throws an error(14), &amp;quot;Bad Address.&amp;quot;&lt;/p&gt;
&lt;p&gt;&lt;pre class="ui-code" data-mode="text"&gt;SPM: NS image at 0x8000
SPM: NS MSP at 0x200240d8
SPM: NS reset vector at 0xb609
SPM: prepare to jump to Non-Secure image.
***** Booting Zephyr OS v1.14.99-ncs1 *****
The MQTT simple sample started
Deleting certs sec_tag: 16842753
nrf_inbuilt_key_delete(16842753, 0) =&amp;gt; result=2
Deleting certs sec_tag: 16842753
***** BUS FAULT *****
  Precise data bus error
  BFAR Address: 0x2800460d
***** Hardware exception *****
Current thread ID = 0x200203fc
Faulting instruction address = 0x1682c
Fatal fault in thread 0x200203fc! Aborting.
nrf_inbuilt_key_delete(16842753, 1) =&amp;gt; result=14
Deleting certs sec_tag: 16842753
nrf_inbuilt_key_delete(16842753, 2) =&amp;gt; result=14
Deleting certs sec_tag: 16842753
nrf_inbuilt_key_delete(16842753, 3) =&amp;gt; result=14
Deleting certs sec_tag: 16842753
nrf_inbuilt_key_delete(16842753, 4) =&amp;gt; result=14
Write ca certs sec_tag: 16842753
CA_CERTIFICATE err: 14
LTE Link Connecting ...
LTE Link Connected!
ERROR: getaddrinfo failed 22
ERROR: mqtt_connect -47&lt;/pre&gt;&lt;/p&gt;
&lt;p&gt;I&amp;#39;m sure the firmware is the latest one,&amp;nbsp;0.7.0-29.alpha.&lt;br /&gt;ncs_tag is v0.4.0&lt;/p&gt;
&lt;p&gt;mqtt_simple project which doesn&amp;#39;t include TLS works fine. However, when it includes TLS procedure, it throws the error.&lt;/p&gt;
&lt;p&gt;Any help?&lt;/p&gt;&lt;div style="clear:both;"&gt;&lt;/div&gt;</description></item><item><title>RE: How to use MQTT+TLS in nRF9160?</title><link>https://devzone.nordicsemi.com/thread/193479?ContentTypeID=1</link><pubDate>Tue, 18 Jun 2019 15:12:21 GMT</pubDate><guid isPermaLink="false">137ad170-7792-4731-bb38-c0d22fbe4515:40360fbe-1afb-41b8-a581-e25090a38360</guid><dc:creator>Kenta</dc:creator><description>&lt;p&gt;prj.conf&lt;/p&gt;
&lt;p&gt;&lt;/p&gt;
&lt;p&gt;&lt;pre class="ui-code" data-mode="text"&gt;# General config
CONFIG_TEST_RANDOM_GENERATOR=y

# Networking
CONFIG_NETWORKING=y
CONFIG_NET_SOCKETS_OFFLOAD=y
CONFIG_NET_SOCKETS=y
CONFIG_NET_SOCKETS_POSIX_NAMES=y

# LTE link control
CONFIG_LTE_LINK_CONTROL=y
CONFIG_LTE_AUTO_INIT_AND_CONNECT=n

# BSD library
CONFIG_BSD_LIBRARY=y

# AT Host
CONFIG_UART_INTERRUPT_DRIVEN=y
CONFIG_AT_HOST_LIBRARY=y
#CONFIG_SPM=n

# MQTT
CONFIG_MQTT_LIB=y
CONFIG_MQTT_LIB_TLS=y

# Appliaction
#CONFIG_MQTT_PUB_TOPIC=&amp;quot;/my/publish/topic&amp;quot;
#CONFIG_MQTT_SUB_TOPIC=&amp;quot;/my/subscribe/topic&amp;quot;
#CONFIG_MQTT_CLIENT_ID=&amp;quot;my-client-id&amp;quot;
#CONFIG_MQTT_BROKER_HOSTNAME=&amp;quot;iot.eclipse.org&amp;quot;
#CONFIG_MQTT_BROKER_PORT=1883

CONFIG_MQTT_PUB_TOPIC=&amp;quot;myTopic/publish&amp;quot;
CONFIG_MQTT_SUB_TOPIC=&amp;quot;myTopic/subscribe&amp;quot;
CONFIG_MQTT_CLIENT_ID=&amp;quot;nRF9160-DK&amp;quot;
CONFIG_MQTT_BROKER_HOSTNAME=&amp;quot;a544w27l82h92-ats.iot.us-east-1.amazonaws.com&amp;quot;
CONFIG_MQTT_BROKER_PORT=8883

CONFIG_SEC_TAG=16842753

CONFIG_PROVISION_CERTIFICATES=y
CONFIG_CERTIFICATES_FILE=&amp;quot;certificates.h&amp;quot;

# Main thread
CONFIG_MAIN_THREAD_PRIORITY=7
CONFIG_MAIN_STACK_SIZE=4096
CONFIG_HEAP_MEM_POOL_SIZE=1024

CONFIG_NO_OPTIMIZATIONS=y
&lt;/pre&gt;&lt;/p&gt;
&lt;p&gt;&lt;/p&gt;
&lt;p&gt;By the way, I will do a study session, will you come?&lt;br /&gt;Saturday.&lt;/p&gt;
&lt;p&gt;&lt;a href="https://atnd.org/events/106150?k=a3fe8e45fefd97826519f8538af997f4"&gt;atnd.org/.../106150&lt;/a&gt;&lt;/p&gt;&lt;div style="clear:both;"&gt;&lt;/div&gt;</description></item><item><title>RE: How to use MQTT+TLS in nRF9160?</title><link>https://devzone.nordicsemi.com/thread/193461?ContentTypeID=1</link><pubDate>Tue, 18 Jun 2019 13:59:12 GMT</pubDate><guid isPermaLink="false">137ad170-7792-4731-bb38-c0d22fbe4515:a50f96ee-c915-426c-b525-d51740a8020c</guid><dc:creator>Yusuke</dc:creator><description>&lt;p&gt;About certificates, I downloaded three files from AWS IoT&lt;br /&gt;-&amp;nbsp;Amazon_Root_CA_1.pem(ca crt)&lt;br /&gt;-&amp;nbsp;xxxxxx-certificate.pem.crt(client crt, not public key)&lt;br /&gt;-&amp;nbsp;yyyyyy-private.pem.key(client private key)&lt;/p&gt;
&lt;p&gt;I overwrote certificates.h put in src folder according to them.&lt;/p&gt;
&lt;p&gt;The following message indicates that deleting the&amp;nbsp;builtin certificate files was not successful. So I don&amp;#39;t think AWS certificate files are related to this issue.&lt;/p&gt;
&lt;p&gt;&lt;pre class="ui-code" data-mode="text"&gt;nrf_inbuilt_key_delete(16842753, 1) =&amp;gt; result=14&lt;/pre&gt;&lt;/p&gt;
&lt;p&gt;Could you show me the content of the prj.conf again if possible? mqtt_simple prj.conf sets a value in&amp;nbsp;&lt;span&gt;CONFIG_SEC_TAG while mqtt_simple_tls project prj.conf sets a value in CONFIG_MQTT_TLS_SEC_TAG.&lt;/span&gt;&lt;/p&gt;&lt;div style="clear:both;"&gt;&lt;/div&gt;</description></item><item><title>RE: How to use MQTT+TLS in nRF9160?</title><link>https://devzone.nordicsemi.com/thread/193440?ContentTypeID=1</link><pubDate>Tue, 18 Jun 2019 12:57:17 GMT</pubDate><guid isPermaLink="false">137ad170-7792-4731-bb38-c0d22fbe4515:8d65eb44-1f68-47e5-8b7f-e9109ec83d4e</guid><dc:creator>Kenta</dc:creator><description>&lt;p&gt;I used GitHub&amp;#39;s prj.conf, which Hakon taught me, almost as it is.&lt;/p&gt;
&lt;p&gt;It looks like an error with CA_CERTIFICATE, but is the CA certificate correct?&lt;/p&gt;
&lt;p&gt;&lt;a href="https://github.com/joakimtoe/fw-nrfconnect-nrf/blob/36532a8ca60bf7139a988b5cbb4e6cb47948a9fa/samples/nrf9160/mqtt_simple_tls/prj.conf"&gt;https://github.com/joakimtoe/fw-nrfconnect-nrf/blob/36532a8ca60bf7139a988b5cbb4e6cb47948a9fa/samples/nrf9160/mqtt_simple_tls/prj.conf&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;&lt;/p&gt;
&lt;p&gt;By the way, I do not understand the meaning of CONFIG_SEC_TAG ... (tell me ...)&lt;/p&gt;&lt;div style="clear:both;"&gt;&lt;/div&gt;</description></item><item><title>RE: How to use MQTT+TLS in nRF9160?</title><link>https://devzone.nordicsemi.com/thread/193430?ContentTypeID=1</link><pubDate>Tue, 18 Jun 2019 12:31:06 GMT</pubDate><guid isPermaLink="false">137ad170-7792-4731-bb38-c0d22fbe4515:9587f21e-9517-4742-9347-7d17928059c3</guid><dc:creator>Yusuke</dc:creator><description>&lt;p&gt;Hello, KentaM!&lt;/p&gt;
&lt;p&gt;CONFIG_SEC_TAG may be wrong value so that the error may be caused. How do you decide the value? random value?&lt;/p&gt;&lt;div style="clear:both;"&gt;&lt;/div&gt;</description></item><item><title>RE: How to use MQTT+TLS in nRF9160?</title><link>https://devzone.nordicsemi.com/thread/193388?ContentTypeID=1</link><pubDate>Tue, 18 Jun 2019 11:06:25 GMT</pubDate><guid isPermaLink="false">137ad170-7792-4731-bb38-c0d22fbe4515:9a89d1f2-59e7-4a70-984d-4a781f530a63</guid><dc:creator>Yusuke</dc:creator><description>&lt;p&gt;I tried AWS IoT but I&amp;#39;m still stucked...&lt;/p&gt;
&lt;p&gt;I copied your code above based on mqtt_simple project and then changed&amp;nbsp;MQTT_BROKER_HOSTNAME and&amp;nbsp;MQTT_CLIENT_ID both in Kconfig and prj.conf. I attached certificates.h in src folder, which I downloaded from AWS.&lt;/p&gt;
&lt;p&gt;I can&amp;#39;t solve the problem below....&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&lt;pre class="ui-code" data-mode="text"&gt;
SPM: NS image at 0x8000
SPM: NS MSP at 0x200240d8
SPM: NS reset vector at 0xb609
SPM: prepare to jump to Non-Secure image.
***** Booting Zephyr OS v1.14.99-ncs1 *****
The MQTT simple sample started
Deleting certs sec_tag: 16842753
nrf_inbuilt_key_delete(16842753, 0) =&amp;gt; result=2
Deleting certs sec_tag: 16842753
***** BUS FAULT *****
  Precise data bus error
  BFAR Address: 0x2800460d
***** Hardware exception *****
Current thread ID = 0x200203fc
Faulting instruction address = 0x1682c
Fatal fault in thread 0x200203fc! Aborting.
nrf_inbuilt_key_delete(16842753, 1) =&amp;gt; result=14
Deleting certs sec_tag: 16842753
nrf_inbuilt_key_delete(16842753, 2) =&amp;gt; result=14
Deleting certs sec_tag: 16842753
nrf_inbuilt_key_delete(16842753, 3) =&amp;gt; result=14
Deleting certs sec_tag: 16842753
nrf_inbuilt_key_delete(16842753, 4) =&amp;gt; result=14
Write ca certs sec_tag: 16842753
CA_CERTIFICATE err: 14
LTE Link Connecting ...
LTE Link Connected!
ERROR: getaddrinfo failed 22
ERROR: mqtt_connect -47&lt;/pre&gt;&lt;/p&gt;
&lt;p&gt;&lt;span&gt;- hardware: nRF9160 DK 0.8.2&lt;/span&gt;&lt;br /&gt;&lt;span&gt;- firmware: 0.7.0-29.alpha&lt;/span&gt;&lt;br /&gt;&lt;span&gt;- nrf ver: 0.4.0&lt;/span&gt;&lt;/p&gt;&lt;div style="clear:both;"&gt;&lt;/div&gt;</description></item><item><title>RE: How to use MQTT+TLS in nRF9160?</title><link>https://devzone.nordicsemi.com/thread/193217?ContentTypeID=1</link><pubDate>Mon, 17 Jun 2019 13:59:51 GMT</pubDate><guid isPermaLink="false">137ad170-7792-4731-bb38-c0d22fbe4515:8d4f596f-d599-479a-b0ba-53d8a3cee754</guid><dc:creator>Kenta</dc:creator><description>&lt;p&gt;&lt;span&gt;nrf9160_pca10090ns &amp;lt;-&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;&lt;span&gt;&lt;/span&gt;&lt;/p&gt;&lt;div style="clear:both;"&gt;&lt;/div&gt;</description></item><item><title>RE: How to use MQTT+TLS in nRF9160?</title><link>https://devzone.nordicsemi.com/thread/193215?ContentTypeID=1</link><pubDate>Mon, 17 Jun 2019 13:49:36 GMT</pubDate><guid isPermaLink="false">137ad170-7792-4731-bb38-c0d22fbe4515:c574aa7f-c3c9-47fb-a040-ebf8858ee7fc</guid><dc:creator>Yusuke</dc:creator><description>&lt;p&gt;I see. I&amp;#39;ll try AWS IoT Core. BTW, Which do you select in Board Name, nrf9160_pca10090ns or&amp;nbsp;&lt;span&gt;nrf9160_pca10090? Since mqtt_simple works with nrf9160_pca10090ns, I choose nrf9160_pca10090ns when implementing TLS.&lt;/span&gt;&lt;/p&gt;&lt;div style="clear:both;"&gt;&lt;/div&gt;</description></item><item><title>RE: How to use MQTT+TLS in nRF9160?</title><link>https://devzone.nordicsemi.com/thread/193197?ContentTypeID=1</link><pubDate>Mon, 17 Jun 2019 13:12:55 GMT</pubDate><guid isPermaLink="false">137ad170-7792-4731-bb38-c0d22fbe4515:ec24c9d7-1374-4d63-8740-9d8d343ad8fc</guid><dc:creator>Kenta</dc:creator><description>&lt;p&gt;Ah....&lt;/p&gt;
&lt;p&gt;I use AWS IoT Core without using EC2.&lt;/p&gt;
&lt;p&gt;Because it costs a lot for EC2 instances.&lt;/p&gt;
&lt;p&gt;If the MQTT_MESSAGE_BUFFER_SIZE is too long it will result in a BUS FAULT error.&lt;/p&gt;
&lt;p&gt;&lt;/p&gt;
&lt;p&gt;日本語でも書いておくと、EC2インスタンスではなく、AWS IoT Coreを使っています。&lt;/p&gt;
&lt;p&gt;EC2インスタンスだとお金いっぱいかかるので。&lt;/p&gt;
&lt;p&gt;AWS IoT Coreでエッジデバイスを登録して、証明書とポリシーを設定及びアタッチしてあります。&lt;/p&gt;
&lt;p&gt;BUS FAULTのエラーはMQTT_MESSAGE_BUFFER_SIZEが長すぎるとエラーになったように思います。&lt;/p&gt;
&lt;p&gt;&lt;/p&gt;&lt;div style="clear:both;"&gt;&lt;/div&gt;</description></item><item><title>RE: How to use MQTT+TLS in nRF9160?</title><link>https://devzone.nordicsemi.com/thread/193183?ContentTypeID=1</link><pubDate>Mon, 17 Jun 2019 12:42:07 GMT</pubDate><guid isPermaLink="false">137ad170-7792-4731-bb38-c0d22fbe4515:aaa60619-433e-426d-b811-d37107b4e98e</guid><dc:creator>Yusuke</dc:creator><description>&lt;p&gt;Hi, KentaM. Thanks a lot!!&lt;/p&gt;
&lt;p&gt;I&amp;#39;m still in trouble. This is the console print.&lt;/p&gt;
&lt;p&gt;&lt;pre class="ui-code" data-mode="text"&gt;SPM: NS image at 0x8000
SPM: NS MSP at 0x200240f0
SPM: NS reset vector at 0xb811
SPM: prepare to jump to Non-Secure image.
***** Booting Zephyr OS v1.14.99-ncs1 *****
The MQTT simple sample started
Deleting certs sec_tag: 16842753
nrf_inbuilt_key_delete(16842753, 0) =&amp;gt; result=2
Deleting certs sec_tag: 16842753
***** BUS FAULT *****
  Precise data bus error
  BFAR Address: 0x3b61bb53
***** Hardware exception *****
Current thread ID = 0x20020410
Faulting instruction address = 0x16ad8
Fatal fault in thread 0x20020410! Aborting.
nrf_inbuilt_key_delete(16842753, 1) =&amp;gt; result=14
Deleting certs sec_tag: 16842753
nrf_inbuilt_key_delete(16842753, 2) =&amp;gt; result=14
Deleting certs sec_tag: 16842753
nrf_inbuilt_key_delete(16842753, 3) =&amp;gt; result=14
Deleting certs sec_tag: 16842753
nrf_inbuilt_key_delete(16842753, 4) =&amp;gt; result=14
Write ca certs sec_tag: 16842753
CA_CERTIFICATE err: 14
LTE Link Connecting ...
LTE Link Connected!
ERROR: getaddrinfo failed 22
ERROR: mqtt_connect -47&lt;/pre&gt;&lt;/p&gt;
&lt;p&gt;This may tell me that certification files are wrong, but MQTT+TLS works fine with another MQTT client with the same three files(CLIENT_PRIVATE_KEY, CLIENT_PUBLIC_CERTIFICATE, CA_CERTIFICATE). These files are self signed and generated by openssl.&amp;nbsp;&lt;/p&gt;
&lt;p&gt;In my case, I don&amp;#39;t use AWS IoT service. I implemented mosquitto MQTT broker on EC2.&lt;/p&gt;
&lt;p&gt;Do you have any comment?&lt;/p&gt;
&lt;p&gt;&lt;pre class="ui-code" data-mode="text"&gt;&amp;lt;certificates.h&amp;gt; *under the src folder

#define CLIENT_ID &amp;quot;myClientID&amp;quot;

#define CLIENT_PRIVATE_KEY \
&amp;quot;-----BEGIN RSA PRIVATE KEY-----\n&amp;quot; \
&amp;quot;MIIEowIBAAKCAQEAyoE5FG1Hf9DFEA1iF9enHtxNGYXI2kBjtXlz9Ckclctx2vJx\n&amp;quot; \
.
.
.
&amp;quot;QknwSFmfYXNRetEcDylKQEI3mkHxtj/jkDrOLitk0ccNQAeou/cL\n&amp;quot; \
&amp;quot;-----END RSA PRIVATE KEY-----\n&amp;quot;

#define CLIENT_PUBLIC_CERTIFICATE \
&amp;quot;-----BEGIN CERTIFICATE-----\n&amp;quot; \
&amp;quot;MIIDkjCCAnoCFGlpDDWDAA00v8MltxDoTLzJH6EiMA0GCSqGSIb3DQEBCwUAMIGJ\n&amp;quot; \
.
.
.
&amp;quot;yQyqplp/\n&amp;quot; \
&amp;quot;-----END CERTIFICATE-----\n&amp;quot;

#define CA_CERTIFICATE \
&amp;quot;-----BEGIN CERTIFICATE-----\n&amp;quot; \
&amp;quot;MIID9TCCAt2gAwIBAgIUSQtJI7ktYmj7qE3tDGGlDTjxrWAwDQYJKoZIhvcNAQEL\n&amp;quot; \
.
.
.
&amp;quot;jmLwN36BmvVGOkXHwOaBgCbFon1negAwX7bO0fXJlwySKO/gIvo1B/FZnP3TdRoD\n&amp;quot; \
&amp;quot;agXksMq8cbMC\n&amp;quot; \
&amp;quot;-----END CERTIFICATE-----\n&amp;quot;
&lt;/pre&gt;&lt;/p&gt;&lt;div style="clear:both;"&gt;&lt;/div&gt;</description></item><item><title>RE: How to use MQTT+TLS in nRF9160?</title><link>https://devzone.nordicsemi.com/thread/193135?ContentTypeID=1</link><pubDate>Mon, 17 Jun 2019 10:38:19 GMT</pubDate><guid isPermaLink="false">137ad170-7792-4731-bb38-c0d22fbe4515:b28e8a98-828a-4758-a35e-d109199fb576</guid><dc:creator>Kenta</dc:creator><description>&lt;p&gt;Hi, Yusuke.&lt;/p&gt;
&lt;p&gt;It&amp;#39;s a code that Hakon told me, it looks like this.&lt;/p&gt;
&lt;p&gt;&lt;/p&gt;
&lt;p&gt;AWS IoT Policy.&lt;/p&gt;
&lt;p&gt;&lt;pre class="ui-code" data-mode="text"&gt;{
  &amp;quot;Version&amp;quot;: &amp;quot;2012-10-17&amp;quot;,
  &amp;quot;Statement&amp;quot;: [
    {
      &amp;quot;Effect&amp;quot;: &amp;quot;Allow&amp;quot;,
      &amp;quot;Action&amp;quot;: &amp;quot;iot:*&amp;quot;,
      &amp;quot;Resource&amp;quot;: &amp;quot;*&amp;quot;
    }
  ]
}
&lt;/pre&gt;&lt;/p&gt;
&lt;p&gt;&lt;/p&gt;
&lt;p&gt;CMakeLists.txt&lt;/p&gt;
&lt;p&gt;&lt;pre class="ui-code" data-mode="text"&gt;#
# Copyright (c) 2018 Nordic Semiconductor
#
# SPDX-License-Identifier: LicenseRef-BSD-5-Clause-Nordic
#

cmake_minimum_required(VERSION 3.8.2)

include(../../../cmake/boilerplate.cmake)
include($ENV{ZEPHYR_BASE}/cmake/app/boilerplate.cmake NO_POLICY_SCOPE)
project(mqtt-simple)

# NORDIC SDK APP START
target_sources(app PRIVATE src/main.c)
# NORDIC SDK APP END
&lt;/pre&gt;&lt;/p&gt;
&lt;p&gt;&lt;/p&gt;
&lt;p&gt;Kconfig&lt;/p&gt;
&lt;p&gt;&lt;pre class="ui-code" data-mode="text"&gt;#
# Copyright (c) 2018 Nordic Semiconductor ASA
#
# SPDX-License-Identifier: LicenseRef-BSD-5-Clause-Nordic
#

menu &amp;quot;MQTT simple sample&amp;quot;


config PROVISION_CERTIFICATES
	bool &amp;quot;Provision of certificate&amp;quot;
	help
		Enable run-time provisioning of certificates from the
		certificates header file selected by using CERTIFICATES_FILE

config CERTIFICATES_FILE
	string &amp;quot;Certificates to use&amp;quot;
	depends on PROVISION_CERTIFICATES
	default &amp;quot;certificates.h&amp;quot;

config SEC_TAG
	int &amp;quot;Security tag to use for the connection&amp;quot;
	default 1

config MQTT_PUB_TOPIC
	string &amp;quot;MQTT publish topic&amp;quot;
	default &amp;quot;myTopic/publish&amp;quot;

config MQTT_SUB_TOPIC
	string &amp;quot;MQTT subscribe topic&amp;quot;
	default &amp;quot;myTopic/subscribe&amp;quot;

config MQTT_CLIENT_ID
	string &amp;quot;MQTT Client ID&amp;quot;
	default &amp;quot;nRF9160-DK&amp;quot;

config MQTT_BROKER_HOSTNAME
	string &amp;quot;MQTT broker hostname&amp;quot;
	default &amp;quot;a544w27l82h92-ats.iot.us-east-1.amazonaws.com&amp;quot;

config MQTT_BROKER_PORT
	int &amp;quot;MQTT broker port&amp;quot;
	default 8883

config MQTT_MESSAGE_BUFFER_SIZE
	int &amp;quot;&amp;quot;
	default 128

config MQTT_PAYLOAD_BUFFER_SIZE
	int &amp;quot;&amp;quot;
	default 128

endmenu

menu &amp;quot;Zephyr Kernel&amp;quot;
source &amp;quot;$ZEPHYR_BASE/Kconfig.zephyr&amp;quot;
endmenu
&lt;/pre&gt;&lt;/p&gt;
&lt;p&gt;&lt;/p&gt;
&lt;p&gt;prj.conf&lt;/p&gt;
&lt;p&gt;&lt;pre class="ui-code" data-mode="text"&gt;# General config
CONFIG_TEST_RANDOM_GENERATOR=y

# Networking
CONFIG_NETWORKING=y
CONFIG_NET_SOCKETS_OFFLOAD=y
CONFIG_NET_SOCKETS=y
CONFIG_NET_SOCKETS_POSIX_NAMES=y

# LTE link control
CONFIG_LTE_LINK_CONTROL=y
CONFIG_LTE_AUTO_INIT_AND_CONNECT=n

# BSD library
CONFIG_BSD_LIBRARY=y

# AT Host
CONFIG_UART_INTERRUPT_DRIVEN=y
CONFIG_AT_HOST_LIBRARY=y

# MQTT
CONFIG_MQTT_LIB=y
CONFIG_MQTT_LIB_TLS=y

# Appliaction
#CONFIG_MQTT_PUB_TOPIC=&amp;quot;/my/publish/topic&amp;quot;
#CONFIG_MQTT_SUB_TOPIC=&amp;quot;/my/subscribe/topic&amp;quot;
#CONFIG_MQTT_CLIENT_ID=&amp;quot;my-client-id&amp;quot;
#CONFIG_MQTT_BROKER_HOSTNAME=&amp;quot;iot.eclipse.org&amp;quot;
#CONFIG_MQTT_BROKER_PORT=1883

CONFIG_MQTT_PUB_TOPIC=&amp;quot;myTopic/publish&amp;quot;
CONFIG_MQTT_SUB_TOPIC=&amp;quot;myTopic/subscribe&amp;quot;
CONFIG_MQTT_CLIENT_ID=&amp;quot;nRF9160-DK&amp;quot;
CONFIG_MQTT_BROKER_HOSTNAME=&amp;quot;a544w27l82h92-ats.iot.us-east-1.amazonaws.com&amp;quot;
CONFIG_MQTT_BROKER_PORT=8883

CONFIG_SEC_TAG=16842753

CONFIG_PROVISION_CERTIFICATES=y
CONFIG_CERTIFICATES_FILE=&amp;quot;certificates.h&amp;quot;

# Main thread
CONFIG_MAIN_THREAD_PRIORITY=7
CONFIG_MAIN_STACK_SIZE=4096
CONFIG_HEAP_MEM_POOL_SIZE=1024

CONFIG_NO_OPTIMIZATIONS=y
&lt;/pre&gt;&lt;/p&gt;
&lt;p&gt;&lt;/p&gt;
&lt;p&gt;main.c&lt;/p&gt;
&lt;p&gt;&lt;pre class="ui-code" data-mode="c_cpp"&gt;/*
 * Copyright (c) 2018 Nordic Semiconductor ASA
 *
 * SPDX-License-Identifier: LicenseRef-BSD-5-Clause-Nordic
 */

#include &amp;lt;zephyr.h&amp;gt;
#include &amp;lt;stdio.h&amp;gt;
#include &amp;lt;uart.h&amp;gt;
#include &amp;lt;string.h&amp;gt;

#include &amp;lt;net/mqtt.h&amp;gt;
#include &amp;lt;net/socket.h&amp;gt;
#include &amp;lt;lte_lc.h&amp;gt;

#if defined(CONFIG_PROVISION_CERTIFICATES)
#if defined(CONFIG_BSD_LIBRARY)
#include &amp;quot;nrf_inbuilt_key.h&amp;quot;
#endif
//#include CONFIG_CERTIFICATES_FILE
#endif

#include &amp;quot;certificates.h&amp;quot;

#if defined(CONFIG_MQTT_LIB_TLS)
	static sec_tag_t sec_tag_list[] = { CONFIG_SEC_TAG };
#endif

/* Buffers for MQTT client. */
static u8_t rx_buffer[CONFIG_MQTT_MESSAGE_BUFFER_SIZE];
static u8_t tx_buffer[CONFIG_MQTT_MESSAGE_BUFFER_SIZE];
static u8_t payload_buf[CONFIG_MQTT_PAYLOAD_BUFFER_SIZE];

/* The mqtt client struct */
static struct mqtt_client client;

/* MQTT Broker details. */
static struct sockaddr_storage broker;

/* Connected flag */
static bool connected;

/* File descriptor */
struct pollfd fds;

/**@brief Function to print strings without null-termination
 */
static void data_print(u8_t *prefix, u8_t *data, size_t len)
{
	char buf[len + 1];

	memcpy(buf, data, len);
	buf[len] = 0;
	printk(&amp;quot;%s%s\n&amp;quot;, prefix, buf);
}

/**@brief Function to publish data on the configured topic
 */
static int data_publish(struct mqtt_client *c, enum mqtt_qos qos,
	u8_t *data, size_t len)
{
	struct mqtt_publish_param param;

	param.message.topic.qos = qos;
	param.message.topic.topic.utf8 = CONFIG_MQTT_PUB_TOPIC;
	param.message.topic.topic.size = strlen(CONFIG_MQTT_PUB_TOPIC);
	param.message.payload.data = data;
	param.message.payload.len = len;
	param.message_id = sys_rand32_get();
	param.dup_flag = 0;
	param.retain_flag = 0;

	data_print(&amp;quot;Publish: &amp;quot;, data, len);
	printk(&amp;quot;to topic: %s len: %u\n&amp;quot;,
		CONFIG_MQTT_PUB_TOPIC,
		(unsigned int)strlen(CONFIG_MQTT_PUB_TOPIC));

	return mqtt_publish(c, &amp;amp;param);
}

/**@brief Function to subscribe to the configured topic
 */
static int subscribe(void)
{
	struct mqtt_topic subscribe_topic = {
		.topic = {
			.utf8 = CONFIG_MQTT_SUB_TOPIC,
			.size = strlen(CONFIG_MQTT_SUB_TOPIC)
		},
		.qos = MQTT_QOS_1_AT_LEAST_ONCE
	};

	const struct mqtt_subscription_list subscription_list = {
		.list = &amp;amp;subscribe_topic,
		.list_count = 1,
		.message_id = 1234
	};

	printk(&amp;quot;Subscribing to: %s len %u\n&amp;quot;, CONFIG_MQTT_SUB_TOPIC,
		(unsigned int)strlen(CONFIG_MQTT_SUB_TOPIC));

	return mqtt_subscribe(&amp;amp;client, &amp;amp;subscription_list);
}

/**@brief Function to read the published payload.
 */
static int publish_get_payload(struct mqtt_client *c, size_t length)
{
	u8_t *buf = payload_buf;
	u8_t *end = buf + length;

	if (length &amp;gt; sizeof(payload_buf)) {
		return -EMSGSIZE;
	}

	while (buf &amp;lt; end) {
		int ret = mqtt_read_publish_payload(c, buf, end - buf);

		if (ret &amp;lt; 0) {
			if (ret == -EAGAIN) {
				printk(&amp;quot;mqtt_read_publish_payload: EAGAIN&amp;quot;);
				poll(&amp;amp;fds, 1, K_FOREVER);
				continue;
			}

			return ret;
		}

		if (ret == 0) {
			return -EIO;
		}

		buf += ret;
	}

	return 0;
}

/**@brief MQTT client event handler
 */
void mqtt_evt_handler(struct mqtt_client *const c,
		      const struct mqtt_evt *evt)
{
	int err;

	switch (evt-&amp;gt;type) {
	case MQTT_EVT_CONNACK:
		if (evt-&amp;gt;result != 0) {
			printk(&amp;quot;MQTT connect failed %d\n&amp;quot;, evt-&amp;gt;result);
			break;
		}

		connected = true;
		printk(&amp;quot;[%s:%d] MQTT client connected!\n&amp;quot;, __func__, __LINE__);
		subscribe();
		break;

	case MQTT_EVT_DISCONNECT:
		printk(&amp;quot;[%s:%d] MQTT client disconnected %d\n&amp;quot;, __func__,
		       __LINE__, evt-&amp;gt;result);

		connected = false;
		break;

	case MQTT_EVT_PUBLISH: {
		const struct mqtt_publish_param *p = &amp;amp;evt-&amp;gt;param.publish;

		printk(&amp;quot;[%s:%d] MQTT PUBLISH result=%d len=%d\n&amp;quot;, __func__,
		       __LINE__, evt-&amp;gt;result, p-&amp;gt;message.payload.len);
		err = publish_get_payload(c, p-&amp;gt;message.payload.len);
		if (err &amp;gt;= 0) {
			data_print(&amp;quot;Received: &amp;quot;, payload_buf,
				p-&amp;gt;message.payload.len);
			/* Echo back received data */
			//data_publish(&amp;amp;client, MQTT_QOS_1_AT_LEAST_ONCE,
			//	payload_buf, p-&amp;gt;message.payload.len);
		} else {
			printk(&amp;quot;mqtt_read_publish_payload: Failed! %d\n&amp;quot;, err);
		}
	} break;

	case MQTT_EVT_PUBACK:
		if (evt-&amp;gt;result != 0) {
			printk(&amp;quot;MQTT PUBACK error %d\n&amp;quot;, evt-&amp;gt;result);
			break;
		}

		printk(&amp;quot;[%s:%d] PUBACK packet id: %u\n&amp;quot;, __func__, __LINE__,
				evt-&amp;gt;param.puback.message_id);
		break;

	case MQTT_EVT_SUBACK:
		if (evt-&amp;gt;result != 0) {
			printk(&amp;quot;MQTT SUBACK error %d\n&amp;quot;, evt-&amp;gt;result);
			break;
		}

		printk(&amp;quot;[%s:%d] SUBACK packet id: %u\n&amp;quot;, __func__, __LINE__,
				evt-&amp;gt;param.suback.message_id);
		break;

	default:
		printk(&amp;quot;[%s:%d] default: %d\n&amp;quot;, __func__, __LINE__,
				evt-&amp;gt;type);
		break;
	}
}

/**@brief Resolves the configured hostname and
 * initializes the MQTT broker structure
 */
static void broker_init(void)
{
	int err;
	struct addrinfo *result;
	struct addrinfo *addr;
	struct addrinfo hints;

	hints.ai_flags = 0;
	hints.ai_family = AF_INET;
	hints.ai_socktype = SOCK_STREAM;
	hints.ai_protocol = 0;

	err = getaddrinfo(CONFIG_MQTT_BROKER_HOSTNAME, NULL, &amp;amp;hints, &amp;amp;result);
	if (err) {
		printk(&amp;quot;ERROR: getaddrinfo failed %d\n&amp;quot;, err);

		return;
	}

	addr = result;
	err = -ENOENT;

	/* Look for address of the broker. */
	while (addr != NULL) {
		/* IPv4 Address. */
		if (addr-&amp;gt;ai_addrlen == sizeof(struct sockaddr_in)) {
			struct sockaddr_in *broker4 =
				((struct sockaddr_in *)&amp;amp;broker);

			broker4-&amp;gt;sin_addr.s_addr =
				((struct sockaddr_in *)addr-&amp;gt;ai_addr)
				-&amp;gt;sin_addr.s_addr;
			broker4-&amp;gt;sin_family = AF_INET;
			broker4-&amp;gt;sin_port = htons(CONFIG_MQTT_BROKER_PORT);
			printk(&amp;quot;IPv4 Address found 0x%08x\n&amp;quot;,
				broker4-&amp;gt;sin_addr.s_addr);
			break;
		} else {
			printk(&amp;quot;ai_addrlen = %u should be %u or %u\n&amp;quot;,
				(unsigned int)addr-&amp;gt;ai_addrlen,
				(unsigned int)sizeof(struct sockaddr_in),
				(unsigned int)sizeof(struct sockaddr_in6));
		}

		addr = addr-&amp;gt;ai_next;
		break;
	}

	/* Free the address. */
	freeaddrinfo(result);
}

/**@brief Initialize the MQTT client structure
 */
static void client_init(struct mqtt_client *client)
{
	mqtt_client_init(client);

	broker_init();

	/* MQTT client configuration */
	client-&amp;gt;broker = &amp;amp;broker;
	client-&amp;gt;evt_cb = mqtt_evt_handler;
	client-&amp;gt;client_id.utf8 = (u8_t *)CONFIG_MQTT_CLIENT_ID;
	client-&amp;gt;client_id.size = strlen(CONFIG_MQTT_CLIENT_ID);
	client-&amp;gt;password = NULL;
	client-&amp;gt;user_name = NULL;
	client-&amp;gt;protocol_version = MQTT_VERSION_3_1_1;

	/* MQTT buffers configuration */
	client-&amp;gt;rx_buf = rx_buffer;
	client-&amp;gt;rx_buf_size = sizeof(rx_buffer);
	client-&amp;gt;tx_buf = tx_buffer;
	client-&amp;gt;tx_buf_size = sizeof(tx_buffer);

	/* MQTT transport configuration */
#if defined(CONFIG_MQTT_LIB_TLS)
	struct mqtt_sec_config *tls_config = &amp;amp;client-&amp;gt;transport.tls.config;
	
	client-&amp;gt;transport.type = MQTT_TRANSPORT_SECURE;

	tls_config-&amp;gt;peer_verify = 2;
	tls_config-&amp;gt;cipher_count = 0;
	tls_config-&amp;gt;cipher_list = NULL;
	tls_config-&amp;gt;sec_tag_count = ARRAY_SIZE(sec_tag_list);
	tls_config-&amp;gt;sec_tag_list = sec_tag_list;
	tls_config-&amp;gt;hostname = CONFIG_MQTT_BROKER_HOSTNAME;
#else
	client-&amp;gt;transport.type = MQTT_TRANSPORT_NON_SECURE;
#endif
}

/**@brief Initialize the file descriptor structure used by poll.
 */
static int fds_init(struct mqtt_client *c)
{
	if (c-&amp;gt;transport.type == MQTT_TRANSPORT_NON_SECURE) {
		fds.fd = c-&amp;gt;transport.tcp.sock;
	} else {
#if defined(CONFIG_MQTT_LIB_TLS)
		fds.fd = c-&amp;gt;transport.tls.sock;
#else
		return -ENOTSUP;
#endif
	}

	fds.events = POLLIN;

	return 0;
}

/**@brief Configures modem to provide LTE link. Blocks until link is
 * successfully established.
 */
static void modem_configure(void)
{
#if defined(CONFIG_LTE_LINK_CONTROL)
	if (IS_ENABLED(CONFIG_LTE_AUTO_INIT_AND_CONNECT)) {
		/* Do nothing, modem is already turned on
		 * and connected.
		 */
	} else {
		int err;

		printk(&amp;quot;LTE Link Connecting ...\n&amp;quot;);
		err = lte_lc_init_and_connect();
		__ASSERT(err == 0, &amp;quot;LTE link could not be established.&amp;quot;);
		printk(&amp;quot;LTE Link Connected!\n&amp;quot;);
	}
#endif
}

static int provision_certificate(void)
{
#if defined(CONFIG_PROVISION_CERTIFICATES)
#if defined(CONFIG_BSD_LIBRARY)
	{
		int err;

		/* Delete certificates */
		nrf_sec_tag_t sec_tag = (nrf_sec_tag_t) sec_tag_list[0];

		for (nrf_key_mgnt_cred_type_t type = 0; type &amp;lt; 5; type++) {
			printk(&amp;quot;Deleting certs sec_tag: %d\n&amp;quot;, sec_tag);
			err = nrf_inbuilt_key_delete(sec_tag, type);
			printk(&amp;quot;nrf_inbuilt_key_delete(%u, %d) =&amp;gt; result=%d\n&amp;quot;,
				sec_tag, type, err);
		}

#if defined(CA_CERTIFICATE)
		/* Provision CA Certificate. */
		printk(&amp;quot;Write ca certs sec_tag: %d\n&amp;quot;, sec_tag);
		err = nrf_inbuilt_key_write(sec_tag,
			NRF_KEY_MGMT_CRED_TYPE_CA_CHAIN,
			CA_CERTIFICATE,
			strlen(CA_CERTIFICATE));
		if (err) {
			printk(&amp;quot;CA_CERTIFICATE err: %d\n&amp;quot;, err);
			return err;
		}
#endif
#if defined (CLIENT_PRIVATE_KEY)
		/* Provision Private Certificate. */
		printk(&amp;quot;Write private cert sec_tag: %d\n&amp;quot;, sec_tag);
		err = nrf_inbuilt_key_write(
			sec_tag,
			NRF_KEY_MGMT_CRED_TYPE_PRIVATE_CERT,
			CLIENT_PRIVATE_KEY,
			strlen(CLIENT_PRIVATE_KEY));
		if (err) {
			printk(&amp;quot;CLIENT_PRIVATE_KEY err: %d\n&amp;quot;, err);
			return err;
		}
#endif
#if defined(CLIENT_PUBLIC_CERTIFICATE)
		/* Provision Public Certificate. */
		printk(&amp;quot;Write public cert sec_tag: %d\n&amp;quot;, sec_tag);
		err = nrf_inbuilt_key_write(
			sec_tag,
			NRF_KEY_MGMT_CRED_TYPE_PUBLIC_CERT,
			CLIENT_PUBLIC_CERTIFICATE,
			strlen(CLIENT_PUBLIC_CERTIFICATE));
		if (err) {
			printk(&amp;quot;CLIENT_PUBLIC_CERTIFICATE err: %d\n&amp;quot;,
				err);
			return err;
		}
	}
#endif
#else
	{
		int err;

		err = tls_credential_add(CONFIG_SEC_TAG,
			TLS_CREDENTIAL_CA_CERTIFICATE,
			NRF_CLOUD_CA_CERTIFICATE,
			sizeof(NRF_CLOUD_CA_CERTIFICATE));
		if (err &amp;lt; 0) {
			printk(&amp;quot;Failed to register ca certificate: %d\n&amp;quot;,
				err);
			return err;
		}
		err = tls_credential_add(CONFIG_SEC_TAG,
			TLS_CREDENTIAL_PRIVATE_KEY,
			NRF_CLOUD_CLIENT_PRIVATE_KEY,
			sizeof(NRF_CLOUD_CLIENT_PRIVATE_KEY));
		if (err &amp;lt; 0) {
			printk(&amp;quot;Failed to register private key: %d\n&amp;quot;,
				err);
			return err;
		}
		err = tls_credential_add(CONFIG_SEC_TAG,
			TLS_CREDENTIAL_SERVER_CERTIFICATE,
			NRF_CLOUD_CLIENT_PUBLIC_CERTIFICATE,
			sizeof(NRF_CLOUD_CLIENT_PUBLIC_CERTIFICATE));
		if (err &amp;lt; 0) {
			printk(&amp;quot;Failed to register public certificate: %d\n&amp;quot;,
				err);
			return err;
		}

	}
#endif /* defined(CONFIG_BSD_LIBRARY) */
#endif /* defined(CONFIG_PROVISION_CERTIFICATES) */

	return 0;
}

void main(void)
{
	int err;

//	if (!IS_ENABLED(CONFIG_AT_HOST_LIBRARY)) {
//		/* Stop the UART RX for power consumption reasons */
//		NRF_UARTE0_NS-&amp;gt;TASKS_STOPRX = 1;
//		NRF_UARTE1_NS-&amp;gt;TASKS_STOPRX = 1;
//	}

	printk(&amp;quot;The MQTT simple sample started\n&amp;quot;);

	provision_certificate();

	modem_configure();

	client_init(&amp;amp;client);

	err = mqtt_connect(&amp;amp;client);
	if (err != 0) {
		printk(&amp;quot;ERROR: mqtt_connect %d\n&amp;quot;, err);
		return;
	}

	err = fds_init(&amp;amp;client);
	if (err != 0) {
		printk(&amp;quot;ERROR: fds_init %d\n&amp;quot;, err);
		return;
	}

	while (1) {
		err = mqtt_input(&amp;amp;client);
		if (err != 0) {
			printk(&amp;quot;ERROR: mqtt_input %d\n&amp;quot;, err);
		}

		err = mqtt_live(&amp;amp;client);
		if (err != 0) {
			printk(&amp;quot;ERROR: mqtt_live %d\n&amp;quot;, err);
		}

		if (poll(&amp;amp;fds, 1, K_SECONDS(CONFIG_MQTT_KEEPALIVE)) &amp;lt; 0) {
			printk(&amp;quot;ERROR: poll %d\n&amp;quot;, errno);
		}
	}
}
&lt;/pre&gt;&lt;/p&gt;
&lt;p&gt;&lt;/p&gt;
&lt;p&gt;certificates.h&lt;/p&gt;
&lt;p&gt;&lt;pre class="ui-code" data-mode="c_cpp"&gt;/*
 * Copyright (c) 2018 Nordic Semiconductor ASA
 *
 * SPDX-License-Identifier: BSD-5-Clause-Nordic
 */

#define CLIENT_ID &amp;quot;nRF9160-DK&amp;quot;

#define CLIENT_PRIVATE_KEY \
&amp;quot;-----BEGIN RSA PRIVATE KEY-----\n&amp;quot; \
&amp;quot;MIIEowIBAAKCAQEAx4Ye6j54swxVmXg4DgMLq7SGTPDgX//OxX+gIyuElg++Y8Zc\n&amp;quot; \
・
・
・
&amp;quot;9YdCxdXEaJuCQP9Hk/sZntiYWDr+OS0LGLPgwZvx/6zdsgA8fwwo\n&amp;quot; \
&amp;quot;-----END RSA PRIVATE KEY-----\n&amp;quot;



#define CLIENT_PUBLIC_CERTIFICATE \
&amp;quot;-----BEGIN CERTIFICATE-----\n&amp;quot; \
&amp;quot;MIIDWjCCAkKgAwIBAgIVAIZKJS0Jwvc+y4xucM8EsLALOr1HMA0GCSqGSIb3DQEB\n&amp;quot; \
・
・
・
&amp;quot;udQi+rS7NNaOXeRF46P4gAfgSmeSqOAKjrDRsZKYBip1yXclOZFRTUTlvpSYQA==\n&amp;quot; \
&amp;quot;-----END CERTIFICATE-----\n&amp;quot;



#define CA_CERTIFICATE \
&amp;quot;-----BEGIN CERTIFICATE-----\n&amp;quot; \
&amp;quot;MIIDQTCCAimgAwIBAgITBmyfz5m/jAo54vB4ikPmljZbyjANBgkqhkiG9w0BAQsF\n&amp;quot; \
・
・
・
&amp;quot;rqXRfboQnoZsG4q5WTP468SQvvG5\n&amp;quot; \
&amp;quot;-----END CERTIFICATE-----\n&amp;quot;
&lt;/pre&gt;&lt;/p&gt;&lt;div style="clear:both;"&gt;&lt;/div&gt;</description></item><item><title>RE: How to use MQTT+TLS in nRF9160?</title><link>https://devzone.nordicsemi.com/thread/193035?ContentTypeID=1</link><pubDate>Sun, 16 Jun 2019 14:26:44 GMT</pubDate><guid isPermaLink="false">137ad170-7792-4731-bb38-c0d22fbe4515:ae9d4351-74e5-4846-9542-c5cc4c8f9a64</guid><dc:creator>Yusuke</dc:creator><description>&lt;p&gt;I modified code but it doesn&amp;#39;t work well... Could you give me advice?&lt;/p&gt;
&lt;p&gt;I tested mqtt broker(mosquitto) with&amp;nbsp;tls with another MQTT client and it works fine. The broker should be ok.&lt;/p&gt;
&lt;p&gt;The broker doesn&amp;#39;t receive message from the client in this project.&lt;/p&gt;
&lt;p&gt;&lt;pre class="ui-code" data-mode="text"&gt;&amp;lt;console result&amp;gt;

Peripheral              Domain          Status
00 NRF_P0               Non-Secure      OK
01 NRF_CLOCK            Non-Secure      OK
02 NRF_RTC1             Non-Secure      OK
03 NRF_NVMC             Non-Secure      OK
04 NRF_UARTE1           Non-Secure      OK
05 NRF_UARTE2           Secure          SKIP
06 NRF_IPC              Non-Secure      OK
07 NRF_VMC              Non-Secure      OK
08 NRF_FPU              Non-Secure      OK
09 NRF_EGU1             Non-Secure      OK
10 NRF_EGU2             Non-Secure      OK
11 NRF_TWIM2            Non-Secure      OK
12 NRF_SPIM3            Non-Secure      OK
13 NRF_TIMER0           Non-Secure      OK
14 NRF_TIMER1           Non-Secure      OK
15 NRF_TIMER2           Non-Secure      OK
16 NRF_SAADC            Non-Secure      OK
17 NRF_GPIOTE1          Non-Secure      OK

SPM: NS image at 0x8000
SPM: NS MSP at 0x200238e0
SPM: NS reset vector at 0xa2b5
SPM: prepare to jump to Non-Secure image.
***** Booting Zephyr OS v1.14.99-ncs1 *****
The MQTT simple sample started
LTE Link Connecting ...
LTE Link Connected!
IPv4 Address found 0x5e7fda12
ERROR: mqtt_connect -45
&lt;/pre&gt;&lt;/p&gt;
&lt;p&gt;&lt;pre class="ui-code" data-mode="text"&gt;&amp;lt;certificates.h&amp;gt;

#ifndef _CERTIFICATES_H_
#define _CERTIFICATES_H_

#define NRF_CLOUD_CLIENT_PRIVATE_KEY \
    &amp;quot;-----BEGIN RSA PRIVATE KEY-----\n&amp;quot; \
    &amp;quot;MIIEowIBAAKCAQEAyoE5FG1Hf9DFEA1iF9enHtxNGYXI2kBjtXlz9Ckclctx2vJx\n&amp;quot; \
    .
    .
    .
    &amp;quot;QknwSFmfYXNRetEcDylKQEI3mkHxtj/jkDrOLitk0ccNQAeou/cL\n&amp;quot; \
    &amp;quot;-----END RSA PRIVATE KEY-----\n&amp;quot;

#define NRF_CLOUD_CLIENT_PUBLIC_CERTIFICATE \
    &amp;quot;-----BEGIN CERTIFICATE-----\n&amp;quot; \
    &amp;quot;MIIDkjCCAnoCFGlpDDWDAA00v8MltxDoTLzJH6EiMA0GCSqGSIb3DQEBCwUAMIGJ\n&amp;quot; \
    .
    .
    .
    &amp;quot;yQyqplp/\n&amp;quot; \
    &amp;quot;-----END CERTIFICATE-----\n&amp;quot;

#define NRF_CLOUD_CA_CERTIFICATE \
    &amp;quot;-----BEGIN CERTIFICATE-----\n&amp;quot; \
    &amp;quot;MIID9TCCAt2gAwIBAgIUSQtJI7ktYmj7qE3tDGGlDTjxrWAwDQYJKoZIhvcNAQEL\n&amp;quot; \
    .
    .
    .
    &amp;quot;agXksMq8cbMC\n&amp;quot; \
    &amp;quot;-----END CERTIFICATE-----\n&amp;quot;

#endif /* _CERTIFICATES_H_ */&lt;/pre&gt;&lt;/p&gt;
&lt;p&gt;&lt;pre class="ui-code" data-mode="text"&gt;&amp;lt;prj.conf&amp;gt;

# General config
CONFIG_TEST_RANDOM_GENERATOR=y

# Networking
CONFIG_NETWORKING=y
CONFIG_NET_SOCKETS_OFFLOAD=y
CONFIG_NET_SOCKETS=y
CONFIG_NET_SOCKETS_POSIX_NAMES=y

# LTE link control
CONFIG_LTE_LINK_CONTROL=y
CONFIG_LTE_NETWORK_MODE_LTE_M=y
CONFIG_LTE_AUTO_INIT_AND_CONNECT=n
# CONFIG_LTE_EDRX_REQ_ACTT_TYPE=&amp;quot;4&amp;quot;
# CONFIG_LTE_EDRX_REQ=y
# CONFIG_LTE_EDRX_REQ_VALUE=&amp;quot;0110&amp;quot;
# 0100 81.92sec
# 0101 163.84sec
# 0110 327.68sec
# 0111 655.36sec

# LTE link control
CONFIG_LTE_LINK_CONTROL=y
CONFIG_LTE_AUTO_INIT_AND_CONNECT=n

# BSD library
CONFIG_BSD_LIBRARY=y

# AT Host
CONFIG_UART_INTERRUPT_DRIVEN=y
CONFIG_AT_HOST_LIBRARY=y

# MQTT
CONFIG_MQTT_LIB=y
CONFIG_MQTT_LIB_TLS=y

# Appliaction
CONFIG_MQTT_PUB_TOPIC=&amp;quot;myPubTopic&amp;quot;
CONFIG_MQTT_SUB_TOPIC=&amp;quot;mySubTopic&amp;quot;
CONFIG_MQTT_CLIENT_ID=&amp;quot;myClientID&amp;quot;
CONFIG_MQTT_BROKER_HOSTNAME=&amp;quot;xxxxxxxxxxxxxx.com&amp;quot;
CONFIG_MQTT_BROKER_PORT=8883
CONFIG_MQTT_KEEPALIVE=300
CONFIG_MQTT_TLS_SEC_TAG=16842753

# Main thread
CONFIG_MAIN_THREAD_PRIORITY=7
CONFIG_MAIN_STACK_SIZE=4096

CONFIG_HEAP_MEM_POOL_SIZE=1024
&lt;/pre&gt;&lt;/p&gt;
&lt;p&gt;&lt;pre class="ui-code" data-mode="text"&gt;&amp;lt;Kconfig&amp;gt;

menu &amp;quot;MQTT simple sample&amp;quot;

config PROVISION_CERTIFICATES
	bool &amp;quot;Provision of certificate&amp;quot;
	help
		Enable run-time provisioning of certificates from the
		certificates header file selected by using CERTIFICATES_FILE

config CERTIFICATES_FILE
	string &amp;quot;Certificates to use&amp;quot;
	depends on PROVISION_CERTIFICATES
	default &amp;quot;certificates.h&amp;quot;

config SEC_TAG
	int &amp;quot;Security tag to use for the connection&amp;quot;
	default 1

config MQTT_PUB_TOPIC
	string &amp;quot;MQTT publish topic&amp;quot;
	default &amp;quot;my/publish/topic&amp;quot;

config MQTT_SUB_TOPIC
	string &amp;quot;MQTT subscribe topic&amp;quot;
	default &amp;quot;my/subscribe/topic&amp;quot;

config MQTT_CLIENT_ID
	string &amp;quot;MQTT Client ID&amp;quot;
	default &amp;quot;my-client-id&amp;quot;

config MQTT_BROKER_HOSTNAME
	string &amp;quot;MQTT broker hostname&amp;quot;
	default &amp;quot;iot.eclipse.org&amp;quot;

config MQTT_BROKER_PORT
	int &amp;quot;MQTT broker port&amp;quot;
	default 1883

config MQTT_MESSAGE_BUFFER_SIZE
	int &amp;quot;&amp;quot;
	default 128

config MQTT_PAYLOAD_BUFFER_SIZE
	int &amp;quot;&amp;quot;
	default 128

config MQTT_KEEPALIVE
	int &amp;quot;&amp;quot;
	default 60

endmenu

menu &amp;quot;Zephyr Kernel&amp;quot;
source &amp;quot;$ZEPHYR_BASE/Kconfig.zephyr&amp;quot;
endmenu&lt;/pre&gt;&lt;/p&gt;
&lt;p&gt;I copied main.c code below to my project and modified it a little bit.&lt;br /&gt;&lt;a href="https://github.com/joakimtoe/fw-nrfconnect-nrf/commit/36532a8ca60bf7139a988b5cbb4e6cb47948a9fa"&gt;https://github.com/joakimtoe/fw-nrfconnect-nrf/commit/36532a8ca60bf7139a988b5cbb4e6cb47948a9fa&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;I defined NRF_CLOUD_CLIENT_ID in main.c instedf of in certificates.h&lt;br /&gt;&lt;br /&gt;&lt;pre class="ui-code" data-mode="c_cpp"&gt;&amp;lt;main.c&amp;gt;

#include &amp;lt;zephyr.h&amp;gt;
#include &amp;lt;stdio.h&amp;gt;
#include &amp;lt;uart.h&amp;gt;
#include &amp;lt;string.h&amp;gt;

#include &amp;lt;net/mqtt.h&amp;gt;
#include &amp;lt;net/socket.h&amp;gt;
#include &amp;lt;lte_lc.h&amp;gt;

#define MQTT_USERNAME &amp;quot;username&amp;quot;
#define MQTT_PASSWORD &amp;quot;password&amp;quot;
#define NRF_CLOUD_CLIENT_ID CONFIG_MQTT_CLIENT_ID

#if defined(CONFIG_PROVISION_CERTIFICATES)
#if defined(CONFIG_BSD_LIBRARY)
#include &amp;quot;nrf_inbuilt_key.h&amp;quot;
#endif
#include CONFIG_CERTIFICATES_FILE
#endif

#if defined(CONFIG_MQTT_LIB_TLS)
	static sec_tag_t sec_tag_list[] = { CONFIG_SEC_TAG };
#endif

/* Buffers for MQTT client. */
static u8_t rx_buffer[CONFIG_MQTT_MESSAGE_BUFFER_SIZE];
static u8_t tx_buffer[CONFIG_MQTT_MESSAGE_BUFFER_SIZE];
static u8_t payload_buf[CONFIG_MQTT_PAYLOAD_BUFFER_SIZE];
.
.
.
/**@brief Initialize the MQTT client structure
 */
static void client_init(struct mqtt_client *client)
{
	mqtt_client_init(client);

	broker_init();

    /* Add from here */
    static struct mqtt_utf8 password;
	static struct mqtt_utf8 user_name;

	password.utf8 = (u8_t *)MQTT_PASSWORD;
	password.size = strlen(MQTT_PASSWORD);
	user_name.utf8 = (u8_t *)MQTT_USERNAME;
	user_name.size = strlen(MQTT_USERNAME);
    /* to here */

	/* MQTT client configuration */
	client-&amp;gt;broker = &amp;amp;broker;
	client-&amp;gt;evt_cb = mqtt_evt_handler;
	client-&amp;gt;client_id.utf8 = (u8_t *)CONFIG_MQTT_CLIENT_ID;
	client-&amp;gt;client_id.size = strlen(CONFIG_MQTT_CLIENT_ID);
	client-&amp;gt;password = &amp;amp;password; // Add here
	client-&amp;gt;user_name = &amp;amp;user_name; // Add here
	client-&amp;gt;protocol_version = MQTT_VERSION_3_1_0; // originally MQTT_VERSION_3_1_1

	/* MQTT buffers configuration */
	client-&amp;gt;rx_buf = rx_buffer;
	client-&amp;gt;rx_buf_size = sizeof(rx_buffer);
	client-&amp;gt;tx_buf = tx_buffer;
	client-&amp;gt;tx_buf_size = sizeof(tx_buffer);

	/* MQTT transport configuration */ 
    /* MODIFIED HERE */
    #if defined(CONFIG_MQTT_LIB_TLS)
        struct mqtt_sec_config *tls_config = &amp;amp;client-&amp;gt;transport.tls.config;
        client-&amp;gt;transport.type = MQTT_TRANSPORT_SECURE;

        tls_config-&amp;gt;peer_verify = 2;
        tls_config-&amp;gt;cipher_count = 0;
        tls_config-&amp;gt;cipher_list = NULL;
        tls_config-&amp;gt;sec_tag_count = ARRAY_SIZE(sec_tag_list);
        tls_config-&amp;gt;sec_tag_list = sec_tag_list;
        tls_config-&amp;gt;hostname = CONFIG_MQTT_BROKER_HOSTNAME;
    #else
       client-&amp;gt;transport.type = MQTT_TRANSPORT_NON_SECURE;
    #endif
}
.
.
.
static int provision_certificate(void)
{
#if defined(CONFIG_PROVISION_CERTIFICATES)
#if defined(CONFIG_BSD_LIBRARY)
	{
		int err;

		/* Delete certificates */
		nrf_sec_tag_t sec_tag = (nrf_sec_tag_t) sec_tag_list[0];

		for (nrf_key_mgnt_cred_type_t type = 0; type &amp;lt; 5; type++) {
			printk(&amp;quot;Deleting certs sec_tag: %d\n&amp;quot;, sec_tag);
			err = nrf_inbuilt_key_delete(sec_tag, type);
			printk(&amp;quot;nrf_inbuilt_key_delete(%u, %d) =&amp;gt; result=%d\n&amp;quot;,
				sec_tag, type, err);
		}

#if defined(CA_CERTIFICATE)
		/* Provision CA Certificate. */
		printk(&amp;quot;Write ca certs sec_tag: %d\n&amp;quot;, sec_tag);
		err = nrf_inbuilt_key_write(sec_tag,
			NRF_KEY_MGMT_CRED_TYPE_CA_CHAIN,
			CA_CERTIFICATE,
			strlen(CA_CERTIFICATE));
		if (err) {
			printk(&amp;quot;CA_CERTIFICATE err: %d\n&amp;quot;, err);
			return err;
		}
#endif
#if defined (CLIENT_PRIVATE_KEY)
		/* Provision Private Certificate. */
		printk(&amp;quot;Write private cert sec_tag: %d\n&amp;quot;, sec_tag);
		err = nrf_inbuilt_key_write(
			sec_tag,
			NRF_KEY_MGMT_CRED_TYPE_PRIVATE_CERT,
			CLIENT_PRIVATE_KEY,
			strlen(CLIENT_PRIVATE_KEY));
		if (err) {
			printk(&amp;quot;CLIENT_PRIVATE_KEY err: %d\n&amp;quot;, err);
			return err;
		}
#endif
#if defined(CLIENT_PUBLIC_CERTIFICATE)
		/* Provision Public Certificate. */
		printk(&amp;quot;Write public cert sec_tag: %d\n&amp;quot;, sec_tag);
		err = nrf_inbuilt_key_write(
			sec_tag,
			NRF_KEY_MGMT_CRED_TYPE_PUBLIC_CERT,
			CLIENT_PUBLIC_CERTIFICATE,
			strlen(CLIENT_PUBLIC_CERTIFICATE));
		if (err) {
			printk(&amp;quot;CLIENT_PUBLIC_CERTIFICATE err: %d\n&amp;quot;,
				err);
			return err;
		}
	}
#endif
#else
	{
		int err;

		err = tls_credential_add(CONFIG_SEC_TAG,
			TLS_CREDENTIAL_CA_CERTIFICATE,
			NRF_CLOUD_CA_CERTIFICATE,
			sizeof(NRF_CLOUD_CA_CERTIFICATE));
		if (err &amp;lt; 0) {
			printk(&amp;quot;Failed to register ca certificate: %d\n&amp;quot;,
				err);
			return err;
		}
		err = tls_credential_add(CONFIG_SEC_TAG,
			TLS_CREDENTIAL_PRIVATE_KEY,
			NRF_CLOUD_CLIENT_PRIVATE_KEY,
			sizeof(NRF_CLOUD_CLIENT_PRIVATE_KEY));
		if (err &amp;lt; 0) {
			printk(&amp;quot;Failed to register private key: %d\n&amp;quot;,
				err);
			return err;
		}
		err = tls_credential_add(CONFIG_SEC_TAG,
			TLS_CREDENTIAL_SERVER_CERTIFICATE,
			NRF_CLOUD_CLIENT_PUBLIC_CERTIFICATE,
			sizeof(NRF_CLOUD_CLIENT_PUBLIC_CERTIFICATE));
		if (err &amp;lt; 0) {
			printk(&amp;quot;Failed to register public certificate: %d\n&amp;quot;,
				err);
			return err;
		}

	}
#endif /* defined(CONFIG_BSD_LIBRARY) */
#endif /* defined(CONFIG_PROVISION_CERTIFICATES) */

	return 0;
}

void main(void)
{
	int err;

	if (!IS_ENABLED(CONFIG_AT_HOST_LIBRARY)) {
		/* Stop the UART RX for power consumption reasons */
		NRF_UARTE0_NS-&amp;gt;TASKS_STOPRX = 1;
		NRF_UARTE1_NS-&amp;gt;TASKS_STOPRX = 1;
	}

	printk(&amp;quot;The MQTT simple sample started\n&amp;quot;);

	provision_certificate();

	modem_configure();

	client_init(&amp;amp;client);

	err = mqtt_connect(&amp;amp;client);
	if (err != 0) {
		printk(&amp;quot;ERROR: mqtt_connect %d\n&amp;quot;, err); // eror here
		return;
	}

	err = fds_init(&amp;amp;client);
	if (err != 0) {
		printk(&amp;quot;ERROR: fds_init %d\n&amp;quot;, err);
		return;
	}
	
	while (1) {
	    .
	    .
	}
}&lt;/pre&gt;&lt;/p&gt;&lt;div style="clear:both;"&gt;&lt;/div&gt;</description></item><item><title>RE: How to use MQTT+TLS in nRF9160?</title><link>https://devzone.nordicsemi.com/thread/192463?ContentTypeID=1</link><pubDate>Wed, 12 Jun 2019 15:26:01 GMT</pubDate><guid isPermaLink="false">137ad170-7792-4731-bb38-c0d22fbe4515:2002722d-4f22-4784-ba8c-cb7701b4d9e6</guid><dc:creator>Kenta</dc:creator><description>&lt;p&gt;Hi, Hakon.&lt;/p&gt;
&lt;p&gt;Thanks. &amp;nbsp;It worked so well.&lt;/p&gt;
&lt;h2 class="midashigo" title="It worked so well."&gt;&lt;img alt=" " src="https://devzone.nordicsemi.com/resized-image/__size/640x480/__key/communityserver-discussions-components-files/4/aws_5F00_iot_5F00_mqtt.png" /&gt;&lt;/h2&gt;&lt;div style="clear:both;"&gt;&lt;/div&gt;</description></item><item><title>RE: How to use MQTT+TLS in nRF9160?</title><link>https://devzone.nordicsemi.com/thread/192059?ContentTypeID=1</link><pubDate>Tue, 11 Jun 2019 12:14:32 GMT</pubDate><guid isPermaLink="false">137ad170-7792-4731-bb38-c0d22fbe4515:808c3878-ea66-49e1-914d-3b2a75ffbd20</guid><dc:creator>Hakon</dc:creator><description>&lt;p&gt;Hello, please refer to &lt;a href="https://github.com/joakimtoe/fw-nrfconnect-nrf/commit/36532a8ca60bf7139a988b5cbb4e6cb47948a9fa"&gt;this commit&lt;/a&gt; to see how it&amp;#39;s done. The certificates should be put in certificates.h.&lt;/p&gt;&lt;div style="clear:both;"&gt;&lt;/div&gt;</description></item><item><title>RE: How to use MQTT+TLS in nRF9160?</title><link>https://devzone.nordicsemi.com/thread/191874?ContentTypeID=1</link><pubDate>Mon, 10 Jun 2019 17:15:32 GMT</pubDate><guid isPermaLink="false">137ad170-7792-4731-bb38-c0d22fbe4515:7fa1b352-1fec-46be-b916-ea590c944d19</guid><dc:creator>Kenta</dc:creator><description>&lt;p&gt;Hi !&lt;/p&gt;
&lt;p&gt;prj.conf&lt;/p&gt;
&lt;p&gt;&lt;pre class="ui-code" data-mode="text"&gt;# General config
CONFIG_TEST_RANDOM_GENERATOR=y
CONFIG_SPM=n
CONFIG_STDOUT_CONSOLE=y
CONFIG_NEWLIB_LIBC=y

# Networking
CONFIG_NETWORKING=y
CONFIG_NET_SOCKETS=y
CONFIG_NET_SOCKETS_OFFLOAD=y
CONFIG_NET_SOCKETS_POSIX_NAMES=y

# LTE link control
#CONFIG_POWER_OPTIMIZATION_ENABLE=n
CONFIG_LTE_LINK_CONTROL=y
CONFIG_LTE_AUTO_INIT_AND_CONNECT=n

# nRF Cloud
CONFIG_NRF_CLOUD_PROVISION_CERTIFICATES=y
#CONFIG_NRF_CLOUD=y

# Modem info
#CONFIG_MODEM_INFO=y

# BSD library
CONFIG_BSD_LIBRARY=y

# AT Host
CONFIG_UART_INTERRUPT_DRIVEN=y
CONFIG_AT_HOST_LIBRARY=y

# MQTT
#CONFIG_MQTT_LIB=y
CONFIG_MQTT_SOCKET_LIB=y
CONFIG_MQTT_LIB_TLS=y
CONFIG_MQTT_MAX_PACKET_LENGTH=2048


# Appliaction
#CONFIG_MQTT_PUB_TOPIC=&amp;quot;my/publish/topic&amp;quot;
#CONFIG_MQTT_SUB_TOPIC=&amp;quot;my/subscribe/topic&amp;quot;

CONFIG_MQTT_PUB_TOPIC=&amp;quot;myTopic/publish&amp;quot;
CONFIG_MQTT_SUB_TOPIC=&amp;quot;myTopic/subscribe&amp;quot;
CONFIG_MQTT_CLIENT_ID=&amp;quot;nRF9160-DK&amp;quot;
CONFIG_MQTT_BROKER_HOSTNAME=&amp;quot;a544w27l82h92-ats.iot.us-east-1.amazonaws.com&amp;quot;
CONFIG_MQTT_BROKER_PORT= 8883

CONFIG_NRF_CLOUD_SEC_TAG=1234



# Main thread
CONFIG_MAIN_THREAD_PRIORITY=7
#CONFIG_MAIN_STACK_SIZE=4096
#CONFIG_HEAP_MEM_POOL_SIZE=1024

CONFIG_HEAP_MEM_POOL_SIZE=16384
CONFIG_MAIN_STACK_SIZE=8192
CONFIG_GPS_SIM_THREAD_STACK_SIZE=1024
CONFIG_SYSTEM_WORKQUEUE_STACK_SIZE=1500
CONFIG_HW_STACK_PROTECTION=y
&lt;/pre&gt;&lt;/p&gt;
&lt;p&gt;&lt;/p&gt;
&lt;p&gt;main.c&lt;/p&gt;
&lt;p&gt;&lt;pre class="ui-code" data-mode="c_cpp"&gt;/*
 * Copyright (c) 2018 Nordic Semiconductor ASA
 *
 * SPDX-License-Identifier: LicenseRef-BSD-5-Clause-Nordic
 */

#include &amp;lt;zephyr.h&amp;gt;
#include &amp;lt;stdio.h&amp;gt;
#include &amp;lt;uart.h&amp;gt;
#include &amp;lt;string.h&amp;gt;

#include &amp;lt;net/mqtt.h&amp;gt;
#include &amp;lt;net/socket.h&amp;gt;
#include &amp;lt;lte_lc.h&amp;gt;

#if defined(CONFIG_BSD_LIBRARY)
#include &amp;quot;nrf_inbuilt_key.h&amp;quot;
#endif

#include &amp;quot;certificates.h&amp;quot;

/*
 * Copyright (c) 2018 Nordic Semiconductor ASA
 *
 * SPDX-License-Identifier: BSD-5-Clause-Nordic
 */

//#define CONFIG_NRF_CLOUD_SEC_TAG 1
#define NRF_CLOUD_HOSTNAME CONFIG_MQTT_BROKER_HOSTNAME
//#define NRF_CLOUD_SEC_TAG  CONFIG_NRF_CLOUD_SEC_TAG

static struct nct {
    struct mqtt_sec_config tls_config;
    struct mqtt_client client;
    struct sockaddr_storage broker;
    struct mqtt_utf8 dc_tx_endp;
    struct mqtt_utf8 dc_rx_endp;
    u32_t message_id;
} nct;


/* Buffers for MQTT client. */
static u8_t rx_buffer[CONFIG_MQTT_MESSAGE_BUFFER_SIZE];
static u8_t tx_buffer[CONFIG_MQTT_MESSAGE_BUFFER_SIZE];
static u8_t payload_buf[CONFIG_MQTT_PAYLOAD_BUFFER_SIZE];

/* The mqtt client struct */
static struct mqtt_client client;

/* MQTT Broker details. */
static struct sockaddr_storage broker;

/* Connected flag */
static bool connected;

/* File descriptor */
static struct pollfd fds;

#if defined(CONFIG_BSD_LIBRARY)

/**@brief Recoverable BSD library error. */
void bsd_recoverable_error_handler(uint32_t err)
{
	printk(&amp;quot;bsdlib recoverable error: %u\n&amp;quot;, err);
}

/**@brief Irrecoverable BSD library error. */
void bsd_irrecoverable_error_handler(uint32_t err)
{
	printk(&amp;quot;bsdlib irrecoverable error: %u\n&amp;quot;, err);

	__ASSERT_NO_MSG(false);
}

#endif /* defined(CONFIG_BSD_LIBRARY) */

/**@brief Function to print strings without null-termination
 */
static void data_print(u8_t *prefix, u8_t *data, size_t len)
{
	char buf[len + 1];

	memcpy(buf, data, len);
	buf[len] = 0;
	printk(&amp;quot;%s%s\n&amp;quot;, prefix, buf);
}

static void data_sub_print(u8_t *prefix, u8_t *data, size_t len)
{
    printk(&amp;quot;data_sub_print\n&amp;quot;);
    printk(&amp;quot;%s%s\n&amp;quot;, prefix, data);
    printk(&amp;quot;data receive end.\n&amp;quot;);
    //printk(&amp;quot;%s&amp;quot;, data);
    //for(int i=0; i&amp;lt;len; i++){
    //    printk(&amp;quot;%d&amp;quot;, data[i]);
    //}
    //printk(&amp;quot;\n&amp;quot;);
    
}

/**@brief Function to publish data on the configured topic
 */
static int data_publish(struct mqtt_client *c, enum mqtt_qos qos,
	u8_t *data, size_t len)
{
	struct mqtt_publish_param param;

	param.message.topic.qos = qos;
	param.message.topic.topic.utf8 = CONFIG_MQTT_PUB_TOPIC;
	param.message.topic.topic.size = strlen(CONFIG_MQTT_PUB_TOPIC);
	param.message.payload.data = data;
	param.message.payload.len = len;
	param.message_id = sys_rand32_get();
	param.dup_flag = 0;
	param.retain_flag = 0;

	data_print(&amp;quot;Publishing: &amp;quot;, data, len);
	printk(&amp;quot;to topic: %s len: %u\n&amp;quot;,
		CONFIG_MQTT_PUB_TOPIC,
		(unsigned int)strlen(CONFIG_MQTT_PUB_TOPIC));

	return mqtt_publish(c, &amp;amp;param);
}

/**@brief Function to subscribe to the configured topic
 */
static int subscribe(void)
{
	struct mqtt_topic subscribe_topic = {
		.topic = {
			.utf8 = CONFIG_MQTT_SUB_TOPIC,
			.size = strlen(CONFIG_MQTT_SUB_TOPIC)
		},
		.qos = MQTT_QOS_1_AT_LEAST_ONCE
	};

	const struct mqtt_subscription_list subscription_list = {
		.list = &amp;amp;subscribe_topic,
		.list_count = 1,
		.message_id = 1234
	};

	printk(&amp;quot;Subscribing to: %s len %u\n&amp;quot;, CONFIG_MQTT_SUB_TOPIC,
		(unsigned int)strlen(CONFIG_MQTT_SUB_TOPIC));

	return mqtt_subscribe(&amp;amp;client, &amp;amp;subscription_list);
}

/**@brief Function to read the published payload.
 */
static int publish_get_payload(struct mqtt_client *c, size_t length)
{
	u8_t *buf = payload_buf;
	u8_t *end = buf + length;

	if (length &amp;gt; sizeof(payload_buf)) {
		return -EMSGSIZE;
	}

	while (buf &amp;lt; end) {
		//int ret = mqtt_read_publish_payload(c, buf, end - buf);
                int ret = 0;
		if (ret &amp;lt; 0) {
			int err;

			if (ret != -EAGAIN) {
				return ret;
			}

			printk(&amp;quot;mqtt_read_publish_payload: EAGAIN\n&amp;quot;);

			err = poll(&amp;amp;fds, 1, K_SECONDS(CONFIG_MQTT_KEEPALIVE));
			if (err &amp;gt; 0 &amp;amp;&amp;amp; (fds.revents &amp;amp; POLLIN) == POLLIN) {
				continue;
			} else {
				return -EIO;
			}
		}

		if (ret == 0) {
			return -EIO;
		}

		buf += ret;
	}

	return 0;
}

//static int subscribe_get_payload(struct mqtt_binstr)
//{
//
//}

/**@brief MQTT client event handler
 */
void mqtt_evt_handler(struct mqtt_client *const c,
		      const struct mqtt_evt *evt)
{
	int err;

	switch (evt-&amp;gt;type) {
	case MQTT_EVT_CONNACK:
		if (evt-&amp;gt;result != 0) {
			printk(&amp;quot;MQTT connect failed %d\n&amp;quot;, evt-&amp;gt;result);
			break;
		}

		connected = true;
		printk(&amp;quot;[%s:%d] MQTT client connected!\n&amp;quot;, __func__, __LINE__);
		subscribe();
		break;

	case MQTT_EVT_DISCONNECT:
		printk(&amp;quot;[%s:%d] MQTT client disconnected %d\n&amp;quot;, __func__,
		       __LINE__, evt-&amp;gt;result);

		connected = false;
		break;

	case MQTT_EVT_PUBLISH: {
		const struct mqtt_publish_param *p = &amp;amp;evt-&amp;gt;param.publish;

		printk(&amp;quot;[%s:%d] MQTT PUBLISH result=%d len=%d\n&amp;quot;, __func__,
		       __LINE__, evt-&amp;gt;result, p-&amp;gt;message.payload.len);
		
//                err = publish_get_payload(c, p-&amp;gt;message.payload.len);
//		if (err &amp;gt;= 0) {
//			data_print(&amp;quot;Received: &amp;quot;, payload_buf,
//				p-&amp;gt;message.payload.len);
//			/* Echo back received data */
//			//data_publish(&amp;amp;client, MQTT_QOS_1_AT_LEAST_ONCE,
//			//	payload_buf, p-&amp;gt;message.payload.len);
//		} else {
//			printk(&amp;quot;mqtt_read_publish_payload: Failed! %d\n&amp;quot;, err);
//			printk(&amp;quot;Disconnecting MQTT client...\n&amp;quot;);
//
//			err = mqtt_disconnect(c);
//			if (err) {
//				printk(&amp;quot;Could not disconnect: %d\n&amp;quot;, err);
//			}
//		}
	} break;

	case MQTT_EVT_PUBACK:
		if (evt-&amp;gt;result != 0) {
			printk(&amp;quot;MQTT PUBACK error %d\n&amp;quot;, evt-&amp;gt;result);
			break;
		}

		printk(&amp;quot;[%s:%d] PUBACK packet id: %u\n&amp;quot;, __func__, __LINE__,
				evt-&amp;gt;param.puback.message_id);
		break;

	case MQTT_EVT_SUBACK:
		if (evt-&amp;gt;result != 0) {
			printk(&amp;quot;MQTT SUBACK error %d\n&amp;quot;, evt-&amp;gt;result);
			break;
		}

		printk(&amp;quot;[%s:%d] SUBACK packet id: %u\n&amp;quot;, __func__, __LINE__,
				evt-&amp;gt;param.suback.message_id);
        
                const struct mqtt_suback_param* suback = &amp;amp;evt-&amp;gt;param.suback;
        //suback-&amp;gt;return_codes-&amp;gt;data
                data_sub_print(&amp;quot;Subscribe: &amp;quot;, suback-&amp;gt;return_codes.data, suback-&amp;gt;return_codes.len);
		break;

	default:
		printk(&amp;quot;[%s:%d] default: %d\n&amp;quot;, __func__, __LINE__,
				evt-&amp;gt;type);
		break;
	}
}

/**@brief Resolves the configured hostname and
 * initializes the MQTT broker structure
 */
static void broker_init(void)
{
	int err;
	struct addrinfo *result;
	struct addrinfo *addr;
	struct addrinfo hints = {
		.ai_family = AF_INET,
		.ai_socktype = SOCK_STREAM
	};

	err = getaddrinfo(CONFIG_MQTT_BROKER_HOSTNAME, NULL, &amp;amp;hints, &amp;amp;result);
	if (err) {
		printk(&amp;quot;ERROR: getaddrinfo failed %d\n&amp;quot;, err);

		return;
	}

	addr = result;
	err = -ENOENT;

	/* Look for address of the broker. */
	while (addr != NULL) {
		/* IPv4 Address. */
		if (addr-&amp;gt;ai_addrlen == sizeof(struct sockaddr_in)) {
			struct sockaddr_in *broker4 =
				((struct sockaddr_in *)&amp;amp;broker);

			broker4-&amp;gt;sin_addr.s_addr =
				((struct sockaddr_in *)addr-&amp;gt;ai_addr)
				-&amp;gt;sin_addr.s_addr;
			broker4-&amp;gt;sin_family = AF_INET;
			broker4-&amp;gt;sin_port = htons(CONFIG_MQTT_BROKER_PORT);
			printk(&amp;quot;IPv4 Address found 0x%08x\n&amp;quot;,
				broker4-&amp;gt;sin_addr.s_addr);
			break;
		} else {
			printk(&amp;quot;ai_addrlen = %u should be %u or %u\n&amp;quot;,
				(unsigned int)addr-&amp;gt;ai_addrlen,
				(unsigned int)sizeof(struct sockaddr_in),
				(unsigned int)sizeof(struct sockaddr_in6));
		}

		addr = addr-&amp;gt;ai_next;
		break;
	}

	/* Free the address. */
	freeaddrinfo(result);
}

/**@brief Initialize the MQTT client structure
 */
static void client_init(struct mqtt_client *client)
{
	mqtt_client_init(client);

	broker_init();

	/* MQTT client configuration */
	client-&amp;gt;broker = &amp;amp;broker;
	client-&amp;gt;evt_cb = mqtt_evt_handler;
	client-&amp;gt;client_id.utf8 = (u8_t *)CONFIG_MQTT_CLIENT_ID;
	client-&amp;gt;client_id.size = strlen(CONFIG_MQTT_CLIENT_ID);
	client-&amp;gt;password = NULL;
	client-&amp;gt;user_name = NULL;
	client-&amp;gt;protocol_version = MQTT_VERSION_3_1_1;

	/* MQTT buffers configuration */
	client-&amp;gt;rx_buf = rx_buffer;
	client-&amp;gt;rx_buf_size = sizeof(rx_buffer);
	client-&amp;gt;tx_buf = tx_buffer;
	client-&amp;gt;tx_buf_size = sizeof(tx_buffer);

	/* MQTT transport configuration */
	//client-&amp;gt;transport.type = MQTT_TRANSPORT_NON_SECURE;
#if defined(CONFIG_MQTT_LIB_TLS)

    //nct.client.transport.type = MQTT_TRANSPORT_SECURE;
    //struct mqtt_sec_config *tls_config = &amp;amp;nct.client.transport.tls.config;
    //memcpy(tls_config, &amp;amp;nct.tls_config, sizeof(struct mqtt_sec_config));

    client-&amp;gt;transport.type = MQTT_TRANSPORT_SECURE;
    
//    static sec_tag_t sec_tag_list[] = { CONFIG_MY_TAG };
//    struct mqtt_sec_config* tls_config = &amp;amp;client-&amp;gt;transport.tls.config;
//
//    tls_config-&amp;gt;peer_verify = 2;
//    tls_config-&amp;gt;cipher_list = NULL;
//    tls_config-&amp;gt;sec_tag_list = sec_tag_list;
//    tls_config-&amp;gt;sec_tag_count = ARRAY_SIZE(sec_tag_list);
//    tls_config-&amp;gt;hostname = CONFIG_MQTT_BROKER_HOSTNAME;
    
    struct mqtt_sec_config *tls_config = &amp;amp;nct.client.transport.tls.config;
    memcpy(tls_config, &amp;amp;nct.tls_config, sizeof(struct mqtt_sec_config));

#else
    client-&amp;gt;transport.type = MQTT_TRANSPORT_NON_SECURE;
#endif
    
}

/**@brief Initialize the file descriptor structure used by poll.
 */
static int fds_init(struct mqtt_client *c)
{
	if (c-&amp;gt;transport.type == MQTT_TRANSPORT_NON_SECURE) {
		fds.fd = c-&amp;gt;transport.tcp.sock;
	} else {
#if defined(CONFIG_MQTT_LIB_TLS)
		fds.fd = c-&amp;gt;transport.tls.sock;
#else
		return -ENOTSUP;
#endif
	}

	fds.events = POLLIN;

	return 0;
}

/**@brief Configures modem to provide LTE link. Blocks until link is
 * successfully established.
 */
static void modem_configure(void)
{
#if defined(CONFIG_LTE_LINK_CONTROL)
	if (IS_ENABLED(CONFIG_LTE_AUTO_INIT_AND_CONNECT)) {
		/* Do nothing, modem is already turned on
		 * and connected.
		 */
	} else {
		int err;

		printk(&amp;quot;LTE Link Connecting ...\n&amp;quot;);
		err = lte_lc_init_and_connect();
		__ASSERT(err == 0, &amp;quot;LTE link could not be established.&amp;quot;);
		printk(&amp;quot;LTE Link Connected!\n&amp;quot;);
	}
#endif
}


/* Provisions root CA certificate using nrf_inbuilt_key API */
static int nct_provision(void)
{
    static sec_tag_t sec_tag_list[] = {CONFIG_NRF_CLOUD_SEC_TAG};

    nct.tls_config.peer_verify = 2;
    nct.tls_config.cipher_count = 0;
    nct.tls_config.cipher_list = NULL;
    nct.tls_config.sec_tag_count = ARRAY_SIZE(sec_tag_list);
    nct.tls_config.sec_tag_list = sec_tag_list;
    nct.tls_config.hostname = NRF_CLOUD_HOSTNAME;

#if defined(CONFIG_NRF_CLOUD_PROVISION_CERTIFICATES)
#if defined(CONFIG_BSD_LIBRARY)
    {
        int err;

        /* Delete certificates */
        nrf_sec_tag_t sec_tag = CONFIG_NRF_CLOUD_SEC_TAG;

        for (nrf_key_mgnt_cred_type_t type = 0; type &amp;lt; 5; type++) {
            err = nrf_inbuilt_key_delete(sec_tag, type);
            printk(&amp;quot;nrf_inbuilt_key_delete(%lu, %d) =&amp;gt; result=%d&amp;quot;,
                sec_tag, type, err);
        }

        /* Provision CA Certificate. */
        err = nrf_inbuilt_key_write(CONFIG_NRF_CLOUD_SEC_TAG,
                    NRF_KEY_MGMT_CRED_TYPE_CA_CHAIN,
                    NRF_CLOUD_CA_CERTIFICATE,
                    strlen(NRF_CLOUD_CA_CERTIFICATE));
        if (err) {
            printk(&amp;quot;NRF_CLOUD_CA_CERTIFICATE err: %d&amp;quot;, err);
            return err;
        }

        /* Provision Private Certificate. */
        err = nrf_inbuilt_key_write(
            CONFIG_NRF_CLOUD_SEC_TAG,
            NRF_KEY_MGMT_CRED_TYPE_PRIVATE_CERT,
            NRF_CLOUD_CLIENT_PRIVATE_KEY,
            strlen(NRF_CLOUD_CLIENT_PRIVATE_KEY));
        if (err) {
            printk(&amp;quot;NRF_CLOUD_CLIENT_PRIVATE_KEY err: %d&amp;quot;, err);
            return err;
        }

        /* Provision Public Certificate. */
        err = nrf_inbuilt_key_write(
            CONFIG_NRF_CLOUD_SEC_TAG,
            NRF_KEY_MGMT_CRED_TYPE_PUBLIC_CERT,
            NRF_CLOUD_CLIENT_PUBLIC_CERTIFICATE,
            strlen(NRF_CLOUD_CLIENT_PUBLIC_CERTIFICATE));
        if (err) {
            printk(&amp;quot;NRF_CLOUD_CLIENT_PUBLIC_CERTIFICATE err: %d&amp;quot;,
                err);
            return err;
        }
    }
#else
    {
        int err;

        err = tls_credential_add(CONFIG_NRF_CLOUD_SEC_TAG,
            TLS_CREDENTIAL_CA_CERTIFICATE,
            NRF_CLOUD_CA_CERTIFICATE,
            sizeof(NRF_CLOUD_CA_CERTIFICATE));
        if (err &amp;lt; 0) {
            LOG_ERR(&amp;quot;Failed to register ca certificate: %d&amp;quot;,
                err);
            return err;
        }
        err = tls_credential_add(CONFIG_NRF_CLOUD_SEC_TAG,
            TLS_CREDENTIAL_PRIVATE_KEY,
            NRF_CLOUD_CLIENT_PRIVATE_KEY,
            sizeof(NRF_CLOUD_CLIENT_PRIVATE_KEY));
        if (err &amp;lt; 0) {
            LOG_ERR(&amp;quot;Failed to register private key: %d&amp;quot;,
                err);
            return err;
        }
        err = tls_credential_add(CONFIG_NRF_CLOUD_SEC_TAG,
            TLS_CREDENTIAL_SERVER_CERTIFICATE,
            NRF_CLOUD_CLIENT_PUBLIC_CERTIFICATE,
            sizeof(NRF_CLOUD_CLIENT_PUBLIC_CERTIFICATE));
        if (err &amp;lt; 0) {
            LOG_ERR(&amp;quot;Failed to register public certificate: %d&amp;quot;,
                err);
            return err;
        }

    }
#endif /* defined(CONFIG_BSD_LIBRARY) */
#endif /* defined(CONFIG_NRF_CLOUD_PROVISION_CERTIFICATES) */

    return 0;
}


void main(void)
{
	int err;

	printk(&amp;quot;The MQTT simple sample started\n&amp;quot;);
        k_sleep(1000);

    int err_provision = nct_provision();
    if (err_provision != 0) {
        printk(&amp;quot;ERROR: nct_provision failure %d\n&amp;quot;, err_provision);
        return;
    }
    printk(&amp;quot;err_provision = %d\n&amp;quot;, err_provision);

	modem_configure();

	client_init(&amp;amp;client);

	err = mqtt_connect(&amp;amp;client);
	if (err != 0) {
		printk(&amp;quot;ERROR: mqtt_connect %d\n&amp;quot;, err);
		return;
	}
        printk(&amp;quot;connect MQTT Broker.\r\n&amp;quot;);

	err = fds_init(&amp;amp;client);
	if (err != 0) {
		printk(&amp;quot;ERROR: fds_init %d\n&amp;quot;, err);
		return;
	}

	while (1) {
		err = poll(&amp;amp;fds, 1, K_SECONDS(CONFIG_MQTT_KEEPALIVE));
		if (err &amp;lt; 0) {
			printk(&amp;quot;ERROR: poll %d\n&amp;quot;, errno);
			break;
		}

		err = mqtt_live(&amp;amp;client);
		if (err != 0) {
			printk(&amp;quot;ERROR: mqtt_live %d\n&amp;quot;, err);
			break;
		}

		if ((fds.revents &amp;amp; POLLIN) == POLLIN) {
			err = mqtt_input(&amp;amp;client);
			if (err != 0) {
				printk(&amp;quot;ERROR: mqtt_input %d\n&amp;quot;, err);
				break;
			}
		}

		if ((fds.revents &amp;amp; POLLERR) == POLLERR) {
			printk(&amp;quot;POLLERR\n&amp;quot;);
			break;
		}

		if ((fds.revents &amp;amp; POLLNVAL) == POLLNVAL) {
			printk(&amp;quot;POLLNVAL\n&amp;quot;);
			break;
		}

//                subscribe();
//                k_sleep(K_MSEC(10000));
	}

	printk(&amp;quot;Disconnecting MQTT client...\n&amp;quot;);

	err = mqtt_disconnect(&amp;amp;client);
	if (err) {
		printk(&amp;quot;Could not disconnect MQTT client. Error: %d\n&amp;quot;, err);
	}
}
&lt;/pre&gt;&lt;/p&gt;
&lt;p&gt;&lt;/p&gt;
&lt;p&gt;But because it does not work, we are considering other ways already....&lt;/p&gt;&lt;div style="clear:both;"&gt;&lt;/div&gt;</description></item></channel></rss>