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;
