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
  • It looks like your heap size is too small and the malloc fails. First try to increase the size of the heap so that the malloc will no longer fail.

    The "mbedTLS_config.h" preconfigured for SMTP client does however limit the content size to 8k, which is usually sufficient:

    #define MBEDTLS_SSL_MAX_CONTENT_LEN             8192
    

    mbedTLS allocates two buffers MBEDTLS_SSL_IN_CONTENT_LEN and MBEDTLS_SSL_OUT_CONTENT_LEN per session. If you reduce max content length by 8k, you save 16k of a heap.

    The buffer must be capable of accepting the entire chain of certificates, that is exchanged during the handshake. So if your SMTPS server has set up a certificate chain that is larger, 8k may not be enough. You can, however, do a little experiment with the sizes. Because this is an embedded application, we always face memory limitations.

    The size of the message you want to send in an email and the max content length are not related. You can send emails that have hundreds of kilobytes.

Reply
  • It looks like your heap size is too small and the malloc fails. First try to increase the size of the heap so that the malloc will no longer fail.

    The "mbedTLS_config.h" preconfigured for SMTP client does however limit the content size to 8k, which is usually sufficient:

    #define MBEDTLS_SSL_MAX_CONTENT_LEN             8192
    

    mbedTLS allocates two buffers MBEDTLS_SSL_IN_CONTENT_LEN and MBEDTLS_SSL_OUT_CONTENT_LEN per session. If you reduce max content length by 8k, you save 16k of a heap.

    The buffer must be capable of accepting the entire chain of certificates, that is exchanged during the handshake. So if your SMTPS server has set up a certificate chain that is larger, 8k may not be enough. You can, however, do a little experiment with the sizes. Because this is an embedded application, we always face memory limitations.

    The size of the message you want to send in an email and the max content length are not related. You can send emails that have hundreds of kilobytes.

Children
No data