diff --git a/src/backend/libpq/be-secure-openssl.c b/src/backend/libpq/be-secure-openssl.c index 39b1a66236..d097e81407 100644 --- a/src/backend/libpq/be-secure-openssl.c +++ b/src/backend/libpq/be-secure-openssl.c @@ -1402,30 +1402,30 @@ static bool initialize_ecdh(SSL_CTX *context, bool isServerStart) { #ifndef OPENSSL_NO_ECDH - EC_KEY *ecdh; - int nid; + char *curve_list = strdup(SSLECDHCurve); + char *saveptr; + char *token = strtok_r(curve_list, ":", &saveptr); + int nid; - nid = OBJ_sn2nid(SSLECDHCurve); - if (!nid) + while (token != NULL) { - ereport(isServerStart ? FATAL : LOG, + nid = OBJ_sn2nid(token); + if (!nid) + {ereport(isServerStart ? FATAL : LOG, (errcode(ERRCODE_CONFIG_FILE_ERROR), - errmsg("ECDH: unrecognized curve name: %s", SSLECDHCurve))); + errmsg("ECDH: unrecognized curve name: %s", token))); return false; + } + token = strtok_r(NULL, ":", &saveptr); } - ecdh = EC_KEY_new_by_curve_name(nid); - if (!ecdh) + if(SSL_CTX_set1_groups_list(context, SSLECDHCurve) !=1) { ereport(isServerStart ? FATAL : LOG, (errcode(ERRCODE_CONFIG_FILE_ERROR), - errmsg("ECDH: could not create key"))); + errmsg("ECDH: failed to set curve names"))); return false; } - - SSL_CTX_set_options(context, SSL_OP_SINGLE_ECDH_USE); - SSL_CTX_set_tmp_ecdh(context, ecdh); - EC_KEY_free(ecdh); #endif return true;