HTTPS#
https:// URLs are fetched over lwIP-CE’s TLS stack. There is nothing to configure: LWHTTP opens a TLS socket,
lwIP-CE sends the host name with SNI and verifies the certificate chain against its truststore.
Before the first handshake#
lwIP-CE waits for DHCP, DNS, the clock (SNTP) and its random number generator before it starts a handshake. The
first HTTPS request after lwip_network_up() therefore takes a few seconds longer; later handshakes are faster, and
reused connections skip them entirely.
The truststore is the lwIPCERT appvar shipped with lwIP-CE. Keep it on the calculator and in sync with the
installed lwIP-CE version.
Limits#
lwIP-CE implements a focused subset of TLS. Two limits matter for real-world sites:
Warning
TLS 1.3 only. Servers that only speak TLS 1.2, including many older AWS load balancers, cannot be reached.
P-256 only. Certificate chains that contain an ECDSA P-384 key anywhere, as many Let’s Encrypt ECDSA, Google and Cloudflare chains do, are rejected. RSA chains and pure P-256 chains work.
Both cases end the request with LWHTTP_ERR_TLS. You can check a server from a computer with:
openssl s_client -connect example.com:443 -tls1_3 -showcerts </dev/null
Errors#
Certificate problems (expired, wrong host, self-signed, unknown root) and handshake failures all report
LWHTTP_ERR_TLS. For more detail, lwIP-CE’s lwip_get_traceback() lists the internal error sites of the last
failures.