58 lines
2.3 KiB
Diff
58 lines
2.3 KiB
Diff
|
Limit curves defaults in FIPS mode
|
||
|
|
||
|
Our copy of OpenSSL disables the X25519 and X448 curves in FIPS mode,
|
||
|
but stunnel defaults to enabling them and then fails to do so.
|
||
|
|
||
|
Upstream-Status: Inappropriate [caused by a downstream patch to openssl]
|
||
|
diff -up stunnel-5.62/src/options.c.disabled-curves stunnel-5.62/src/options.c
|
||
|
--- stunnel-5.62/src/options.c.disabled-curves 2022-02-04 13:46:45.936884124 +0100
|
||
|
+++ stunnel-5.62/src/options.c 2022-02-04 13:53:16.346725153 +0100
|
||
|
@@ -40,8 +40,10 @@
|
||
|
|
||
|
#if OPENSSL_VERSION_NUMBER >= 0x10101000L
|
||
|
#define DEFAULT_CURVES "X25519:P-256:X448:P-521:P-384"
|
||
|
+#define DEFAULT_CURVES_FIPS "P-256:P-521:P-384"
|
||
|
#else /* OpenSSL version < 1.1.1 */
|
||
|
#define DEFAULT_CURVES "prime256v1"
|
||
|
+#define DEFAULT_CURVES_FIPS "prime256v1"
|
||
|
#endif /* OpenSSL version >= 1.1.1 */
|
||
|
|
||
|
#if defined(_WIN32_WCE) && !defined(CONFDIR)
|
||
|
@@ -1855,7 +1857,7 @@ NOEXPORT char *parse_service_option(CMD
|
||
|
/* curves */
|
||
|
switch(cmd) {
|
||
|
case CMD_SET_DEFAULTS:
|
||
|
- section->curves=str_dup_detached(DEFAULT_CURVES);
|
||
|
+ section->curves = NULL;
|
||
|
break;
|
||
|
case CMD_SET_COPY:
|
||
|
section->curves=str_dup_detached(new_service_options.curves);
|
||
|
@@ -1870,9 +1872,26 @@ NOEXPORT char *parse_service_option(CMD
|
||
|
section->curves=str_dup_detached(arg);
|
||
|
return NULL; /* OK */
|
||
|
case CMD_INITIALIZE:
|
||
|
+ if(!section->curves) {
|
||
|
+ /* this is only executed for global options, because
|
||
|
+ * section->curves is no longer NULL in sections */
|
||
|
+#ifdef USE_FIPS
|
||
|
+ if(new_global_options.option.fips)
|
||
|
+ section->curves=str_dup_detached(DEFAULT_CURVES_FIPS);
|
||
|
+ else
|
||
|
+#endif /* USE_FIPS */
|
||
|
+ section->curves=str_dup_detached(DEFAULT_CURVES);
|
||
|
+ }
|
||
|
break;
|
||
|
case CMD_PRINT_DEFAULTS:
|
||
|
- s_log(LOG_NOTICE, "%-22s = %s", "curves", DEFAULT_CURVES);
|
||
|
+ if(fips_available()) {
|
||
|
+ s_log(LOG_NOTICE, "%-22s = %s %s", "curves",
|
||
|
+ DEFAULT_CURVES_FIPS, "(with \"fips = yes\")");
|
||
|
+ s_log(LOG_NOTICE, "%-22s = %s %s", "curves",
|
||
|
+ DEFAULT_CURVES, "(with \"fips = no\")");
|
||
|
+ } else {
|
||
|
+ s_log(LOG_NOTICE, "%-22s = %s", "curves", DEFAULT_CURVES);
|
||
|
+ }
|
||
|
break;
|
||
|
case CMD_PRINT_HELP:
|
||
|
s_log(LOG_NOTICE, "%-22s = ECDH curve names", "curves");
|