Опозвао си сертификат, генерисао нови списак, а стари профил и даље подиже тунел. Сама опозив није покварена: CRL је потписана изјава да серијски број више није важећи, и мења приступ тек када га компонента која завршава TLS учита, за исправног издаваоца, пре него што донесе одлуку о прихватању. Ту лежи већина ових случајева, и зато су опозив и одбијање две различите чињенице.

Прођи кроз пет провера испод редом и заустави се на првој која не важи, јер свака каснија претпоставља да су претходне истините.

Провери која компонента доноси одлуку о прихватању

Именуј процес који валидира клијентски сертификат, јер само тај процес може да спроведе списак. На серверу OpenVPN то је сам демон, конфигурисан са crl-verify. У ocserv-у то је линија crl у ocserv.conf. У strongSwan-у улази су учитани CRL-ови заједно са strictcrlpolicy. Прокси или уређај који завршава TLS испред VPN-а може бити прави верификатор, а ако јесте, демон иза њега никада не види клијентски сертификат.

WireGuard припада другој категорији. Нема сертификате ни списак опозива; peer се прима преко свог јавног кључа у конфигурацији, па прекид приступа значи уклањање тог кључа. Ако тражиш CRL у инсталацији само са WireGuard-ом, тог механизма тамо нема.

Пази и на замку на страни клијента. Клијент који одбија везу јер му се не свиђа серверски сертификат спроводи ланац сервера, не опозива сопствене креденцијале. Кориснички сертификат се опозива само тамо где се тај кориснички сертификат валидира, а то је готово увек страна сервера.

Провери за ког издаваоца је списак потписан

CRL је ограничен на једно издавалачко CA. Са кореном и посредничким CA, листови долазе од посредничког, па је списак који је битан CRL посредничког; списак корена не говори ништа о тим листовима. Верификатор усмерен на погрешну датотеку весело је парсира, не налази одговарајући унос и прихвата све.

Потврди упаривање пре него што дотакнеш демон. Издавалац на сертификату мора да одговара subject-у списка:

openssl x509 -in client.crt -noout -issuer -serial
openssl crl  -in intermediate.crl -noout -issuer -lastupdate -nextupdate

Када оба долазе из истог CA, серијски број исписан за сертификат је вредност која мора да се појави на списку. Ако се не слажу, држиш погрешан CRL или погрешну копију.

Важност припада истој провери. nextUpdate у прошлости чини списак застарелим, а верификатор који затаји затворено одбиће тада сваког клијента уместо само опозваног.

Провери да је серијски број у копији коју је демон учитао

Опозив уписује унос у базу CA, а поновно генерисање уписује нову датотеку. Ниједна радња не стиже до демона који ради и који је при покретању учитао стару копију. Испиши списак и потражи серијски број:

openssl crl -in intermediate.crl -noout -text | grep -i -A2 'Serial Number'
openssl ca -revoke client.crt
openssl ca -gencrl -out intermediate.crl

Затим провери како твоја имплементација преузима датотеку. OpenVPN чита путању задату crl-verify једном при покретању, па нови списак захтева поновно покретање или сигнал за поновно покретање; иста опција усмерена на директоријум поново се чита при свакој вези, и зато постоји режим директоријума. strongSwan мора поново да учита своје креденцијале, на пример са swanctl --load-creds. Да је датотека на диску исправна и да је верификатор користи су две различите чињенице.

Провери политику за списак који недостаје или је истекао

То је одлука коју многе инсталације никада не донесу изричито, и она одлучује да ли те опозив штити или закључава све напоље. Fail-closed значи да без употребљиве информације о опозиву наступа одбијање; fail-open значи да верификатор наставља без ње. strongSwan излаже избор као strictcrlpolicy. OpenVPN са crl-verify одбија да се покрене на датотеци коју не може да прочита или парсира, а истекао списак се појављује као TLS грешка провере о истеклом CRL-у уместо као тихо прихватање.

State of the revocation dataFail-closed resultFail-open result
List missing or unreadableVerification fails, so expect an outageEvery client connects, including the revoked one
List past nextUpdateValidation errors until a fresh list is deployedOld status is trusted indefinitely
Revoked serial present in the loaded listHandshake rejected for that certificateHandshake rejected for that certificate

Коју год страну изабрао, аутоматизација је важнија од избора: посао који регенерише CRL пре nextUpdate и упозорење када имплементирана копија остари спречавају да било која политика постане инцидент. Онлајн провера са OCSP-ом премешта свежину на responder, али важи исто правило, јер верификатор који није конфигурисан за проверу одговора не мења ништа.

Провери активну сесију, па копије кључа

Опозив се оцењује током валидације сертификата, која се дешава при повезивању и при поновном преговарању. Успостављена сесија наставља да ради док не преговара поново, а подразумевана вредност OpenVPN-а је једном на сат са reneg-sec 3600. Ако особа мора одмах ван мреже, прекини сесију уз објаву списка, па затим потврди да је поновно повезивање одбијено.

Одвој креденцијале од њихових копија. Брисање профила на једном преноснику не спречава другу копију истог приватног кључа да се аутентификује; опозив је оно што сваку копију чини бескорисном, и то тек кад претходне провере важе. Дај заменском уређају сопствени сертификат да се једно може опозвати без дирања другог.

Пре него што то прогласиш завршеним: валидациона компонента је идентификована, издавалац списка одговара издаваоцу листа, опозвани серијски број налази се у копији коју је демон стварно учитао, политика за спискове који недостају или су истекли свесна је и надзирана, а активна сесија је прекинута уместо чекања. Формате који стоје за свим тим одређује RFC 5280.

Повезани чланци