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 <[email protected]>
Date: Monday, 10 March 2025 at 20:38
To: Guillermo E. Villanueva <[email protected]>
Cc: pgsql-es-ayuda <[email protected]>
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 <[email protected]>
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