mirror of
https://github.com/postgres/postgres.git
synced 2025-11-01 21:31:19 +03:00
Support channel binding 'tls-unique' in SCRAM
This is the basic feature set using OpenSSL to support the feature. In order to allow the frontend and the backend to fetch the sent and expected TLS Finished messages, a PG-like API is added to be able to make the interface pluggable for other SSL implementations. This commit also adds a infrastructure to facilitate the addition of future channel binding types as well as libpq parameters to control the SASL mechanism names and channel binding names. Those will be added by upcoming commits. Some tests are added to the SSL test suite to test SCRAM authentication with channel binding. Author: Michael Paquier <michael@paquier.xyz> Reviewed-by: Peter Eisentraut <peter.eisentraut@2ndquadrant.com>
This commit is contained in:
@@ -209,6 +209,7 @@ extern bool be_tls_get_compression(Port *port);
|
||||
extern void be_tls_get_version(Port *port, char *ptr, size_t len);
|
||||
extern void be_tls_get_cipher(Port *port, char *ptr, size_t len);
|
||||
extern void be_tls_get_peerdn_name(Port *port, char *ptr, size_t len);
|
||||
extern char *be_tls_get_peer_finished(Port *port, size_t *len);
|
||||
#endif
|
||||
|
||||
extern ProtocolVersion FrontendProtocol;
|
||||
|
||||
@@ -13,8 +13,12 @@
|
||||
#ifndef PG_SCRAM_H
|
||||
#define PG_SCRAM_H
|
||||
|
||||
/* Name of SCRAM-SHA-256 per IANA */
|
||||
/* Name of SCRAM mechanisms per IANA */
|
||||
#define SCRAM_SHA256_NAME "SCRAM-SHA-256"
|
||||
#define SCRAM_SHA256_PLUS_NAME "SCRAM-SHA-256-PLUS" /* with channel binding */
|
||||
|
||||
/* Channel binding types */
|
||||
#define SCRAM_CHANNEL_BINDING_TLS_UNIQUE "tls-unique"
|
||||
|
||||
/* Status codes for message exchange */
|
||||
#define SASL_EXCHANGE_CONTINUE 0
|
||||
@@ -22,7 +26,9 @@
|
||||
#define SASL_EXCHANGE_FAILURE 2
|
||||
|
||||
/* Routines dedicated to authentication */
|
||||
extern void *pg_be_scram_init(const char *username, const char *shadow_pass);
|
||||
extern void *pg_be_scram_init(const char *username, const char *shadow_pass,
|
||||
bool ssl_in_use, const char *tls_finished_message,
|
||||
size_t tls_finished_len);
|
||||
extern int pg_be_scram_exchange(void *opaq, char *input, int inputlen,
|
||||
char **output, int *outputlen, char **logdetail);
|
||||
|
||||
|
||||
Reference in New Issue
Block a user