Buenas, nosotros solo utilizamos certificado en el servidor, y los clientes son 
los que confian en dicho certificado (bien configurados). Me parece que también 
utilizas certificado en els servidor, como bien apuntas, la confianza de 
certificados es en dos sentidos. Yo intentaría:

  1.  Configurar cada host a nivel de SO para confiar en las AC(s) raíz de PKI 
privadas. Cada organización suele mantenir sus plantillas con dicha 
congifuración, via Ansible o similar. Debian y Fedora tienen el mismo 
procedimiento pero cambian las rutas y el nombre de un comando:

# Set variables based on the distribution
if [ -f /etc/redhat-release ]; then
PKG_MANAGER="yum install -y";
CA_PATH="/etc/pki/ca-trust/source/anchors";
UPDATE_CA="update-ca-trust";
elif [ -f /etc/debian_version ]; then
PKG_MANAGER="apt-get update && apt-get install -y";
CA_PATH="/usr/local/share/ca-certificates";
UPDATE_CA="update-ca-certificates";
elif [ -f /etc/alpine-release ]; then
PKG_MANAGER="apk add --no-cache";
CA_PATH="/usr/local/share/ca-certificates";
UPDATE_CA="update-ca-certificates";
else \
echo "Unsupported base image";
exit 1;
fi
# Install necessary packages
${PKG_MANAGER} openssl curl ca-certificates
# Add CA certificates
curl -s http://authority_information_access.fqdn/root_ca.crt | openssl x509 | 
tee ${CA_PATH}/tu_root_ca.pem | openssl x509 -noout -subject -issuer
# repite para otras AC(s)
# Update CA certificates
${UPDATE_CA}


  1.  Para el cliente: como ahora mantienes la confianza del host base, puedes 
utilitzar los .PEM generados por el sistema. Son ficheros que reúnen todas las 
AC(s), en Fedora/EL 
sslrootcert=/etc/pki/ca-trust/extracted/pem/tls-ca-bundle.pem. En PG 16+ existe 
sslrootcert=system<https://www.postgresql.org/docs/16/libpq-connect.html#LIBPQ-CONNECT-SSLROOTCERT>.
 Más información: https://www.postgresql.org/docs/13/libpq-ssl.html
https://www.postgresql.org/docs/13/runtime-config-connection.html
  2.  Para el servidor: Similar, pero no tienes que utilitzar el fichero de 
AC(s) del sistema. A mi parecer, solo tendrías que poner la AC privada en 
formato PEM con la que emites los certificados del cliente. Puedes utilitzar la 
ruta tipo /etc/pki/ca-trust/source/anchors/<tu_root_ca_id_clientes.pem> como el 
paso 1.
https://www.postgresql.org/docs/13/runtime-config-connection.html#RUNTIME-CONFIG-CONNECTION-SSL

Aún así, recomiendo utilitzar otros esquemas de autenticación como Kerberos 
(GSSAPI) para mantener las identidades centralizadas más facilmente.

From: Horacio Miranda <hmira...@gmail.com>
Date: Monday, 10 March 2025 at 20:38
To: Guillermo E. Villanueva <guillermo...@gmail.com>
Cc: pgsql-es-ayuda <pgsql-es-ay...@postgresql.org>
Subject: Re: Autenticación TSL
Dice que no conoce el CA.
Agrega el CA de let’s encrypt a tu Linux o en un archivo donde conoce el CA de 
lets encrypt.
Ahora estás usando TLS o quieres usar mTLS ?

Regards,
Horacio Miranda



On 11 Mar 2025, at 5:37 AM, Guillermo E. Villanueva <guillermo...@gmail.com> 
wrote:

Buenas tardes! En los últimos días estuve trabajando en el proyecto de hacer 
funcionar postgres 13, con autenticación por certificados ssl, usando openssl y 
certificados firmados por una propia CA funcionó correctamente, pero cuando 
intento hacerlo con certificados Let's Encrypt para el servidor, no funciona.

Desde el cliente con credenciales de lets encrypt
psql "host=host.dominio.com<http://host.dominio.com> dbname=postgres 
user=postgres sslmode=verify-ca sslcert=./fullchain.pem sslkey=./privkey.pem 
sslrootcert=./chain.pem"
Error:
psql: error: connection to server at " 
host.dominio.com<http://host.dominio.com>" (ip), port 5432 failed: SSL error: 
certificate verify failed

Y en el log de postgres:
2025-03-10 15:29:18.080 CET [893999] [unknown]@[unknown] LOG:  connection 
received: host=ip_del_cliente port=55848
2025-03-10 15:29:18.093 CET [893999] [unknown]@[unknown] LOG:  could not accept 
SSL connection: tlsv1 alert unknown ca

Tambien lo probé con certificados autofirmados para el cliente adaptando 
postgresql.conf y pg_hba.conf, pero no hay caso, no logro hacerlo funcionar.

Alguno de por acá pudo hacer funcionar autenticación con Let's Encrypt?

Desde ya muchas gracias por leer y por los comentarios que tengan.

Saludos

Reply via email to