Kubadilisha mamlaka ya vyeti vya VPN si kubadilisha faili. Wakati CA mpya inatia saini cheti chake cha kwanza, kila mthibitishaji anayeamini bado cha zamani tu lazima afanye uamuzi, na wenyeji wasiopokea kamwe nanga mpya wanaendelea kukataa wenza wazuri. Nimeona hii ikiharibika pande zote mbili: lango lilijifunza CA mpya na wateja hawakujifunza, kwa hiyo miunganisho mipya ilishindikana, wakati vichuguu vilivyokuwa vimeshainuka vilibaki juu na kufanya hitilafu ionekane kama tatizo la uelekezaji. Hii ni kile kinachobadilika, kwa mpangilio ambao hitilafu huonekana.

Ubadilishaji mmoja, mabadiliko mawili tofauti

Mamlaka ya vyeti ni jina, ufunguo wa umma na ufunguo wa faragha unaotia saini. Wathibitishaji kamwe hawaamini «CA» kwa njia isiyoeleweka. Wanaamini cheti kimoja mahususi ambacho tayari kiko katika hifadhi ya uaminifu, na wanakubali mtoaji tu ikiwa mnyororo wa sahihi unafika hadi nakala hiyo iliyohifadhiwa. Kwa hiyo kubadilisha CA hubadilisha mambo mawili ambayo hushindikana kwa kujitegemea: ni nanga zipi zinazokubaliwa na ni utambulisho gani wa mwenza uliotolewa chini yao.

Usanidi mwingi wa VPN huthibitisha pande zote mbili. Mteja huthibitisha cheti cha lango, na lango huthibitisha cha mteja. Mzunguko unaoboresha kifurushi cha mteja pekee huacha seva ikikataa kila mteja anayewasilisha bado utambulisho wa CA ya zamani, na kinyume chake ni kawaida vile vile. Kwanza orodhesha sehemu za utekelezaji: hifadhi za uaminifu za wateja, faili ya ca ya lango, proksi yoyote inayomaliza TLS mbele yake, na kichunguzi kinachokagua kituo cha mwisho kutoka nje.

Mthibitishaji huchunguza nini, kwa mpangilio

Uthibitishaji wa njia hupanda kutoka cheti cha mwenza kupitia wa kati hadi kufikia nanga inayoaminika. Katika kila hatua huthibitisha sahihi, hukagua kwamba kila cheti kiko ndani ya kipindi chake cha uhalali, na huthibitisha kwamba vikwazo vya msingi na matumizi ya ufunguo huruhusu mtoaji kutia saini. Ndipo tu programu inapotazama cheti cha jani: majina mbadala ya somo lazima yafunike jina lililopigwa, na matumizi yaliyopanuliwa ya ufunguo lazima yaruhusu uthibitishaji wa seva au mteja.

Ili kurudia safari hiyo nje ya mtandao, elekeza -CAfile kwenye kifurushi halisi utakachosambaza, sio hifadhi ya mfumo. Vinginevyo unajaribu mwenyeji, sio mabadiliko:

openssl verify -CAfile new-ca.crt gateway.crt
openssl verify -CAfile new-ca.crt -untrusted intermediate.crt client.crt
openssl x509 -in gateway.crt -noout -subject -issuer -dates
openssl s_client -connect gw.example.net:443 -CAfile new-ca.crt

Amri hiyo inafanya kazi tu dhidi ya msikilizaji wa kawaida wa TLS kama ukurasa wa utawala wa HTTPS wa lango; chaneli ya udhibiti ya OpenVPN huja kabla ya TLS, kwa hiyo s_client haiwezi kuchunguza kupeana mikono kwa kichuguu.

Kanuni za ujenzi wa njia nyuma ya hitilafu hizo ziko katika RFC 5280 kifungu cha 6. Zinaeleza hitilafu ambazo vinginevyo zinaonekana kuwa za kiholela: mtu wa kati aliyeisha muda ambao hakuna aliyekumbuka, cheti ambacho matumizi ya ufunguo kinakataza utiaji sahihi, au kizuizi cha jina kinachomwacha nje mwenyeji unaojaribu.

Kwa nini kichuguu cha zamani kinaendelea kufanya kazi

TLS na OpenVPN zote mbili huweka kipindi kilichoanzishwa hai baada ya kupeana mikono kumalizika. Hakuna kinachothibitisha upya cheti cha mwenza kwa kila pakiti, kwa hiyo mteja aliyeunganishwa kabla ya mabadiliko anaendelea kupitisha trafiki hadi atakapojadili upya, kuunganisha upya au kichuguu kuanguka. Pengo hili ndilo hufanya ubadilishaji wa CA uonekane sawa kwa saa moja kisha ushindikane katika wakati mbaya zaidi: kompyuta ya mkononi huamka kutoka usingizi, uchoraji ramani wa NAT huisha, lango huanza upya.

Uendelezaji wa kipindi hunyoosha udanganyifu zaidi. Tikiti ya kipindi cha TLS humruhusu mteja kurudi bila kutuma tena vyeti, na uendelezaji huruka uthibitishaji wa njia kwa sababu kupeana mikono kwa kwanza kulikwisha kufanya hivyo. Kwa hiyo jaribio la uaminifu ni kupeana mikono kamili katika mchakato mpya. Anzisha upya mteja badala ya kuunganisha upya kichuguu, na kwenye wasifu wa jaribio fikiria kuzima tikiti ili njia ya uendelezaji isiweze kuficha mnyororo uliovunjika.

