Към съдържанието

Проверка на сертификатите на клъстера PostgreSQL

По време на инсталирането, при подновяване или просто за да разберете кога изтичат сертификатите на клъстера PostgreSQL, може да е полезно да разгледате съдържанието на генерираните сертификати.

Клъстерът PostgreSQL използва следните сертификати:

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
/etc/etcd/
├── ca.crt
├── client.crt
├── client.key
├── peer.crt
└── peer.key

/etc/patroni/
├── ca.crt
├── client.crt
└── client.key
ca.crt

Сертификат на главния сертифициращ орган. Същият сертификат се намира в директориите /etc/patroni/ и /etc/etcd/.

client.crt

Сертификат на възела на PostgreSQL. Същият сертификат се намира в директориите /etc/patroni/ и /etc/etcd/. Използва се от patroni и etcd за клиентската комуникация между възлите.

client.key

Ключ, свързан със сертификата client.crt.

peer.crt

Същият сертификат като client.crt. Използва се за вътрешната комуникация на etcd между възлите.

peer.key

Същият ключ като client.key.

Следователно има общо три елемента:

  • сертификатът на главния сертифициращ орган (/etc/etcd/ca.crt, /etc/patroni/ca.crt);
  • сертификатът на възела на PostgreSQL (/etc/etcd/client.crt, /etc/etcd/peer.crt, /etc/patroni/client.crt);
  • ключът, свързан със сертификата на възела на PostgreSQL (/etc/etcd/client.key, /etc/etcd/peer.key, /etc/patroni/client.key).

Проверка на датата на изтичане на сертификат

За да проверите датата на изтичане на сертификат, използвайте командата по-долу.

Можете да персонализирате променливата за следната команда:

Персонализирана стойност Променлива Коментар
EXPIRY_CERT Път до сертификата, чиято дата на изтичане да се провери.

Или попълнете полето с един от сертификатите на клъстера:

1
openssl x509 -in EXPIRY_CERT -noout -enddate

Ако датата на изтичане е минала, сертификатът се счита за невалиден.

Предупреждение

Ако срокът на сертифициращия орган, издал сертификата, е изтекъл, сертификатът също се счита за невалиден. Затова проверете и датата на изтичане на сертифициращия орган.

Пример

За да проверим датата на изтичане на сертификата /etc/patroni/client.crt, използваме следната команда:

1
openssl x509 -in /etc/patroni/client.crt -noout -enddate

Резултатът е подобен на следния:

1
notAfter=Dec 18 14:04:09 2030 GMT

Тук сертификатът изтича на 18 декември 2030 г. в 14:04:09 ч.

Проверка на алтернативните имена на субекта (SAN) на сертификат

За да проверите SAN (Subject Alternative Names) на сертификат, т.е. имената и IP адресите, за които той е валиден, използвайте командата по-долу.

Можете да персонализирате променливата за следната команда:

Персонализирана стойност Променлива Коментар
SAN_CERT Път до сертификата, чиито SAN да се проверят.

Или попълнете полето с един от сертификатите на възела:

1
openssl x509 -in SAN_CERT -noout -ext subjectAltName

Ако DNS името или IP адресът, използвани за свързване с възел, не са сред SAN на неговия сертификат, връзката се счита за невалидна. По същия начин, когато възел отваря връзка към друг възел и представеният от него сертификат не съответства на собственото му DNS име или IP адрес, отдалеченият възел отхвърля връзката.

Пример

За да проверим SAN на сертификата /etc/etcd/peer.crt, използваме следната команда:

1
openssl x509 -in /etc/etcd/peer.crt -noout -ext subjectAltName

Командата връща резултат, подобен на следния:

1
2
X509v3 Subject Alternative Name:
    DNS:PSQL_VIP, DNS:PSQL_2, IP Address:192.168.1.4, IP Address:192.168.1.2

Тук сертификатът обхваща DNS имената PSQL_VIP и PSQL_2, както и IP адресите 192.168.1.4 и 192.168.1.2.

Проверка кой сертифициращ орган е издал даден сертификат

При генериране на сертификат към него може да бъде добавено разширението X509v3 Authority Key Identifier. Това разширение може да съхранява хеша на публичния ключ на издателя, който съответства на съдържанието на разширението X509v3 Subject Key Identifier на издателя.

Информация

Сертификатите, генерирани съгласно документацията за инсталиране на клъстера PostgreSQL, имат разширенията Authority Key Identifier и Subject Key Identifier.

Ако тези разширения са налице, можете да извлечете хеша на публичния ключ на издателя на сертификата и след това да го сравните с хеша в разширението Subject Key Identifier на сертифициращия орган, който би трябвало да е издал сертификата, за да потвърдите, че това е правилният орган.

За да извлечете стойността на разширението Authority Key Identifier на сертификат, използвайте командата по-долу.

Можете да персонализирате променливата за следната команда:

Персонализирана стойност Променлива Коментар
ISSUED_CERT Път до сертификата, чийто издател да се провери.

Или попълнете полето с един от сертификатите на възела:

1
openssl x509 -in ISSUED_CERT -noout -issuer -ext authorityKeyIdentifier

Информация

Опцията -issuer извлича CN на издаващия сертификат.

За да извлечете стойността на разширението Subject Key Identifier на сертификат, използвайте командата по-долу.

Можете да персонализирате променливата за следната команда:

Персонализирана стойност Променлива Коментар
ISSUER_CA Път до сертификата на сертифициращия орган, за който се предполага, че е издателят.

Или попълнете полето с един от сертификатите на сертифициращия орган:

1
openssl x509 -in ISSUER_CA -noout -subject -ext subjectKeyIdentifier

Информация

Опцията -subject извлича CN на сертификата.

Пример

Искаме да проверим дали сертифициращият орган, подписал сертификата във файла /etc/patroni/client.crt, наистина е този във файла /etc/patroni/ca.crt.
Първо извличаме съдържанието на разширението X509v3 Authority Key Identifier на сертификата /etc/patroni/client.crt със следната команда:

1
openssl x509 -in /etc/patroni/client.crt -noout -issuer -ext authorityKeyIdentifier

Командата връща:

1
2
3
issuer=CN = BDD-ROOT-CA
X509v3 Authority Key Identifier:
    38:B3:EC:CD:20:90:80:A4:B3:60:F8:E5:7B:98:92:3B:7D:26:06:2B

След това извличаме съдържанието на разширението X509v3 Subject Key Identifier на сертифициращия орган /etc/patroni/ca.crt със следната команда:

1
openssl x509 -in /etc/patroni/ca.crt -noout -subject -ext subjectKeyIdentifier

Командата връща:

1
2
3
subject=CN = BDD-ROOT-CA
X509v3 Subject Key Identifier:
    38:B3:EC:CD:20:90:80:A4:B3:60:F8:E5:7B:98:92:3B:7D:26:06:2B

Сравнението на двата резултата показва, че Key Identifier и CN са идентични: сертификатът във файла /etc/patroni/ca.crt наистина е сертифициращият орган, подписал сертификата във файла /etc/patroni/client.crt.