mirror of
https://github.com/postgres/postgres.git
synced 2025-12-21 05:21:08 +03:00
Remove support for OpenSSL older than 1.1.0
OpenSSL 1.0.2 has been EOL from the upstream OpenSSL project for some time, and is no longer the default OpenSSL version with any vendor which package PostgreSQL. By retiring support for OpenSSL 1.0.2 we can remove a lot of no longer required complexity for managing state within libcrypto which is now handled by OpenSSL. Reviewed-by: Jacob Champion <jacob.champion@enterprisedb.com> Reviewed-by: Peter Eisentraut <peter@eisentraut.org> Reviewed-by: Michael Paquier <michael@paquier.xyz> Discussion: https://postgr.es/m/ZG3JNursG69dz1lr@paquier.xyz Discussion: https://postgr.es/m/CA+hUKGKh7QrYzu=8yWEUJvXtMVm_CNWH1L_TLWCbZMwbi1XP2Q@mail.gmail.com
This commit is contained in:
@@ -88,8 +88,7 @@ OBJS_COMMON = \
|
||||
ifeq ($(with_ssl),openssl)
|
||||
OBJS_COMMON += \
|
||||
cryptohash_openssl.o \
|
||||
hmac_openssl.o \
|
||||
protocol_openssl.o
|
||||
hmac_openssl.o
|
||||
else
|
||||
OBJS_COMMON += \
|
||||
cryptohash.o \
|
||||
|
||||
@@ -35,17 +35,12 @@
|
||||
|
||||
/*
|
||||
* In backend, use an allocation in TopMemoryContext to count for resowner
|
||||
* cleanup handling if necessary. For versions of OpenSSL where HMAC_CTX is
|
||||
* known, just use palloc(). In frontend, use malloc to be able to return
|
||||
* cleanup handling if necessary. In frontend, use malloc to be able to return
|
||||
* a failure status back to the caller.
|
||||
*/
|
||||
#ifndef FRONTEND
|
||||
#ifdef HAVE_HMAC_CTX_NEW
|
||||
#define USE_RESOWNER_FOR_HMAC
|
||||
#define ALLOC(size) MemoryContextAlloc(TopMemoryContext, size)
|
||||
#else
|
||||
#define ALLOC(size) palloc(size)
|
||||
#endif
|
||||
#define FREE(ptr) pfree(ptr)
|
||||
#else /* FRONTEND */
|
||||
#define ALLOC(size) malloc(size)
|
||||
@@ -144,11 +139,7 @@ pg_hmac_create(pg_cryptohash_type type)
|
||||
ResourceOwnerEnlarge(CurrentResourceOwner);
|
||||
#endif
|
||||
|
||||
#ifdef HAVE_HMAC_CTX_NEW
|
||||
ctx->hmacctx = HMAC_CTX_new();
|
||||
#else
|
||||
ctx->hmacctx = ALLOC(sizeof(HMAC_CTX));
|
||||
#endif
|
||||
|
||||
if (ctx->hmacctx == NULL)
|
||||
{
|
||||
@@ -162,9 +153,6 @@ pg_hmac_create(pg_cryptohash_type type)
|
||||
return NULL;
|
||||
}
|
||||
|
||||
#ifndef HAVE_HMAC_CTX_NEW
|
||||
memset(ctx->hmacctx, 0, sizeof(HMAC_CTX));
|
||||
#endif
|
||||
|
||||
#ifdef USE_RESOWNER_FOR_HMAC
|
||||
ctx->resowner = CurrentResourceOwner;
|
||||
@@ -328,13 +316,7 @@ pg_hmac_free(pg_hmac_ctx *ctx)
|
||||
if (ctx == NULL)
|
||||
return;
|
||||
|
||||
#ifdef HAVE_HMAC_CTX_FREE
|
||||
HMAC_CTX_free(ctx->hmacctx);
|
||||
#else
|
||||
explicit_bzero(ctx->hmacctx, sizeof(HMAC_CTX));
|
||||
FREE(ctx->hmacctx);
|
||||
#endif
|
||||
|
||||
#ifdef USE_RESOWNER_FOR_HMAC
|
||||
if (ctx->resowner)
|
||||
ResourceOwnerForgetHMAC(ctx->resowner, ctx);
|
||||
|
||||
@@ -44,7 +44,6 @@ if ssl.found()
|
||||
common_sources += files(
|
||||
'cryptohash_openssl.c',
|
||||
'hmac_openssl.c',
|
||||
'protocol_openssl.c',
|
||||
)
|
||||
else
|
||||
common_sources += files(
|
||||
|
||||
@@ -1,117 +0,0 @@
|
||||
/*-------------------------------------------------------------------------
|
||||
*
|
||||
* protocol_openssl.c
|
||||
* OpenSSL functionality shared between frontend and backend
|
||||
*
|
||||
* This should only be used if code is compiled with OpenSSL support.
|
||||
*
|
||||
* Portions Copyright (c) 1996-2024, PostgreSQL Global Development Group
|
||||
* Portions Copyright (c) 1994, Regents of the University of California
|
||||
*
|
||||
* IDENTIFICATION
|
||||
* src/common/protocol_openssl.c
|
||||
*
|
||||
*-------------------------------------------------------------------------
|
||||
*/
|
||||
|
||||
#ifndef FRONTEND
|
||||
#include "postgres.h"
|
||||
#else
|
||||
#include "postgres_fe.h"
|
||||
#endif
|
||||
|
||||
#include "common/openssl.h"
|
||||
|
||||
/*
|
||||
* Replacements for APIs introduced in OpenSSL 1.1.0.
|
||||
*/
|
||||
#ifndef SSL_CTX_set_min_proto_version
|
||||
|
||||
/*
|
||||
* OpenSSL versions that support TLS 1.3 shouldn't get here because they
|
||||
* already have these functions. So we don't have to keep updating the below
|
||||
* code for every new TLS version, and eventually it can go away. But let's
|
||||
* just check this to make sure ...
|
||||
*/
|
||||
#ifdef TLS1_3_VERSION
|
||||
#error OpenSSL version mismatch
|
||||
#endif
|
||||
|
||||
int
|
||||
SSL_CTX_set_min_proto_version(SSL_CTX *ctx, int version)
|
||||
{
|
||||
int ssl_options = SSL_OP_NO_SSLv2 | SSL_OP_NO_SSLv3;
|
||||
|
||||
if (version > TLS1_VERSION)
|
||||
ssl_options |= SSL_OP_NO_TLSv1;
|
||||
|
||||
/*
|
||||
* Some OpenSSL versions define TLS*_VERSION macros but not the
|
||||
* corresponding SSL_OP_NO_* macro, so in those cases we have to return
|
||||
* unsuccessfully here.
|
||||
*/
|
||||
#ifdef TLS1_1_VERSION
|
||||
if (version > TLS1_1_VERSION)
|
||||
{
|
||||
#ifdef SSL_OP_NO_TLSv1_1
|
||||
ssl_options |= SSL_OP_NO_TLSv1_1;
|
||||
#else
|
||||
return 0;
|
||||
#endif
|
||||
}
|
||||
#endif
|
||||
#ifdef TLS1_2_VERSION
|
||||
if (version > TLS1_2_VERSION)
|
||||
{
|
||||
#ifdef SSL_OP_NO_TLSv1_2
|
||||
ssl_options |= SSL_OP_NO_TLSv1_2;
|
||||
#else
|
||||
return 0;
|
||||
#endif
|
||||
}
|
||||
#endif
|
||||
|
||||
SSL_CTX_set_options(ctx, ssl_options);
|
||||
|
||||
return 1; /* success */
|
||||
}
|
||||
|
||||
int
|
||||
SSL_CTX_set_max_proto_version(SSL_CTX *ctx, int version)
|
||||
{
|
||||
int ssl_options = 0;
|
||||
|
||||
Assert(version != 0);
|
||||
|
||||
/*
|
||||
* Some OpenSSL versions define TLS*_VERSION macros but not the
|
||||
* corresponding SSL_OP_NO_* macro, so in those cases we have to return
|
||||
* unsuccessfully here.
|
||||
*/
|
||||
#ifdef TLS1_1_VERSION
|
||||
if (version < TLS1_1_VERSION)
|
||||
{
|
||||
#ifdef SSL_OP_NO_TLSv1_1
|
||||
ssl_options |= SSL_OP_NO_TLSv1_1;
|
||||
#else
|
||||
return 0;
|
||||
#endif
|
||||
}
|
||||
#endif
|
||||
#ifdef TLS1_2_VERSION
|
||||
if (version < TLS1_2_VERSION)
|
||||
{
|
||||
#ifdef SSL_OP_NO_TLSv1_2
|
||||
ssl_options |= SSL_OP_NO_TLSv1_2;
|
||||
#else
|
||||
return 0;
|
||||
#endif
|
||||
}
|
||||
#endif
|
||||
|
||||
SSL_CTX_set_options(ctx, ssl_options);
|
||||
|
||||
return 1; /* success */
|
||||
}
|
||||
|
||||
#endif /* !SSL_CTX_set_min_proto_version */
|
||||
Reference in New Issue
Block a user