mirror of
https://github.com/postgres/postgres.git
synced 2025-10-29 22:49:41 +03:00
Refactor client-side SSL certificate checking code
Separate the parts specific to the SSL library from the general logic.
The previous code structure was
open_client_SSL()
calls verify_peer_name_matches_certificate()
calls verify_peer_name_matches_certificate_name()
calls wildcard_certificate_match()
and was completely in fe-secure-openssl.c. The new structure is
open_client_SSL() [openssl]
calls pq_verify_peer_name_matches_certificate() [generic]
calls pgtls_verify_peer_name_matches_certificate_guts() [openssl]
calls openssl_verify_peer_name_matches_certificate_name() [openssl]
calls pq_verify_peer_name_matches_certificate_name() [generic]
calls wildcard_certificate_match() [generic]
Move the generic functions into a new file fe-secure-common.c, so the
calls generally go fe-connect.c -> fe-secure.c -> fe-secure-${impl}.c ->
fe-secure-common.c, although there is a bit of back-and-forth between
the last two.
Reviewed-by: Michael Paquier <michael.paquier@gmail.com>
This commit is contained in:
@@ -732,6 +732,19 @@ extern char *pgtls_get_finished(PGconn *conn, size_t *len);
|
||||
*/
|
||||
extern char *pgtls_get_peer_certificate_hash(PGconn *conn, size_t *len);
|
||||
|
||||
/*
|
||||
* Verify that the server certificate matches the host name we connected to.
|
||||
*
|
||||
* The certificate's Common Name and Subject Alternative Names are considered.
|
||||
*
|
||||
* Returns 1 if the name matches, and 0 if it does not. On error, returns
|
||||
* -1, and sets the libpq error message.
|
||||
*
|
||||
*/
|
||||
extern int pgtls_verify_peer_name_matches_certificate_guts(PGconn *conn,
|
||||
int *names_examined,
|
||||
char **first_name);
|
||||
|
||||
/* === miscellaneous macros === */
|
||||
|
||||
/*
|
||||
|
||||
Reference in New Issue
Block a user