Verificar os certificados do cluster PostgreSQL¶
Durante a instalação, durante uma renovação ou simplesmente para saber quando expiram os certificados do cluster PostgreSQL, pode ser útil examinar o conteúdo dos certificados gerados.
Os certificados utilizados pelo cluster PostgreSQL são os seguintes:
1 2 3 4 5 6 7 8 9 10 11 | |
ca.crt-
Certificado da autoridade de certificação raiz. O mesmo certificado está presente nos diretórios
/etc/patroni/e/etc/etcd/. client.crt-
Certificado do nó PostgreSQL. O mesmo certificado está presente nos diretórios
/etc/patroni/e/etc/etcd/. É utilizado pelopatronie peloetcdpara as comunicações cliente entre os nós. client.key-
Chave associada ao certificado
client.crt. peer.crt-
O mesmo certificado que
client.crt. É utilizado para as comunicações internas doetcdentre os nós. peer.key-
A mesma chave que
client.key.
Há, portanto, três elementos no total:
- o certificado da autoridade de certificação raiz (
/etc/etcd/ca.crt,/etc/patroni/ca.crt); - o certificado do nó PostgreSQL (
/etc/etcd/client.crt,/etc/etcd/peer.crt,/etc/patroni/client.crt); - a chave associada ao certificado do nó PostgreSQL (
/etc/etcd/client.key,/etc/etcd/peer.key,/etc/patroni/client.key).
Verificar a data de expiração de um certificado¶
Para verificar a data de expiração de um certificado, utilize o comando abaixo.
Pode personalizar a variável do seguinte comando:
| Valor personalizado | Variável | Comentário |
|---|---|---|
EXPIRY_CERT |
Caminho do certificado cuja data de expiração pretende verificar. |
Ou preencha o campo com um dos certificados do cluster:
1 | |
Se a data de expiração tiver passado, o certificado é considerado inválido.
Atenção
Se a autoridade de certificação que emitiu o certificado tiver expirado, o certificado também é considerado inválido. Verifique, portanto, também a data de expiração da autoridade de certificação.
Exemplo
Para verificar a data de expiração do certificado /etc/patroni/client.crt, utiliza-se o seguinte comando:
1 | |
O resultado é semelhante a este:
1 | |
Aqui, o certificado expira a 18 de dezembro de 2030 às 14:04:09.
Verificar os nomes alternativos (Subject Alternative Names) de um certificado¶
Para verificar os SAN (Subject Alternative Names) de um certificado, ou seja, os nomes e endereços IP para os quais é válido, utilize o comando abaixo.
Pode personalizar a variável do seguinte comando:
| Valor personalizado | Variável | Comentário |
|---|---|---|
SAN_CERT |
Caminho do certificado cujos SAN pretende verificar. |
Ou preencha o campo com um dos certificados do nó:
1 | |
Se o nome DNS ou o endereço IP utilizado para se ligar a um nó não constar dos SAN do respetivo certificado, a ligação é considerada inválida. Do mesmo modo, quando um nó abre uma ligação a outro nó, se o certificado que apresenta não corresponder ao seu próprio nome DNS ou endereço IP, o nó remoto rejeita a ligação.
Exemplo
Para verificar os SAN do certificado /etc/etcd/peer.crt, utiliza-se o seguinte comando:
1 | |
O comando devolve um resultado semelhante a este:
1 2 | |
Aqui, o certificado abrange os nomes DNS PSQL_VIP e PSQL_2, bem como os endereços IP 192.168.1.4 e 192.168.1.2.
Verificar que autoridade de certificação emitiu um certificado¶
Quando um certificado é gerado, pode ser-lhe adicionada a extensão X509v3 Authority Key Identifier. Esta extensão pode armazenar o hash da chave pública do seu emissor, que corresponde ao conteúdo da extensão X509v3 Subject Key Identifier do emissor.
Info
Os certificados gerados de acordo com a documentação de instalação do cluster PostgreSQL têm as extensões Authority Key Identifier e Subject Key Identifier.
Se estas extensões estiverem presentes, pode obter o hash da chave pública do emissor de um certificado e, em seguida, compará-lo com o hash contido na extensão Subject Key Identifier da CA que supostamente emitiu o certificado, para confirmar que se trata da correta.
Para obter o valor da extensão Authority Key Identifier de um certificado, utilize o comando abaixo.
Pode personalizar a variável do seguinte comando:
| Valor personalizado | Variável | Comentário |
|---|---|---|
ISSUED_CERT |
Caminho do certificado cujo emissor pretende verificar. |
Ou preencha o campo com um dos certificados do nó:
1 | |
Info
A opção -issuer permite obter o CN do certificado emissor.
Para obter o valor da extensão Subject Key Identifier de um certificado, utilize o comando abaixo.
Pode personalizar a variável do seguinte comando:
| Valor personalizado | Variável | Comentário |
|---|---|---|
ISSUER_CA |
Caminho do certificado da autoridade de certificação presumivelmente emissora. |
Ou preencha o campo com um dos certificados da autoridade de certificação:
1 | |
Info
A opção -subject permite obter o CN do certificado.
Exemplo
Pretende-se verificar que a CA que assinou o certificado contido no ficheiro /etc/patroni/client.crt é de facto a contida no ficheiro /etc/patroni/ca.crt.
Primeiro, obtém-se o conteúdo da extensão X509v3 Authority Key Identifier do certificado /etc/patroni/client.crt com o seguinte comando:
1 | |
O que devolve:
1 2 3 | |
Em seguida, obtém-se o conteúdo da extensão X509v3 Subject Key Identifier da CA /etc/patroni/ca.crt com o seguinte comando:
1 | |
O que devolve:
1 2 3 | |
Comparando os dois resultados, verifica-se que o Key Identifier e o CN são idênticos: o certificado contido no ficheiro /etc/patroni/ca.crt é de facto a CA que assinou o certificado contido no ficheiro /etc/patroni/client.crt.