Portál AbcLinuxu, 11. května 2025 07:31
Ahoj, právě jsem narazil na problém, který mi pije krev. Prosím o jakoukoliv radu, případně o potvrzení, že by mohlo jít o bug.
Už pár měsíců používám ke správě databáze PostgreSQL buď PgAdmin III, nebo jednoduše psql. V obou případech používám SSL. Certifikáty na serveru i na klientovi platí přinejmenším do března roku 2009. Certifikát autority platí do roku 2011. Až do včerejška vše bezvadně fungovalo.
Teď mi PgAdmin i psql hlásí, že certifikát vypršel. To je samozřejmě naprostý nesmysl. (Pro jistotu jsem všechny certifikáty ještě jednou zkontroloval.) To jsou přesně ty chybové hlášky, které mě dokážou pořádně vytočit. Který certifikát vypršel??? Tento detail v té hlášce chybí.
Nejspíš jde o hlášku přímo od knihovny OpenSSL, kterou se PgAdmin ani psql nesnaží nijak interpretovat a prostě ji tupě vypíší do okna, resp. na terminál:
Error connecting to the server: SSL error: sslv3 alert certificate expired
Dá se z toho psql získat nějaký debuggovací výpis, aby bylo jasné, který certifikát má být údajně prošlý a co přesně dělá OpenSSL?
Tak už jsem na to přišel... To není bug, to je feature.
Až dosud se na straně klienta nekontrolovala pravost certifikátu serveru. (!!!) Proto se ve většině howto vůbec nehovořilo o tom, že by soubory root.crt
a root.crl
, které jinak jsou na straně serveru, měly být k dispozici také na straně klienta. Nějaká poslední verze psql
už zřejmě pravost certifikátu serveru kontroluje.
Místo aby klient řekl „Nemůžu ověřit pravost certifikátu serveru, protože nemám certifikát autority“, řekne „Platnost certifikátu vypršela“. A uživatel se může vzteky zbláznit.
openssl s_client
s pripadnou extra verbositou.
Tak ale hernajs! Po doplnění těch chybějících souborů to měsíc fungovalo a teď to přestalo fungovat samo od sebe, aniž bych cokoliv aktualizoval nebo změnil. Tak teď je to teprve pořádně k vzteku. Předtím aspoň existovalo nějaké rozumné vysvětlení. Teď to prostě bezdůvodně nefunguje. Stejná idiotská hláška, jen s tím rozdílem, že tentokrát tam všechny požadované soubory mám.
PostgreSQL je skvělá databáze, což ale není moc platné, když pgadmin3 sucks a psql sucks.
>A ejhle, je tu nový repertoár. Po rebootu klienta (uptime cca 1 den) se prozměnu objevuje:
psql: SSL error: certificate verify failed
Prostě když něco sucks, tak to sucks pořádně.
>Tak tohle byl prosím pěkně zase stejný případ jako minule. Stačilo by vysypat hlášku The fucking CRL has expired, get a new one, dude! Ušetřilo by mi to dva dny času a dva dny vzteku.
Místo toho jsem viděl střídavě hlášky certificate verify failed a sslv3 alert certificate expired. Místo abych se zaměřil na CRL, desetkrát jsem kontroloval certifikáty, pětkrát kompiloval OpenSSL a přidával do něj debuggovací výpisy a mlátil vzteky hlavou o strop.
Stačilo vygenerovat znovu CRL a přidat tohle do cronu, aby už takový problém prostě nenastal.
BTW, věděli jste, že CRL může vypršet? Víte, že implicitní doba platnosti CRL (v případě OpenSSL) je jeden měsíc? Já jsem o tom slyšel poprvé až teď... A to už dobré dva roky používám nejrůznější podpisy a šifrování.
To už teď vím taky. Předtím mě prostě nikdy nenapadlo spouštět něco jako openssl crl -text
, takže jsem netušil, že tam je taky nějaké datum a že to vyprší, podobně jako certifikát. Jasně, je to logické, protože mít staré CRL může znamenat bezpečnostní problém.
Proč ovšem OpenSSL tvrdí, že vypršel certifikát, když je problém pouze s CRL, to mi zůstývá záhadou. To přece nedává smysl. Druhé tvrzení, že selhalo ověření certifikátu, je mnohem blíž pravdě, protože bez aktuální CRL se nedá certifikát ověřit. Jenže proč to prostě neřekne? V žádné z těch hlášek nebylo klíčové slovo CRL. Selhalo to a hotovo. Prostě některý z těch certifikátů z nějakého důvodu nelze ověřit.
A vůbec, prase aby se v tom vyznalo! (Teď jsem potkal jedno na ulici. Jmenuje se Kvido a sousedi ho mají jako domácího mazlíčka.)
Tiskni
Sdílej:
ISSN 1214-1267, (c) 1999-2007 Stickfish s.r.o.