Comprobar los certificados del clúster de PostgreSQL¶
Durante la instalación, durante una renovación, o simplemente para conocer la fecha de caducidad de los certificados del clúster de PostgreSQL, puede ser útil examinar el contenido de los certificados generados.
Los certificados que utiliza el clúster de PostgreSQL son los siguientes:
1 2 3 4 5 6 7 8 9 10 11 | |
ca.crt-
Certificado de la autoridad de certificación raíz. El mismo certificado está presente en los directorios
/etc/patroni/y/etc/etcd/. client.crt-
Certificado del nodo PostgreSQL. El mismo certificado está presente en los directorios
/etc/patroni/y/etc/etcd/. Lo utilizanpatroniyetcdpara las comunicaciones cliente entre los nodos. client.key-
Clave asociada al certificado
client.crt. peer.crt-
El mismo certificado que
client.crt. Se utiliza para las comunicaciones internas deetcdentre los nodos. peer.key-
La misma clave que
client.key.
Hay, por tanto, tres elementos en total:
- el certificado de la autoridad de certificación raíz (
/etc/etcd/ca.crt,/etc/patroni/ca.crt); - el certificado del nodo PostgreSQL (
/etc/etcd/client.crt,/etc/etcd/peer.crt,/etc/patroni/client.crt); - la clave asociada al certificado del nodo PostgreSQL (
/etc/etcd/client.key,/etc/etcd/peer.key,/etc/patroni/client.key).
Comprobar la fecha de caducidad de un certificado¶
Para comprobar la fecha de caducidad de un certificado, utilice el comando que figura a continuación.
Puede personalizar la variable del siguiente comando:
| Valor personalizado | Variable | Comentario |
|---|---|---|
EXPIRY_CERT |
Ruta del certificado cuya fecha de caducidad se desea comprobar. |
O rellene el campo con uno de los certificados del clúster:
1 | |
Si la fecha de caducidad ha pasado, el certificado se considera no válido.
Atención
Si la autoridad de certificación que emitió el certificado ha caducado, el certificado también se considera no válido. Compruebe, por tanto, también la fecha de caducidad de la autoridad de certificación.
Ejemplo
Para comprobar la fecha de caducidad del certificado /etc/patroni/client.crt, se utiliza el siguiente comando:
1 | |
El resultado es similar a este:
1 | |
Aquí, el certificado caduca el 18 de diciembre de 2030 a las 14:04:09.
Comprobar los nombres alternativos (SAN) de un certificado¶
Para comprobar los SAN (Subject Alternative Name) de un certificado, es decir, los nombres y direcciones IP para los que es válido, utilice el comando que figura a continuación.
Puede personalizar la variable del siguiente comando:
| Valor personalizado | Variable | Comentario |
|---|---|---|
SAN_CERT |
Ruta del certificado cuyos SAN se desea comprobar. |
O rellene el campo con uno de los certificados del nodo:
1 | |
Si el nombre DNS o la dirección IP utilizados para conectarse a un nodo no figuran en los SAN de su certificado, la conexión se considera no válida. Del mismo modo, cuando un nodo abre una conexión hacia otro nodo, si el certificado que presenta no corresponde a su propio nombre DNS o a su propia dirección IP, el nodo remoto rechaza la conexión.
Ejemplo
Para comprobar los SAN del certificado /etc/etcd/peer.crt, se utiliza el siguiente comando:
1 | |
El comando devuelve un resultado similar a este:
1 2 | |
Aquí, el certificado cubre los nombres DNS PSQL_VIP y PSQL_2, así como las direcciones IP 192.168.1.4 y 192.168.1.2.
Comprobar qué autoridad de certificación emitió un certificado¶
Cuando se genera un certificado, es posible añadirle la extensión X509v3 Authority Key Identifier. Esta extensión puede almacenar el hash de la clave pública de su emisor, que corresponde al contenido de la extensión X509v3 Subject Key Identifier del emisor.
Info
Los certificados generados siguiendo la documentación de instalación del clúster de PostgreSQL tienen las extensiones Authority Key Identifier y Subject Key Identifier.
Si estas extensiones están presentes, se puede obtener el hash de la clave pública del emisor de un certificado y compararlo con el hash contenido en la extensión Subject Key Identifier de la CA que supuestamente emitió el certificado, para validar que se trata de la correcta.
Para obtener el valor de la extensión Authority Key Identifier de un certificado, utilice el comando que figura a continuación.
Puede personalizar la variable del siguiente comando:
| Valor personalizado | Variable | Comentario |
|---|---|---|
ISSUED_CERT |
Ruta del certificado cuyo emisor se desea comprobar. |
O rellene el campo con uno de los certificados del nodo:
1 | |
Info
La opción -issuer permite obtener el CN del certificado emisor.
Para obtener el valor de la extensión Subject Key Identifier de un certificado, utilice el comando que figura a continuación.
Puede personalizar la variable del siguiente comando:
| Valor personalizado | Variable | Comentario |
|---|---|---|
ISSUER_CA |
Ruta del certificado de la autoridad de certificación que supuestamente lo emitió. |
O rellene el campo con uno de los certificados de la autoridad de certificación:
1 | |
Info
La opción -subject permite obtener el CN del certificado.
Ejemplo
Se desea comprobar que la CA que firmó el certificado contenido en el fichero /etc/patroni/client.crt es la contenida en el fichero /etc/patroni/ca.crt.
Primero se obtiene el contenido de la extensión X509v3 Authority Key Identifier del certificado /etc/patroni/client.crt con el siguiente comando:
1 | |
Lo que devuelve:
1 2 3 | |
Después se obtiene el contenido de la extensión X509v3 Subject Key Identifier de la CA /etc/patroni/ca.crt con el siguiente comando:
1 | |
Lo que devuelve:
1 2 3 | |
Al comparar los dos resultados, se observa que el Key Identifier y el CN son idénticos: el certificado contenido en el fichero /etc/patroni/ca.crt es efectivamente la CA que firmó el certificado contenido en el fichero /etc/patroni/client.crt.