Weka tabaka la ufunguo tuli kando na hili. tls-auth huongeza HMAC kwenye chaneli ya udhibiti, tls-crypt huisimba na kuithibitisha, na hakuna hata moja inayobeba nyenzo za cheti, kwa hiyo kuzungusha mojawapo ni mabadiliko tofauti yenye hali yake ya kushindikana. Usanidi unaochanganya vyote viwili huishia na mteja ambaye ufunguo wake tuli uko sawa, cheti chake kimepitwa na wakati na ujumbe wake wa hitilafu hautaji hata kimoja.

Mtego wa kutumia tena jina la somo

Inashawishi kutumia tena jina bainifu la mtangulizi ili hakuna kitu chini kinachohitaji kubadilika. Hiyo huweka mstari wa mtoaji thabiti kwenye kiolesura na kuharibu ishara moja unayohitaji. Vyeti viwili vyenye masomo yanayofanana na funguo tofauti haviwezi kutofautishwa kwa jina, kwa hiyo kifurushi kilicho na nanga zote mbili humpa mthibitishaji wagombea wawili na hakuna kanuni ya kuchagua.

Ujenzi wa njia kisha unaweza kuchagua isiyo sahihi, kuripoti «cheti cha mtoaji wa ndani hakipatikani» wakati nanga sahihi ipo, au kufanikiwa kwenye mwenyeji mmoja na kushindikana kwenye mwingine ulio na kifurushi kilekile, kwa sababu mpangilio wa wagombea ulitofautiana. Ikiwa jina lazima litumike tena, weka nanga zote mbili katika faili tofauti wakati wa mpito na uzipakie kwa uwazi, na uzichanganye tu pale kila mwenza anapowasilisha mtoaji mpya. Vinginevyo ipe mbadala jina la kawaida tofauti — kiambishi cha kizazi au tarehe kinatosha — ili kumbukumbu na maandishi ya hitilafu yaseme mwenza aliyeshindikana alitolewa chini ya mamlaka gani.

Mzunguko ambao hauangui mtandao

Kwa ubadilishaji uliopangwa, kubali nanga zote mbili kwa kipindi kikomo badala ya kubadilisha kwa hatua moja. Toa CA mpya na wa kati wake, weka nanga mpya kwenye kifurushi cha kila mthibitishaji kando ya ile ya zamani, na ndipo tu anza kutoa vyeti vya wenza kutoka kwayo. Wenza wenye utambulisho wa zamani huthibitishwa dhidi ya nanga ya zamani; wapya hufanya kazi dhidi ya ile mpya.

Ikifanywa kwa mpangilio huo, kila hatua inaweza kurudishwa. Hitilafu unayoepuka ni kubadilisha kwa wakati mmoja, ambapo mteja aliyekosa sasisho la kifurushi hukutana na lango ambalo tayari limeondoa nanga ya zamani, kupeana mikono hufa, na hakuna kumbukumbu inayosema upande upi umechelewa.

Ondoa kwa mwelekeo kinyume. Toa tena kila utambulisho ambao lazima ubaki, thibitisha kwamba kila mmoja unawasilisha mnyororo mpya, kisha ondoa nanga ya zamani kutoka kwenye vifurushi. Ondoa ufunguo wa faragha wa CA ya zamani kutoka huduma, kwa sababu mtoaji anayeweza bado kutia saini humaanisha kwamba mzunguko haujakamilika. Hifadhi vyeti na kumbukumbu za utoaji kwa ukaguzi. Mtoaji aliyepotea hurejeshwa kwenye uaminifu uleule; ufichuzi unahitaji utambulisho mpya na hakuna kurudi kwenye nanga ya zamani.

Thibitisha matokeo, sio orodha ya faili

Faili ya uaminifu katika saraka inayotarajiwa huthibitisha kidogo. Programu inaweza kusoma njia nyingine, muundo mwingine au nakala ndani ya kifurushi ambacho sasisho hulibadilisha. Kagua tabia katika ncha zote mbili, sio uwepo wa faili.

Thibitisha kwamba muunganisho mpya wenye utambulisho mpya unafanikiwa, kisha thibitisha kwamba utambulisho uliotolewa na CA iliyoondolewa unakataliwa. Jaribio la pili ndilo ambalo watu huliruka, na ndilo pekee linaloonyesha kwamba mamlaka ya zamani haitoi tena ufikiaji. Pale usanidi unategemea CRL au OCSP, kagua kwamba vituo vya usambazaji katika vyeti vipya hutatuliwa na kwamba wenza wanaouliza wanamfikia anayejibu.

Maliza na mteja ambaye hajawahi kuunganishwa: futa hali ya wasifu wake, unganisha na usome mnyororo uliojadiliwa. Mwenza anayeendeleza kipindi kilichohifadhiwa ataripoti kwa furaha kwamba uhamishaji ulifanikiwa wakati hakuthibitisha chochote.

Makala zinazohusiana