Mbedtls_ssl_handshake fails and returns -0x4D80 error code

I was able to get the mbedTLS logs at debug level = 2.

  1. Here is a log when working with Mozilla Firefox (everything seems to work well):

     19.06.24 19:00:20.038 ssl_tls.c:6754: |2| => handshake
    
     19.06.24 19:00:20.074 ssl_srv.c:4219: |2| server state: 0
    
     19.06.24 19:00:20.081 ssl_tls.c:2471: |2| => flush output
    
     19.06.24 19:00:20.088 ssl_tls.c:2483: |2| <= flush output
    
     19.06.24 19:00:20.096 ssl_srv.c:4219: |2| server state: 1
    
     19.06.24 19:00:20.103 ssl_tls.c:2471: |2| => flush output
    
     19.06.24 19:00:20.110 ssl_tls.c:2483: |2| <= flush output
    
     19.06.24 19:00:20.116 ssl_srv.c:1192: |2| => parse client hello
    
     19.06.24 19:00:20.123 ssl_tls.c:2252: |2| => fetch input
    
     19.06.24 19:00:20.133 ssl_tls.c:2413: |2| in_left: 0, nb_want: 5
    
     19.06.24 19:00:20.140 ssl_tls.c:2437: |2| in_left: 0, nb_want: 5
    
     19.06.24 19:00:20.147 ssl_tls.c:2438: |2| ssl->f_recv(_timeout)() returned 5 (-0xfffffffb)
    
     19.06.24 19:00:20.155 ssl_tls.c:2458: |2| <= fetch input
    
     19.06.24 19:00:20.161 ssl_tls.c:2252: |2| => fetch input
    
     19.06.24 19:00:20.168 ssl_tls.c:2413: |2| in_left: 5, nb_want: 517
    
     19.06.24 19:00:20.176 ssl_tls.c:2437: |2| in_left: 5, nb_want: 517
    
     19.06.24 19:00:20.186 ssl_tls.c:2438: |2| ssl->f_recv(_timeout)() returned 512 (-0xfffffe00)
    
     19.06.24 19:00:20.193 ssl_tls.c:2458: |2| <= fetch input
    
     19.06.24 19:00:20.200 ssl_srv.c:1974: |2| selected ciphersuite: TLS-ECDHE-ECDSA-WITH-AES-128-GCM-SHA256
    
     19.06.24 19:00:20.207 ssl_srv.c:2008: |2| <= parse client hello
    
     19.06.24 19:00:20.214 ssl_srv.c:4219: |2| server state: 2
    
     19.06.24 19:00:20.221 ssl_tls.c:2471: |2| => flush output
    
     19.06.24 19:00:20.228 ssl_tls.c:2483: |2| <= flush output
    
     19.06.24 19:00:20.238 ssl_srv.c:2383: |2| => write server hello
    
     19.06.24 19:00:20.246 ssl_tls.c:2764: |2| => write record
    
     19.06.24 19:00:20.253 ssl_tls.c:2471: |2| => flush output
    
     19.06.24 19:00:20.260 ssl_tls.c:2490: |2| message length: 92, out_left: 92
    
     19.06.24 19:00:20.267 ssl_tls.c:2496: |2| ssl->f_send() returned 92 (-0xffffffa4)
    
     19.06.24 19:00:20.274 ssl_tls.c:2523: |2| <= flush output
    
     19.06.24 19:00:20.281 ssl_tls.c:2922: |2| <= write record
    
     19.06.24 19:00:20.287 ssl_srv.c:2600: |2| <= write server hello
    
     19.06.24 19:00:20.298 ssl_srv.c:4219: |2| server state: 3
    
     19.06.24 19:00:20.304 ssl_tls.c:2471: |2| => flush output
    
     19.06.24 19:00:20.311 ssl_tls.c:2483: |2| <= flush output
    
     19.06.24 19:00:20.318 ssl_tls.c:4259: |2| => write certificate
    
     19.06.24 19:00:20.326 ssl_tls.c:2764: |2| => write record
    
     19.06.24 19:00:20.335 ssl_tls.c:2471: |2| => flush output
    
     19.06.24 19:00:20.341 ssl_tls.c:2490: |2| message length: 1163, out_left: 1163
    
     19.06.24 19:00:20.349 ssl_tls.c:2496: |2| ssl->f_send() returned 1163 (-0xfffffb75)
    
     19.06.24 19:00:20.359 ssl_tls.c:2523: |2| <= flush output
    
     19.06.24 19:00:20.365 ssl_tls.c:2922: |2| <= write record
    
     19.06.24 19:00:20.373 ssl_tls.c:4363: |2| <= write certificate
    
     19.06.24 19:00:20.380 ssl_srv.c:4219: |2| server state: 4
    
     19.06.24 19:00:20.387 ssl_tls.c:2471: |2| => flush output
    
     19.06.24 19:00:20.393 ssl_tls.c:2483: |2| <= flush output
    
     19.06.24 19:00:20.400 ssl_srv.c:3232: |2| => write server key exchange
    
     19.06.24 19:00:20.410 ssl_srv.c:3011: |2| ECDHE curve: secp384r1
    
     19.06.24 19:00:21.173 ssl_tls.c:2764: |2| => write record
    
     19.06.24 19:00:21.180 ssl_tls.c:2471: |2| => flush output
    
     19.06.24 19:00:21.187 ssl_tls.c:2490: |2| message length: 185, out_left: 185
    
     19.06.24 19:00:21.195 ssl_tls.c:2496: |2| ssl->f_send() returned 185 (-0xffffff47)
    
     19.06.24 19:00:21.202 ssl_tls.c:2523: |2| <= flush output
    
     19.06.24 19:00:21.209 ssl_tls.c:2922: |2| <= write record
    
     19.06.24 19:00:21.234 ssl_srv.c:3316: |2| <= write server key exchange
    
     19.06.24 19:00:21.244 ssl_srv.c:4219: |2| server state: 5
    
     19.06.24 19:00:21.251 ssl_tls.c:2471: |2| => flush output
    
     19.06.24 19:00:21.258 ssl_tls.c:2483: |2| <= flush output
    
     19.06.24 19:00:21.265 ssl_srv.c:2645: |2| => write certificate request
    
     19.06.24 19:00:21.272 ssl_srv.c:2663: |2| <= skip write certificate request
    
     19.06.24 19:00:21.279 ssl_srv.c:4219: |2| server state: 6
    
     19.06.24 19:00:21.286 ssl_tls.c:2471: |2| => flush output
    
     19.06.24 19:00:21.293 ssl_tls.c:2483: |2| <= flush output
    
     19.06.24 19:00:21.302 ssl_srv.c:3324: |2| => write server hello done
    
     19.06.24 19:00:21.309 ssl_tls.c:2764: |2| => write record
    
     19.06.24 19:00:21.316 ssl_tls.c:2471: |2| => flush output
    
     19.06.24 19:00:21.324 ssl_tls.c:2490: |2| message length: 9, out_left: 9
    
     19.06.24 19:00:21.331 ssl_tls.c:2496: |2| ssl->f_send() returned 9 (-0xfffffff7)
    
     19.06.24 19:00:21.338 ssl_tls.c:2523: |2| <= flush output
    
     19.06.24 19:00:21.344 ssl_tls.c:2922: |2| <= write record
    
     19.06.24 19:00:21.354 ssl_srv.c:3343: |2| <= write server hello done
    
     19.06.24 19:00:21.362 ssl_srv.c:4219: |2| server state: 7
    
     19.06.24 19:00:21.368 ssl_tls.c:2471: |2| => flush output
    
     19.06.24 19:00:21.375 ssl_tls.c:2483: |2| <= flush output
    
     19.06.24 19:00:21.382 ssl_tls.c:4376: |2| => parse certificate
    
     19.06.24 19:00:21.389 ssl_tls.c:4406: |2| <= skip parse certificate
    
     19.06.24 19:00:21.396 ssl_srv.c:4219: |2| server state: 8
    
     19.06.24 19:00:21.403 ssl_tls.c:2471: |2| => flush output
    
     19.06.24 19:00:21.413 ssl_tls.c:2483: |2| <= flush output
    
     19.06.24 19:00:21.420 ssl_srv.c:3664: |2| => parse client key exchange
    
     19.06.24 19:00:21.427 ssl_tls.c:3809: |2| => read record
    
     19.06.24 19:00:21.434 ssl_tls.c:2252: |2| => fetch input
    
     19.06.24 19:00:21.441 ssl_tls.c:2413: |2| in_left: 0, nb_want: 5
    
     19.06.24 19:00:21.655 ssl_tls.c:2437: |2| in_left: 0, nb_want: 5
    
     19.06.24 19:00:21.662 ssl_tls.c:2438: |2| ssl->f_recv(_timeout)() returned 5 (-0xfffffffb)
    
     19.06.24 19:00:21.669 ssl_tls.c:2458: |2| <= fetch input
    
     19.06.24 19:00:21.679 ssl_tls.c:2252: |2| => fetch input
    
     19.06.24 19:00:21.686 ssl_tls.c:2413: |2| in_left: 5, nb_want: 107
    
     19.06.24 19:00:21.693 ssl_tls.c:2437: |2| in_left: 5, nb_want: 107
    
     19.06.24 19:00:21.700 ssl_tls.c:2438: |2| ssl->f_recv(_timeout)() returned 102 (-0xffffff9a)
    
     19.06.24 19:00:21.707 ssl_tls.c:2458: |2| <= fetch input
    
     19.06.24 19:00:21.714 ssl_tls.c:3846: |2| <= read record
    
     19.06.24 19:00:22.185 ssl_tls.c:0509: |2| => derive keys
    
     19.06.24 19:00:22.199 ssl_tls.c:0983: |2| <= derive keys
    
     19.06.24 19:00:22.206 ssl_srv.c:3928: |2| <= parse client key exchange
    
     19.06.24 19:00:22.212 ssl_srv.c:4219: |2| server state: 9
    
     19.06.24 19:00:22.219 ssl_tls.c:2471: |2| => flush output
    
     19.06.24 19:00:22.226 ssl_tls.c:2483: |2| <= flush output
    
     19.06.24 19:00:22.233 ssl_srv.c:3975: |2| => parse certificate verify
    
     19.06.24 19:00:22.240 ssl_srv.c:3984: |2| <= skip parse certificate verify
    
     19.06.24 19:00:22.247 ssl_srv.c:4219: |2| server state: 10
    
     19.06.24 19:00:22.257 ssl_tls.c:2471: |2| => flush output
    
     19.06.24 19:00:22.264 ssl_tls.c:2483: |2| <= flush output
    
     19.06.24 19:00:22.271 ssl_tls.c:4779: |2| => parse change cipher spec
    
     19.06.24 19:00:22.278 ssl_tls.c:3809: |2| => read record
    
     19.06.24 19:00:22.285 ssl_tls.c:2252: |2| => fetch input
    
     19.06.24 19:00:22.292 ssl_tls.c:2413: |2| in_left: 0, nb_want: 5
    
     19.06.24 19:00:22.318 ssl_tls.c:2437: |2| in_left: 0, nb_want: 5
    
     19.06.24 19:00:22.325 ssl_tls.c:2438: |2| ssl->f_recv(_timeout)() returned 5 (-0xfffffffb)
    
     19.06.24 19:00:22.335 ssl_tls.c:2458: |2| <= fetch input
    
     19.06.24 19:00:22.342 ssl_tls.c:2252: |2| => fetch input
    
     19.06.24 19:00:22.349 ssl_tls.c:2413: |2| in_left: 5, nb_want: 6
    
     19.06.24 19:00:22.356 ssl_tls.c:2437: |2| in_left: 5, nb_want: 6
    
     19.06.24 19:00:22.363 ssl_tls.c:2438: |2| ssl->f_recv(_timeout)() returned 1 (-0xffffffff)
    
     19.06.24 19:00:22.370 ssl_tls.c:2458: |2| <= fetch input
    
     19.06.24 19:00:22.377 ssl_tls.c:3846: |2| <= read record
    
     19.06.24 19:00:22.396 ssl_tls.c:4857: |2| <= parse change cipher spec
    
     19.06.24 19:00:22.403 ssl_srv.c:4219: |2| server state: 11
    
     19.06.24 19:00:22.410 ssl_tls.c:2471: |2| => flush output
    
     19.06.24 19:00:22.417 ssl_tls.c:2483: |2| <= flush output
    
     19.06.24 19:00:22.424 ssl_tls.c:5415: |2| => parse finished
    
     19.06.24 19:00:22.431 ssl_tls.c:5114: |2| => calc  finished tls sha256
    
     19.06.24 19:00:22.438 ssl_tls.c:5144: |2| <= calc  finished
    
     19.06.24 19:00:22.445 ssl_tls.c:3809: |2| => read record
    
     19.06.24 19:00:22.455 ssl_tls.c:2252: |2| => fetch input
    
     19.06.24 19:00:22.462 ssl_tls.c:2413: |2| in_left: 0, nb_want: 5
    
     19.06.24 19:00:22.469 ssl_tls.c:2437: |2| in_left: 0, nb_want: 5
    
     19.06.24 19:00:22.475 ssl_tls.c:2438: |2| ssl->f_recv(_timeout)() returned 5 (-0xfffffffb)
    
     19.06.24 19:00:22.482 ssl_tls.c:2458: |2| <= fetch input
    
     19.06.24 19:00:22.489 ssl_tls.c:2252: |2| => fetch input
    
     19.06.24 19:00:22.496 ssl_tls.c:2413: |2| in_left: 5, nb_want: 45
    
     19.06.24 19:00:22.503 ssl_tls.c:2437: |2| in_left: 5, nb_want: 45
    
     19.06.24 19:00:22.513 ssl_tls.c:2438: |2| ssl->f_recv(_timeout)() returned 40 (-0xffffffd8)
    
     19.06.24 19:00:22.520 ssl_tls.c:2458: |2| <= fetch input
    
     19.06.24 19:00:22.527 ssl_tls.c:1619: |2| => decrypt buf
    
     19.06.24 19:00:22.534 ssl_tls.c:2092: |2| <= decrypt buf
    
     19.06.24 19:00:22.542 ssl_tls.c:3846: |2| <= read record
    
     19.06.24 19:00:22.548 ssl_tls.c:5483: |2| <= parse finished
    
     19.06.24 19:00:22.555 ssl_srv.c:4219: |2| server state: 12
    
     19.06.24 19:00:22.565 ssl_tls.c:2471: |2| => flush output
    
     19.06.24 19:00:22.572 ssl_tls.c:2483: |2| <= flush output
    
     19.06.24 19:00:22.579 ssl_tls.c:4756: |2| => write change cipher spec
    
     19.06.24 19:00:22.586 ssl_tls.c:2764: |2| => write record
    
     19.06.24 19:00:22.593 ssl_tls.c:2471: |2| => flush output
    
     19.06.24 19:00:22.600 ssl_tls.c:2490: |2| message length: 6, out_left: 6
    
     19.06.24 19:00:22.607 ssl_tls.c:2496: |2| ssl->f_send() returned 6 (-0xfffffffa)
    
     19.06.24 19:00:22.614 ssl_tls.c:2523: |2| <= flush output
    
     19.06.24 19:00:22.624 ssl_tls.c:2922: |2| <= write record
    
     19.06.24 19:00:22.631 ssl_tls.c:4770: |2| <= write change cipher spec
    
     19.06.24 19:00:22.637 ssl_srv.c:4219: |2| server state: 13
    
     19.06.24 19:00:22.644 ssl_tls.c:2471: |2| => flush output
    
     19.06.24 19:00:22.651 ssl_tls.c:2483: |2| <= flush output
    
     19.06.24 19:00:22.657 ssl_tls.c:5289: |2| => write finished
    
     19.06.24 19:00:22.664 ssl_tls.c:5114: |2| => calc  finished tls sha256
    
     19.06.24 19:00:22.671 ssl_tls.c:5144: |2| <= calc  finished
    
     19.06.24 19:00:22.681 ssl_tls.c:2764: |2| => write record
    
     19.06.24 19:00:22.687 ssl_tls.c:1287: |2| => encrypt buf
    
     19.06.24 19:00:22.694 ssl_tls.c:1605: |2| <= encrypt buf
    
     19.06.24 19:00:22.701 ssl_tls.c:2471: |2| => flush output
    
     19.06.24 19:00:22.707 ssl_tls.c:2490: |2| message length: 45, out_left: 45
    
     19.06.24 19:00:22.733 ssl_tls.c:2496: |2| ssl->f_send() returned 45 (-0xffffffd3)
    
     19.06.24 19:00:22.740 ssl_tls.c:2523: |2| <= flush output
    
     19.06.24 19:00:22.750 ssl_tls.c:2922: |2| <= write record
    
     19.06.24 19:00:22.757 ssl_tls.c:5398: |2| <= write finished
    
     19.06.24 19:00:22.764 ssl_srv.c:4219: |2| server state: 14
    
     19.06.24 19:00:22.771 ssl_tls.c:2471: |2| => flush output
    
     19.06.24 19:00:22.778 ssl_tls.c:2483: |2| <= flush output
    
     19.06.24 19:00:22.785 ssl_srv.c:4324: |2| handshake: done
    
     19.06.24 19:00:22.792 ssl_srv.c:4219: |2| server state: 15
    
     19.06.24 19:00:22.799 ssl_tls.c:2471: |2| => flush output
    
     19.06.24 19:00:22.806 ssl_tls.c:2483: |2| <= flush output
    
     19.06.24 19:00:22.816 ssl_tls.c:6764: |2| <= handshake
    
     19.06.24 19:00:22.823 ssl_tls.c:6940: |2| => read
    
     19.06.24 19:00:22.830 ssl_tls.c:3809: |2| => read record
    
     19.06.24 19:00:22.837 ssl_tls.c:2252: |2| => fetch input
    
     19.06.24 19:00:22.844 ssl_tls.c:2413: |2| in_left: 0, nb_want: 5
    
     19.06.24 19:00:22.851 ssl_tls.c:2437: |2| in_left: 0, nb_want: 5
    
     19.06.24 19:00:22.858 ssl_tls.c:2438: |2| ssl->f_recv(_timeout)() returned 5 (-0xfffffffb)
    
     19.06.24 19:00:22.865 ssl_tls.c:2458: |2| <= fetch input
    
     19.06.24 19:00:22.876 ssl_tls.c:2252: |2| => fetch input
    
     19.06.24 19:00:22.883 ssl_tls.c:2413: |2| in_left: 5, nb_want: 734
    
     19.06.24 19:00:22.890 ssl_tls.c:2437: |2| in_left: 5, nb_want: 734
    
     19.06.24 19:00:22.897 ssl_tls.c:2438: |2| ssl->f_recv(_timeout)() returned 605 (-0xfffffda3)
    
     19.06.24 19:00:22.904 ssl_tls.c:2437: |2| in_left: 610, nb_want: 734
    
     19.06.24 19:00:22.911 ssl_tls.c:2438: |2| ssl->f_recv(_timeout)() returned 124 (-0xffffff84)
    
     19.06.24 19:00:22.921 ssl_tls.c:2458: |2| <= fetch input
    
     19.06.24 19:00:22.928 ssl_tls.c:1619: |2| => decrypt buf
    
     19.06.24 19:00:22.936 ssl_tls.c:2092: |2| <= decrypt buf
    
     19.06.24 19:00:22.943 ssl_tls.c:3846: |2| <= read record
    
     19.06.24 19:00:22.951 ssl_tls.c:7228: |2| <= read
    
     19.06.24 19:00:23.958 ssl_tls.c:7330: |2| => write
    
     19.06.24 19:00:23.966 ssl_tls.c:2764: |2| => write record
    
     19.06.24 19:00:23.973 ssl_tls.c:1287: |2| => encrypt buf
    
     19.06.24 19:00:23.980 ssl_tls.c:1605: |2| <= encrypt buf
    
     19.06.24 19:00:23.990 ssl_tls.c:2471: |2| => flush output
    
     19.06.24 19:00:23.997 ssl_tls.c:2490: |2| message length: 285, out_left: 285
    
     19.06.24 19:00:23.004 ssl_tls.c:2496: |2| ssl->f_send() returned 285 (-0xfffffee3)
    
     19.06.24 19:00:23.011 ssl_tls.c:2523: |2| <= flush output
    
     19.06.24 19:00:23.018 ssl_tls.c:2922: |2| <= write record
    
     19.06.24 19:00:23.025 ssl_tls.c:7358: |2| <= write
    
     19.06.24 19:00:23.032 ssl_tls.c:7330: |2| => write
    
     19.06.24 19:00:23.039 ssl_tls.c:2764: |2| => write record
    
     19.06.24 19:00:23.049 ssl_tls.c:1287: |2| => encrypt buf
    
     19.06.24 19:00:23.056 ssl_tls.c:1605: |2| <= encrypt buf
    
     19.06.24 19:00:23.063 ssl_tls.c:2471: |2| => flush output
    
     19.06.24 19:00:23.070 ssl_tls.c:2490: |2| message length: 36, out_left: 36
    
     19.06.24 19:00:23.078 ssl_tls.c:2496: |2| ssl->f_send() returned 36 (-0xffffffdc)
    
     19.06.24 19:00:23.085 ssl_tls.c:2523: |2| <= flush output
    
     19.06.24 19:00:23.092 ssl_tls.c:2922: |2| <= write record
    
     19.06.24 19:00:23.099 ssl_tls.c:7358: |2| <= write
    
     19.06.24 19:00:23.109 ssl_tls.c:7330: |2| => write
    
     19.06.24 19:00:23.116 ssl_tls.c:2764: |2| => write record
    
     19.06.24 19:00:23.123 ssl_tls.c:1287: |2| => encrypt buf
    
     19.06.24 19:00:23.149 ssl_tls.c:1605: |2| <= encrypt buf
    
     19.06.24 19:00:23.156 ssl_tls.c:2471: |2| => flush output
    
     19.06.24 19:00:23.163 ssl_tls.c:2490: |2| message length: 36, out_left: 36
    
     19.06.24 19:00:23.170 ssl_tls.c:2496: |2| ssl->f_send() returned 36 (-0xffffffdc)
    
     19.06.24 19:00:23.177 ssl_tls.c:2523: |2| <= flush output
    
     19.06.24 19:00:23.187 ssl_tls.c:2922: |2| <= write record
    
     19.06.24 19:00:23.195 ssl_tls.c:7358: |2| <= write
    
     19.06.24 19:00:23.202 ssl_tls.c:7373: |2| => write close notify
    
     19.06.24 19:00:23.209 ssl_tls.c:4180: |2| => send alert message
    
     19.06.24 19:00:23.216 ssl_tls.c:2764: |2| => write record
    
     19.06.24 19:00:23.223 ssl_tls.c:1287: |2| => encrypt buf
    
     19.06.24 19:00:23.230 ssl_tls.c:1605: |2| <= encrypt buf
    
     19.06.24 19:00:23.237 ssl_tls.c:2471: |2| => flush output
    
     19.06.24 19:00:23.247 ssl_tls.c:2490: |2| message length: 31, out_left: 31
    
     19.06.24 19:00:23.254 ssl_tls.c:2496: |2| ssl->f_send() returned 31 (-0xffffffe1)
    
     19.06.24 19:00:23.261 ssl_tls.c:2523: |2| <= flush output
    
     19.06.24 19:00:23.268 ssl_tls.c:2922: |2| <= write record
    
     19.06.24 19:00:23.275 ssl_tls.c:4193: |2| <= send alert message
    
     19.06.24 19:00:23.282 ssl_tls.c:7389: |2| <= write close notify