blob: 2d031c6a4a01695e89cb77b2c3244e858b1d9e10 [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
62renamed to `ecp_alt.h` and `rsa_alt_helpers.h` respectively.
63
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
140Remove support for compatibility with old Mbed TLS's truncated HMAC
141-------------------------------------------------------------------
142
143This doesn't affect people using the default configuration as it was already
144disabled by default.
145
Manuel Pégourié-Gonnard143b1e32021-05-05 09:46:01 +0200146This only affects TLS users who enabled `MBEDTLS_SSL_TRUNCATED_HMAC_COMPAT` and
Manuel Pégourié-Gonnard89d4ab02021-04-23 11:54:27 +0200147used the Truncated HMAC extension to communicate with peers using old version
148of Mbed TLS. Please consider using a CCM-8 ciphersuite instead of the
Manuel Pégourié-Gonnard143b1e32021-05-05 09:46:01 +0200149Truncated HMAC extension, or convincing your peer to upgrade their version of
Manuel Pégourié-Gonnard89d4ab02021-04-23 11:54:27 +0200150Mbed TLS.
151
152Remove support for TLS record-level compression
153-----------------------------------------------
154
155This doesn't affect people using the default configuration as it was already
156disabled by default.
157
158This only affects TLS users who enabled `MBEDTLS_ZLIB_SUPPORT`. This will not
159cause any failures however if you used to enable TLS record-level compression
160you may find that your bandwidth usage increases without compression. There's
161no general solution to this problem; application protocols might have their
162own compression mechanisms and are in a better position than the TLS stack to
163avoid variants of the CRIME and BREACH attacks.
164
165Remove support for TLS RC4-based ciphersuites
166---------------------------------------------
167
168This does not affect people who used the default `config.h` and the default
Manuel Pégourié-Gonnard2960b2e2021-04-26 09:57:36 +0200169list of ciphersuites, as RC4-based ciphersuites were already not negotiated in
Manuel Pégourié-Gonnard89d4ab02021-04-23 11:54:27 +0200170that case.
171
172Please switch to any of the modern, recommended ciphersuites (based on
173AES-GCM, AES-CCM or ChachaPoly for example) and if your peer doesn't support
174any, encourage them to upgrade their software.
175
176Remove support for TLS single-DES ciphersuites
177----------------------------------------------
178
179This doesn't affect people using the default configuration as it was already
180disabled by default.
181
182Please switch to any of the modern, recommended ciphersuites (based on
183AES-GCM, AES-CCM or ChachaPoly for example) and if your peer doesn't support
184any, encourage them to upgrade their software.
185
186Remove support for TLS record-level hardware acceleration
187---------------------------------------------------------
188
189This doesn't affect people using the default configuration as it was already
190disabled by default.
191
192This feature had been broken for a while so we doubt anyone still used it.
193However if you did, please reach out on the mailing list and let us know about
194your use case.
195
196Remove wrapper for libpkcs11-helper
197-----------------------------------
198
199This doesn't affect people using the default configuration as it was already
200disabled by default.
201
202If you used to rely on this module in order to store your private keys
203securely, please have a look at the key management facilities provided by the
204PSA crypto API. If you have a use case that's not covered yet by this API,
205please reach out on the mailing list.
206
207Remove config option `MBEDTLS_SSL_DEFAULT_TICKET_LIFETIME`
208----------------------------------------------------------
209
210This doesn't affect people using the default configuration.
211
Manuel Pégourié-Gonnard57e93e52021-04-26 09:59:47 +0200212This option has not had any effect for a long time. Please use the `lifetime`
Manuel Pégourié-Gonnard89d4ab02021-04-23 11:54:27 +0200213parameter of `mbedtls_ssl_ticket_setup()` instead.
214
215Remove helpers for the transition from Mbed TLS 1.3 to Mbed TLS 2.0
216-------------------------------------------------------------------
217
218This only affects people who've been using Mbed TLS since before version 2.0
219and still relied on `compat-1.3.h` in their code.
220
221Please use the new names directly in your code; `scripts/rename.pl` (from any
222of the 2.x releases - no longer included in 3.0) might help you do that.