blob: a30e7867712bc5521a8efde934669227362ae5a7 [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
68Remove the option to allow SHA-1 by default in certificates
69-----------------------------------------------------------
70
71This does not affect users who use the default `config.h`, as this option was
72already off by default.
73
74If you used to enable `MBEDTLS_TLS_DEFAULT_ALLOW_SHA1_IN_CERTIFICATES` in your
75`config.h`, first please take a moment to consider whether you really still
76want to accept certificates signed with SHA-1 as those are considered insecure
77and no CA has issued them for a while. If you really need to allow SHA-1 in
Manuel Pégourié-Gonnarde7563062021-04-26 10:08:29 +020078certificates, please set up a custom profile as follows:
79
80```
81const mbedtls_x509_crt_profile mbedtls_x509_crt_custom = {
82 MBEDTLS_X509_ID_FLAG( MBEDTLS_MD_SHA1 ) |
83 MBEDTLS_X509_ID_FLAG( /* other hash */ ) /* | etc */,
84 0xFFFFFFF, /* Or specific PK algs */
85 0xFFFFFFF, /* Or specific curves */
86 2048 /* Or another RSA min bitlen */
87};
88```
89Then pass it to `mbedtls_x509_crt_verify_with_profile()` if you're verifying
90a certificate chain directly, or to `mbedtls_ssl_conf_cert_profile()` if the
91verification happens during a TLS handshake.
Manuel Pégourié-Gonnard89d4ab02021-04-23 11:54:27 +020092
93Remove the certs module from the library
94----------------------------------------
95
96This should not affect production use of the library, as the certificates and
97keys included there were never suitable for production use.
98
99However it might affect you if you relied on them for testing purposes. In
100that case, please embed your own test certificates in your test code; now that
101`certs.c` is out of the library there is no longer any stability guaranteed
102and it may change in incompatible ways at any time.
103
104Remove the HAVEGE module
105------------------------
106
107This doesn't affect people using the default configuration as it was already
108disabled by default.
109
110This only affects users who called the HAVEGE modules directly (not
Manuel Pégourié-Gonnard143b1e32021-05-05 09:46:01 +0200111recommended), or users who used it through the entropy module but had it as the
Manuel Pégourié-Gonnard89d4ab02021-04-23 11:54:27 +0200112only source of entropy. If you're in that case, please declare OS or hardware
113RNG interfaces with `mbedtls_entropy_add_source()` and/or use an entropy seed
114file created securely during device provisioning. See
115<https://tls.mbed.org/kb/how-to/add-entropy-sources-to-entropy-pool> for more
116information.
117
118Remove support for parsing SSLv2 ClientHello
119--------------------------------------------
120
121This doesn't affect people using the default configuration as it was already
122disabled by default.
123
Manuel Pégourié-Gonnard143b1e32021-05-05 09:46:01 +0200124This only affects TLS servers that have clients who send an SSLv2 ClientHello.
Manuel Pégourié-Gonnard89d4ab02021-04-23 11:54:27 +0200125These days clients are very unlikely to do that. If you have a client that
126does, please try contacting them and encouraging them to upgrade their
127software.
128
129Remove support for SSL 3.0
130--------------------------
131
132This doesn't affect people using the default configuration as it was already
133disabled by default.
134
135This only affects TLS users who explicitly enabled `MBEDTLS_SSL_PROTO_SSL3`
136and relied on that version in order to communicate with peers that are not up
Manuel Pégourié-Gonnard143b1e32021-05-05 09:46:01 +0200137to date. If one of your peers is in that case, please try contacting them and
Manuel Pégourié-Gonnard89d4ab02021-04-23 11:54:27 +0200138encouraging them to upgrade their software.
139
Thomas Daubney379227c2021-06-18 10:46:12 +0100140Remove support for truncated HMAC
141---------------------------------
Manuel Pégourié-Gonnard89d4ab02021-04-23 11:54:27 +0200142
Thomas Daubney379227c2021-06-18 10:46:12 +0100143This only affects TLS users who enabled `MBEDTLS_SSL_TRUNCATED_HMAC`
144`MBEDTLS_SSL_TRUNCATED_HMAC_COMPAT` and used the truncated HMAC extension.
145Please consider using a CCM-8 ciphersuite instead of the Truncated HMAC
146extension, or convincing your peer to upgrade their version of Mbed TLS.
Manuel Pégourié-Gonnard89d4ab02021-04-23 11:54:27 +0200147
148Remove support for TLS record-level compression
149-----------------------------------------------
150
151This doesn't affect people using the default configuration as it was already
152disabled by default.
153
154This only affects TLS users who enabled `MBEDTLS_ZLIB_SUPPORT`. This will not
155cause any failures however if you used to enable TLS record-level compression
156you may find that your bandwidth usage increases without compression. There's
157no general solution to this problem; application protocols might have their
158own compression mechanisms and are in a better position than the TLS stack to
159avoid variants of the CRIME and BREACH attacks.
160
161Remove support for TLS RC4-based ciphersuites
162---------------------------------------------
163
164This does not affect people who used the default `config.h` and the default
Manuel Pégourié-Gonnard2960b2e2021-04-26 09:57:36 +0200165list of ciphersuites, as RC4-based ciphersuites were already not negotiated in
Manuel Pégourié-Gonnard89d4ab02021-04-23 11:54:27 +0200166that case.
167
168Please switch to any of the modern, recommended ciphersuites (based on
169AES-GCM, AES-CCM or ChachaPoly for example) and if your peer doesn't support
170any, encourage them to upgrade their software.
171
172Remove support for TLS single-DES ciphersuites
173----------------------------------------------
174
175This doesn't affect people using the default configuration as it was already
176disabled by default.
177
178Please switch to any of the modern, recommended ciphersuites (based on
179AES-GCM, AES-CCM or ChachaPoly for example) and if your peer doesn't support
180any, encourage them to upgrade their software.
181
182Remove support for TLS record-level hardware acceleration
183---------------------------------------------------------
184
185This doesn't affect people using the default configuration as it was already
186disabled by default.
187
188This feature had been broken for a while so we doubt anyone still used it.
189However if you did, please reach out on the mailing list and let us know about
190your use case.
191
192Remove wrapper for libpkcs11-helper
193-----------------------------------
194
195This doesn't affect people using the default configuration as it was already
196disabled by default.
197
198If you used to rely on this module in order to store your private keys
199securely, please have a look at the key management facilities provided by the
200PSA crypto API. If you have a use case that's not covered yet by this API,
201please reach out on the mailing list.
202
203Remove config option `MBEDTLS_SSL_DEFAULT_TICKET_LIFETIME`
204----------------------------------------------------------
205
206This doesn't affect people using the default configuration.
207
Manuel Pégourié-Gonnard57e93e52021-04-26 09:59:47 +0200208This option has not had any effect for a long time. Please use the `lifetime`
Manuel Pégourié-Gonnard89d4ab02021-04-23 11:54:27 +0200209parameter of `mbedtls_ssl_ticket_setup()` instead.
210
211Remove helpers for the transition from Mbed TLS 1.3 to Mbed TLS 2.0
212-------------------------------------------------------------------
213
214This only affects people who've been using Mbed TLS since before version 2.0
215and still relied on `compat-1.3.h` in their code.
216
217Please use the new names directly in your code; `scripts/rename.pl` (from any
218of the 2.x releases - no longer included in 3.0) might help you do that.