mirror of
https://github.com/postgres/postgres.git
synced 2025-10-25 13:17:41 +03:00
Remove option to fall back from direct to postgres SSL negotiation
There were three problems with the sslnegotiation options: 1. The sslmode=prefer and sslnegotiation=requiredirect combination was somewhat dangerous, as you might unintentionally fall back to plaintext authentication when connecting to a pre-v17 server. 2. There was an asymmetry between 'postgres' and 'direct' options. 'postgres' meant "try only traditional negotiation", while 'direct' meant "try direct first, and fall back to traditional negotiation if it fails". That was apparent only if you knew that the 'requiredirect' mode also exists. 3. The "require" word in 'requiredirect' suggests that it's somehow more strict or more secure, similar to sslmode. However, I don't consider direct SSL connections to be a security feature. To address these problems: - Only allow sslnegotiation='direct' if sslmode='require' or stronger. And for the record, Jacob and Robert felt that we should do that (or have sslnegotiation='direct' imply sslmode='require') anyway, regardless of the first issue. - Remove the 'direct' mode that falls back to traditional negotiation, and rename what was called 'requiredirect' to 'direct' instead. In other words, there is no "try both methods" option anymore, 'postgres' now means the traditional negotiation and 'direct' means a direct SSL connection. Reviewed-by: Jelte Fennema-Nio, Robert Haas, Jacob Champion Discussion: https://www.postgresql.org/message-id/d3b1608a-a1b6-4eda-9ec5-ddb3e4375808%40iki.fi
This commit is contained in:
@@ -235,8 +235,7 @@ typedef enum
|
||||
#define ENC_ERROR 0
|
||||
#define ENC_PLAINTEXT 0x01
|
||||
#define ENC_GSSAPI 0x02
|
||||
#define ENC_DIRECT_SSL 0x04
|
||||
#define ENC_NEGOTIATED_SSL 0x08
|
||||
#define ENC_SSL 0x04
|
||||
|
||||
/* Target server type (decoded value of target_session_attrs) */
|
||||
typedef enum
|
||||
@@ -395,8 +394,7 @@ struct pg_conn
|
||||
char *keepalives_count; /* maximum number of TCP keepalive
|
||||
* retransmits */
|
||||
char *sslmode; /* SSL mode (require,prefer,allow,disable) */
|
||||
char *sslnegotiation; /* SSL initiation style
|
||||
* (postgres,direct,requiredirect) */
|
||||
char *sslnegotiation; /* SSL initiation style (postgres,direct) */
|
||||
char *sslcompression; /* SSL compression (0 or 1) */
|
||||
char *sslkey; /* client key filename */
|
||||
char *sslcert; /* client certificate filename */
|
||||
|
||||
Reference in New Issue
Block a user