This discussion has been locked.
You can no longer post new replies to this discussion. If you have a question you can start a new discussion

SMTPS MbedTLS TLS not working

Hi,

I am using Keil v5 (RTX5) with the EVBK-IMXRT1050 board.

I have successfully sent an email using the example code given through the pack installer, SMTP_client. Now I want to send a secure email, SMTPS, using the same example but adding mbedTLS. I followed the instructions given from Keil, but have not been able to get a secure email to send.
www.keil.com/.../use_secure_components.html

Below is my event recorder when trying to send out a SMTPS using mbedTLS, everything works fine until I reach line 41 where TLS should begin. The socket is closed right when TLS should begin and I am not sure why. Wireshark matched the event recorder.

If anyone has had this issue or have any tips on getting around this error, please reply. Thanks.

Event recorder:
Event, Time (sec), Component, Event Property, Value
0, 5.45808617, EvCtrl, EventRecorderInitialize, Restart Count = 3
1, 5.45812999, EvCtrl, EventRecorderStart,
2, 5.45863391, Net_SYS, InitSystem, ver=7.10.0
3, 5.45974125, Net_DHCP, InitClient, vcid=0 opt=0
4, 5.45976630, Net_DHCP, StartClient,
5, 5.45981325, Net_SMTP, InitClient, smtp
6, 5.45986813, Net_SYS, InitComplete, success
7, 5.46012398, Net_SMTP, SendMail, recipients=1
8, 5.46044442, Net_ETH, LinkDownError, no-link
9, 5.66058112, Net_ETH, LinkDownError, no-link
10, 7.66053657, Net_ETH, LinkDownError, no-link
11, 8.36051481, Net_DHCP, ClientState, state=INIT
12, 8.36055019, Net_DHCP, SendDhcpMessage, type=DHCP_DISCOVER bcast=1
13, 8.36076685, Net_DHCP, NextState, state=SELECTING
14, 8.36318817, Net_DHCP, ReceiveFrame, server=10.0.2.17 len=300
15, 8.36321537, Net_DHCP, ClientState, state=SELECTING
16, 8.36322062, Net_DHCP, DhcpOfferReceived,
17, 8.36322724, Net_DHCP, ShowServerId, server_id=10.0.2.17
18, 8.36323507, Net_DHCP, ShowOfferedIpAddress, ip=10.0.2.157
19, 8.36323565, Net_DHCP, SendDhcpMessage, type=DHCP_REQUEST bcast=1
20, 8.36334852, Net_DHCP, NextState, state=REQUESTING
21, 8.36697469, Net_DHCP, ReceiveFrame, server=10.0.2.17 len=300
22, 8.36698434, Net_DHCP, ClientState, state=REQUESTING
23, 8.36699382, Net_DHCP, DhcpAckReceived,
24, 8.36699851, Net_DHCP, ShowAssignedAddress, ip=10.0.2.157
25, 8.36705461, Net_DHCP, ShowLeaseTime, time=171072
26, 8.36705907, Net_DHCP, ShowNetMask, mask=255.255.0.0
27, 8.36706187, Net_DHCP, ShowGatewayAddress, gateway=10.0.2.2
28, 8.36707048, Net_DHCP, ShowDnsServers, pri=8.8.8.8 sec=8.8.4.4
29, 8.36707621, Net_DHCP, NextState, state=BOUND
30, 9.66583049, Net_SMTP, ConnectIp4, ip=10.0.1.2 port=587
31, 9.66751124, Net_SMTP, SocketConnected, sock=1
32, 9.66857944, Net_SMTP, ReceiveFrame, sock=1 len=58
33, 9.66860121, Net_SMTP, ServerReady,
34, 9.66878471, Net_SMTP, SendCommand, command=EHLO evkb-imxrt1050
35, 9.66962207, Net_SMTP, ReceiveFrame, sock=1 len=146
36, 9.66966114, Net_SMTP, EsmtpModeActive,
37, 9.66966166, Net_SMTP, TlsSupportIndicated,
38, 9.66977401, Net_SMTP, SendCommand, command=STARTTLS
39, 9.76064354, Net_SMTP, ReceiveFrame, sock=1 len=30
40, 9.76066607, Net_SMTP, StartTlsAccepted,
41, 9.76085824, Net_SMTP, TlsModeStarted,
42, 9.76109192, Net_SMTP, SocketClosed, sock=1
43, 9.76116411, Net_SMTP, ClientCloseSocket, sock=1
44, 9.86054282, Net_SMTP, ClientDone, cb_event=Error

Parents
  • Thanks for letting me know about the clock settings. Do you have any advise on my earlier message about the bare metal environment?

    My questions are:
    1. Will this mbedTLS SMTPS application work on a bare metal environment without a RTOS?
    2. Does mbedTLS require an outside API, such as Windows API, to run TLS?
    3. Is it possible to move over all the source code to the Arm9 Keilv4 project and get it to work with mbedTLS SMTPS?
    4. I read that some TLS certificates require a date verification and my Arm9 embedded system does not keep track of the current date and time, is this involved in SMTPS?
    5. Can I just copy over all the source and header files from my working SMTPS Arm Cortex 7 project to my bare metal Arm9 project, including all the RTOS and mbedTLS files?

Reply
  • Thanks for letting me know about the clock settings. Do you have any advise on my earlier message about the bare metal environment?

    My questions are:
    1. Will this mbedTLS SMTPS application work on a bare metal environment without a RTOS?
    2. Does mbedTLS require an outside API, such as Windows API, to run TLS?
    3. Is it possible to move over all the source code to the Arm9 Keilv4 project and get it to work with mbedTLS SMTPS?
    4. I read that some TLS certificates require a date verification and my Arm9 embedded system does not keep track of the current date and time, is this involved in SMTPS?
    5. Can I just copy over all the source and header files from my working SMTPS Arm Cortex 7 project to my bare metal Arm9 project, including all the RTOS and mbedTLS files?

Children
  • For a bare metal implementation, mbedTLS requires a socket API. It does not matter on which platform. The network socket interface is in the "net_socket.c".

    For MDK middleware, the interface is in:

    C:\Keil\ARM\PACK\ARM\mbedTLS\1.6.0\MDK\library\mw_network\net_sockets.c
    

    The SMTPS client demo example is in:

    C:\Keil\ARM\PACK\ARM\mbedTLS\1.6.0\programs\ssl\ssl_mail_client.c
    

    You can use those as a reference. However the SMTPS client demo example from mbedTLS pack is only a basic implementation and does not support attachments, multiple recipients, address friendly names and different character encodings.

    Note that MDK Middleware version 7 uses a different mbedTLS interface, which allows integration into the MDK MW as an external component.

    The latest version of the MDK MW that supports ARM9 devices is Version 4. Subsequent versions only support Cortex-M devices.

  • And NO, you can not simply move the code to ARM9 device and expect it to work. The SMTP client in MDK MW version 4 is very limited, has a different API, and does not support SMTPS.