From fc233794f62d8161f92152bfd4ab483005cb744b Mon Sep 17 00:00:00 2001 From: Conrad Ludgate Date: Wed, 16 Apr 2025 19:37:17 +0100 Subject: [PATCH] fix(proxy): make sure that sql-over-http is TLS aware (#11612) MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit I noticed that while auth-broker -> local-proxy is TLS aware, and TCP proxy -> postgres is TLS aware, HTTP proxy -> postgres is not 😅 --- proxy/src/serverless/backend.rs | 4 +++- proxy/src/serverless/conn_pool.rs | 7 +++++-- 2 files changed, 8 insertions(+), 3 deletions(-) diff --git a/proxy/src/serverless/backend.rs b/proxy/src/serverless/backend.rs index e40aa024a8..13058f08f1 100644 --- a/proxy/src/serverless/backend.rs +++ b/proxy/src/serverless/backend.rs @@ -561,8 +561,10 @@ impl ConnectMechanism for TokioMechanism { .dbname(&self.conn_info.dbname) .connect_timeout(compute_config.timeout); + let mk_tls = + crate::tls::postgres_rustls::MakeRustlsConnect::new(compute_config.tls.clone()); let pause = ctx.latency_timer_pause(crate::metrics::Waiting::Compute); - let res = config.connect(postgres_client::NoTls).await; + let res = config.connect(mk_tls).await; drop(pause); let (client, connection) = permit.release_result(res)?; diff --git a/proxy/src/serverless/conn_pool.rs b/proxy/src/serverless/conn_pool.rs index 516d474a11..409056a6a9 100644 --- a/proxy/src/serverless/conn_pool.rs +++ b/proxy/src/serverless/conn_pool.rs @@ -6,7 +6,7 @@ use std::task::{Poll, ready}; use futures::Future; use futures::future::poll_fn; use postgres_client::AsyncMessage; -use postgres_client::tls::NoTlsStream; +use postgres_client::tls::MakeTlsConnect; use smallvec::SmallVec; use tokio::net::TcpStream; use tokio::time::Instant; @@ -26,6 +26,9 @@ use super::conn_pool_lib::{ use crate::context::RequestContext; use crate::control_plane::messages::MetricsAuxInfo; use crate::metrics::Metrics; +use crate::tls::postgres_rustls::MakeRustlsConnect; + +type TlsStream = >::Stream; #[derive(Debug, Clone)] pub(crate) struct ConnInfoWithAuth { @@ -58,7 +61,7 @@ pub(crate) fn poll_client( ctx: &RequestContext, conn_info: ConnInfo, client: C, - mut connection: postgres_client::Connection, + mut connection: postgres_client::Connection, conn_id: uuid::Uuid, aux: MetricsAuxInfo, ) -> Client {