Hi, On 19-01-18 21:56, Selva Nair wrote: > Thanks for the v3. > > All good except (sorry to say that :) > > The compat versions of SSL_CTX_get_max_proto_version and its min counterpart > should return a long or int not void. Assuming we want to continue > supporting > openssl 1.0. > > This was not an issue earlier when return value was not checked. Anyway, > the correct > signature of the 1.1 functions (well macros) it replaces is long. > > I should have pointed this out earlier...
Gah, no, I should have thought about that before sending the patch. Not enough brains left on Friday night I guess... v4 coming. > There is one more thing that I'm not sure of. See below. > > On Fri, Jan 19, 2018 at 2:22 PM, Steffan Karger <stef...@karger.me > <mailto:stef...@karger.me>> wrote: > > As described in <80e6b449-c536-dc87-7215-3693872bc...@birkenwald.de > <mailto:80e6b449-c536-dc87-7215-3693872bc...@birkenwald.de>> on > the openvpn-devel mailing list, --tls-version-min no longer works with > OpenSSL 1.1. Kurt Roeckx posted in a debian bug report: > > "This is marked as important because if you switch to openssl 1.1.0 > the defaults minimum version in Debian is currently TLS 1.2 and > you can't override it with the options that you're currently using > (and are deprecated)." > > This patch is loosely based on the original patch by Kurt, but > solves the > issue by adding functions to openssl-compat.h, like we also did for all > other openssl 1.1. breakage. This results in not having to add more > ifdefs > in ssl_openssl.c and thus cleaner code. > > Signed-off-by: Steffan Karger <stef...@karger.me > <mailto:stef...@karger.me>> > --- > v2: fix define name, obey system lib default minimum version > v3: add error handling, fix bug in setting default minimum > > src/openvpn/openssl_compat.h | 63 +++++++++++++++++++++++++++ > src/openvpn/ssl.c | 5 ++- > src/openvpn/ssl_backend.h | 4 +- > src/openvpn/ssl_mbedtls.c | 3 +- > src/openvpn/ssl_openssl.c | 100 > +++++++++++++++++++++++++++---------------- > 5 files changed, 136 insertions(+), 39 deletions(-) > > diff --git a/src/openvpn/openssl_compat.h b/src/openvpn/openssl_compat.h > index 05ec4e95..4931fad3 100644 > --- a/src/openvpn/openssl_compat.h > +++ b/src/openvpn/openssl_compat.h > @@ -661,4 +661,67 @@ EC_GROUP_order_bits(const EC_GROUP *group) > #define RSA_F_RSA_OSSL_PRIVATE_ENCRYPT > RSA_F_RSA_EAY_PRIVATE_ENCRYPT > #endif > > +#ifndef SSL_CTX_get_min_proto_version > +/** Dummy SSL_CTX_get_min_proto_version for OpenSSL < 1.1 (not > really needed) */ > +static inline int > +SSL_CTX_get_min_proto_version(SSL_CTX *ctx) > +{ > + return 0; > +} > +#endif /* SSL_CTX_get_min_proto_version */ > + > +#ifndef SSL_CTX_set_min_proto_version > +/** Mimics SSL_CTX_set_min_proto_version for OpenSSL < 1.1 */ > +static inline void > +SSL_CTX_set_min_proto_version(SSL_CTX *ctx, long tls_ver_min) > > > static inline long (or int) > ... > > > +{ > + long sslopt = SSL_OP_NO_SSLv2 | SSL_OP_NO_SSLv3; /* Never do < > TLS 1.0 */ > + > + if (tls_ver_min > TLS1_VERSION) > + { > + sslopt |= SSL_OP_NO_TLSv1; > + } > +#ifdef SSL_OP_NO_TLSv1_1 > + if (tls_ver_min > TLS1_1_VERSION) > + { > + sslopt |= SSL_OP_NO_TLSv1_1; > + } > +#endif > +#ifdef SSL_OP_NO_TLSv1_2 > + if (tls_ver_min > TLS1_2_VERSION) > + { > + sslopt |= SSL_OP_NO_TLSv1_2; > + } > +#endif > + SSL_CTX_set_options(ctx, sslopt); > > > return 1; > > > +} > +#endif /* SSL_CTX_set_min_proto_version */ > + > +#ifndef SSL_CTX_set_max_proto_version > +/** Mimics SSL_CTX_set_max_proto_version for OpenSSL < 1.1 */ > +static inline void > +SSL_CTX_set_max_proto_version(SSL_CTX *ctx, long tls_ver_max) > > > static inline long (or int) > ... > > > +{ > + long sslopt = 0; > + > + if (tls_ver_max < TLS1_VERSION) > + { > + sslopt |= SSL_OP_NO_TLSv1; > + } > +#ifdef SSL_OP_NO_TLSv1_1 > + if (tls_ver_max < TLS1_1_VERSION) > + { > + sslopt |= SSL_OP_NO_TLSv1_1; > + } > +#endif > +#ifdef SSL_OP_NO_TLSv1_2 > + if (tls_ver_max < TLS1_2_VERSION) > + { > + sslopt |= SSL_OP_NO_TLSv1_2; > + } > +#endif > + SSL_CTX_set_options(ctx, sslopt); > > > return 1; > > > +} > +#endif /* SSL_CTX_set_max_proto_version */0 > + > > > ... > > +/** Convert internal version number to openssl version number */ > +static int > +openssl_tls_version(int ver) > +{ > + if (ver == TLS_VER_1_0) > + { > + return TLS1_VERSION; > + } > + else if (ver == TLS_VER_1_1) > + { > + return TLS1_1_VERSION; > + } > + else if (ver == TLS_VER_1_2) > + { > + return TLS1_2_VERSION; > + } > + return 0; > +} > > > TLS1_2_VERSION may not be defined in openssl prior to 1.0.1, would it? > Is that a problem? Do we still support 0.9.8 etc? I'm lazy to check this > myself. The defines are already present in 0.9.8, and our master branch (which should get this patch first) only supports openssl 1.0.1 and newer. I'll need to double-check everything before cherry-picking to release/2.4 though. Let's first see if I can manage to send a correct patch for master... Now testing the v4 against both 1.0.1 and 1.1.0, and will send to the ml soon. Thanks! -Steffan ------------------------------------------------------------------------------ Check out the vibrant tech community on one of the world's most engaging tech sites, Slashdot.org! http://sdm.link/slashdot _______________________________________________ Openvpn-devel mailing list Openvpn-devel@lists.sourceforge.net https://lists.sourceforge.net/lists/listinfo/openvpn-devel