blob: 2ae74c910d740fd6b257809a32b067f7c5a4d0d6 [file] [log] [blame] [view]
Manuel Pégourié-Gonnard89d4ab02021-04-23 11:54:27 +02001Migrating from Mbed TLS 2.x to Mbed TLS 3.0
2===========================================
3
4This guide details the steps required to migrate from Mbed TLS version 2.x to
5Mbed TLS version 3.0 or greater. Unlike normal releases, Mbed TLS 3.0 breaks
6compatibility with previous versions, so users (and alt implementors) might
7need to change their own code in order to make it work with Mbed TLS 3.0.
8
9Here's the list of breaking changes; each entry should help you answer these
10two questions: (1) am I affected? (2) if yes, what's my migration path?
11
12Some function parameters were made const
13----------------------------------------
14
15Various functions in the PK and ASN.1 modules had a `const` qualifier added to
16some of their parameters.
17
18This normally doesn't affect your code, unless you use pointers to reference
19those functions. In this case, you'll need to update the type of your pointers
20in order to match the new signature.
21
22Deprecated functions were removed from hashing modules
23------------------------------------------------------
24
25Modules: MD2, MD4, MD5, SHA1, SHA256, SHA512, MD.
26
27- The functions `mbedtls_xxx_starts()`, `mbedtls_xxx_update()`,
28 `mbedtls_xxx_finish()` and `mbedtls_xxx()` were removed. Please use the
29function with the same name with `_ret` appended and check the return value.
30- The function `mbedtls_md_init_ctx()` was removed; please use
31 `mbedtls_md_setup()` instead.
32- The functions `mbedtls_xxx_process()` were removed. You normally don't need
Manuel Pégourié-Gonnard143b1e32021-05-05 09:46:01 +020033 to call that from application code. However if you do (or if you want to
Manuel Pégourié-Gonnard89d4ab02021-04-23 11:54:27 +020034provide your own version of that function), please use
35`mbedtls_internal_xxx_process()` instead, and check the return value.
36
37Deprecated error codes for hardware failures were removed
38---------------------------------------------------------
39
40- The macros `MBEDTLS_ERR_xxx_FEATURE_UNSUPPORTED` from various crypto modules
41 were removed; `MBEDTLS_ERR_PLATFORM_FEATURE_UNSUPPORTED` is now used
42instead.
43- The macros `MBEDTLS_ERR_xxx_HW_ACCEL_FAILED` from various crypto modules
44 were removed; `MBEDTLS_ERR_PLATFORM_HW_ACCEL_FAILED` is now used instead.
45
46Deprecated names for PSA constants and types were removed
47---------------------------------------------------------
48
Manuel Pégourié-Gonnard2960b2e2021-04-26 09:57:36 +020049Some constants and types that were present in beta versions of the PSA Crypto
Manuel Pégourié-Gonnard143b1e32021-05-05 09:46:01 +020050API were removed from version 1.0 of specification. Please switch to the new
Manuel Pégourié-Gonnard89d4ab02021-04-23 11:54:27 +020051names provided by the 1.0 specification instead.
52
53Internal / alt-focused headers were moved to a private location
54----------------------------------------------------------------
55
56This shouldn't affect users who took care not to include headers that
57were documented as internal, despite being in the public include directory.
58
59If you're providing alt implementations of ECP or RSA, you'll need to add our
60`library` directory to your include path when building your alt
61implementations, and note that `ecp_internal.h` and `rsa_internal.h` have been
Gilles Peskine6a2fb612021-05-24 22:25:04 +020062renamed to `ecp_internal_alt.h` and `rsa_alt_helpers.h` respectively.
Manuel Pégourié-Gonnard89d4ab02021-04-23 11:54:27 +020063
64If you're a library user and used to rely on having access to a structure or
65function that's now in a private header, please reach out on the mailing list
66and explain your need; we'll consider adding a new API in a future version.
67
Manuel Pégourié-Gonnard89d4ab02021-04-23 11:54:27 +020068Remove the certs module from the library
69----------------------------------------
70
71This should not affect production use of the library, as the certificates and
72keys included there were never suitable for production use.
73
74However it might affect you if you relied on them for testing purposes. In
75that case, please embed your own test certificates in your test code; now that
76`certs.c` is out of the library there is no longer any stability guaranteed
77and it may change in incompatible ways at any time.
78
79Remove the HAVEGE module
80------------------------
81
82This doesn't affect people using the default configuration as it was already
83disabled by default.
84
85This only affects users who called the HAVEGE modules directly (not
Manuel Pégourié-Gonnard143b1e32021-05-05 09:46:01 +020086recommended), or users who used it through the entropy module but had it as the
Manuel Pégourié-Gonnard89d4ab02021-04-23 11:54:27 +020087only source of entropy. If you're in that case, please declare OS or hardware
88RNG interfaces with `mbedtls_entropy_add_source()` and/or use an entropy seed
89file created securely during device provisioning. See
90<https://tls.mbed.org/kb/how-to/add-entropy-sources-to-entropy-pool> for more
91information.
92
93Remove support for parsing SSLv2 ClientHello
94--------------------------------------------
95
96This doesn't affect people using the default configuration as it was already
97disabled by default.
98
Manuel Pégourié-Gonnard143b1e32021-05-05 09:46:01 +020099This only affects TLS servers that have clients who send an SSLv2 ClientHello.
Manuel Pégourié-Gonnard89d4ab02021-04-23 11:54:27 +0200100These days clients are very unlikely to do that. If you have a client that
101does, please try contacting them and encouraging them to upgrade their
102software.
103
104Remove support for SSL 3.0
105--------------------------
106
107This doesn't affect people using the default configuration as it was already
108disabled by default.
109
110This only affects TLS users who explicitly enabled `MBEDTLS_SSL_PROTO_SSL3`
111and relied on that version in order to communicate with peers that are not up
Manuel Pégourié-Gonnard143b1e32021-05-05 09:46:01 +0200112to date. If one of your peers is in that case, please try contacting them and
Manuel Pégourié-Gonnard89d4ab02021-04-23 11:54:27 +0200113encouraging them to upgrade their software.
114
115Remove support for compatibility with old Mbed TLS's truncated HMAC
116-------------------------------------------------------------------
117
118This doesn't affect people using the default configuration as it was already
119disabled by default.
120
Manuel Pégourié-Gonnard143b1e32021-05-05 09:46:01 +0200121This only affects TLS users who enabled `MBEDTLS_SSL_TRUNCATED_HMAC_COMPAT` and
Manuel Pégourié-Gonnard89d4ab02021-04-23 11:54:27 +0200122used the Truncated HMAC extension to communicate with peers using old version
123of Mbed TLS. Please consider using a CCM-8 ciphersuite instead of the
Manuel Pégourié-Gonnard143b1e32021-05-05 09:46:01 +0200124Truncated HMAC extension, or convincing your peer to upgrade their version of
Manuel Pégourié-Gonnard89d4ab02021-04-23 11:54:27 +0200125Mbed TLS.
126
127Remove support for TLS record-level compression
128-----------------------------------------------
129
130This doesn't affect people using the default configuration as it was already
131disabled by default.
132
133This only affects TLS users who enabled `MBEDTLS_ZLIB_SUPPORT`. This will not
134cause any failures however if you used to enable TLS record-level compression
135you may find that your bandwidth usage increases without compression. There's
136no general solution to this problem; application protocols might have their
137own compression mechanisms and are in a better position than the TLS stack to
138avoid variants of the CRIME and BREACH attacks.
139
140Remove support for TLS RC4-based ciphersuites
141---------------------------------------------
142
143This does not affect people who used the default `config.h` and the default
Manuel Pégourié-Gonnard2960b2e2021-04-26 09:57:36 +0200144list of ciphersuites, as RC4-based ciphersuites were already not negotiated in
Manuel Pégourié-Gonnard89d4ab02021-04-23 11:54:27 +0200145that case.
146
147Please switch to any of the modern, recommended ciphersuites (based on
148AES-GCM, AES-CCM or ChachaPoly for example) and if your peer doesn't support
149any, encourage them to upgrade their software.
150
151Remove support for TLS single-DES ciphersuites
152----------------------------------------------
153
154This doesn't affect people using the default configuration as it was already
155disabled by default.
156
157Please switch to any of the modern, recommended ciphersuites (based on
158AES-GCM, AES-CCM or ChachaPoly for example) and if your peer doesn't support
159any, encourage them to upgrade their software.
160
161Remove support for TLS record-level hardware acceleration
162---------------------------------------------------------
163
164This doesn't affect people using the default configuration as it was already
165disabled by default.
166
167This feature had been broken for a while so we doubt anyone still used it.
168However if you did, please reach out on the mailing list and let us know about
169your use case.
170
171Remove wrapper for libpkcs11-helper
172-----------------------------------
173
174This doesn't affect people using the default configuration as it was already
175disabled by default.
176
177If you used to rely on this module in order to store your private keys
178securely, please have a look at the key management facilities provided by the
179PSA crypto API. If you have a use case that's not covered yet by this API,
180please reach out on the mailing list.
181
182Remove config option `MBEDTLS_SSL_DEFAULT_TICKET_LIFETIME`
183----------------------------------------------------------
184
185This doesn't affect people using the default configuration.
186
Manuel Pégourié-Gonnard57e93e52021-04-26 09:59:47 +0200187This option has not had any effect for a long time. Please use the `lifetime`
Manuel Pégourié-Gonnard89d4ab02021-04-23 11:54:27 +0200188parameter of `mbedtls_ssl_ticket_setup()` instead.
189
190Remove helpers for the transition from Mbed TLS 1.3 to Mbed TLS 2.0
191-------------------------------------------------------------------
192
193This only affects people who've been using Mbed TLS since before version 2.0
194and still relied on `compat-1.3.h` in their code.
195
196Please use the new names directly in your code; `scripts/rename.pl` (from any
197of the 2.x releases - no longer included in 3.0) might help you do that.