VPN sertifikat mərkəzini dəyişdirdikdə nə baş verir
VPN CA-nı dəyişmək etimadı və kimliyi ayrı-ayrılıqda dəyişir. Yoxlayıcılar nəyi yoxlayır, köhnə tunellər nəyə görə sağ qalır və iki istiqamətin işlədiyini necə sübut etmək olar.
VPN sertifikat mərkəzini dəyişmək fayl dəyişdirmək deyil. Yeni CA ilk sertifikatı imzaladığı anda yalnız köhnəsinə etimad edən hər yoxlayıcı qərar verməlidir, yeni ankoru almayan hostlar isə yaxşı qonşuları rədd etməyə davam edir. Mən bunun hər iki tərəfdən pozulduğunu görmüşəm: şlüz yeni CA-nı öyrəndi, müştərilər isə öyrənmədi, ona görə yeni bağlantılar kəsildi, artıq qurulmuş tunellər isə ayaqda qaldı və nasazlığı marşrutlaşdırma problemi kimi göstərdi. Budur nə dəyişir — nasazlıqların görünmə sırası ilə.
Bir əvəzləmə, iki ayrı dəyişiklik
Sertifikat mərkəzi bir addır, açıq açardır və imzalayan qapalı açardır. Yoxlayıcılar mücərrəd mənada «CA»ya etimad etmir. Onlar etimad anbarında artıq duran konkret bir sertifikata etimad edir və imza zənciri həmin saxlanan nüsxəyə çatdıqda verənini qəbul edir. Buna görə CA-nı dəyişmək bir-birindən asılı olaraq pozulan iki şeyi dəyişir: hansı ankorların qəbul edildiyi və hansı qonşu kimliklərinin onların altında verildiyi.
VPN quraşdırmalarının çoxu hər iki istiqamətdə yoxlayır. Müştəri şlüzün sertifikatını, şlüz isə müştərinin sertifikatını təsdiqləyir. Yalnız müştəri paketini yeniləyən dəyişmə serverin hələ köhnə CA kimliyi təqdim edən hər müştərini rədd etməsi ilə nəticələnir, əksi də eyni dərəcədə geniş yayılıb. Əvvəlcə tətbiq nöqtələrini inventarlaşdırın: müştəri etimad anbarları, şlüzün ca faylı, onun qarşısındakı hər hansı TLS-sonlandıran proksi və son nöqtəni xaricdən yoxlayan zond.
Yoxlayıcı nəyi və hansı sıra ilə yoxlayır
Yol yoxlaması qonşu sertifikatından aralıq sertifikatlarla etibarlı ankora qədər qalxır. Hər addımda imzanı yoxlayır, hər sertifikatın etibarlılıq pəncərəsi daxilində olduğunu nəzərdən keçirir və əsas məhdudiyyətlərlə açar istifadəsinin verənə imza icazəsi verdiyini təsdiqləyir. Yalnız bundan sonra tətbiq son sertifikata baxır: subyekt alternativ adları yığılan adı əhatə etməli, genişləndirilmiş açar istifadəsi isə server və ya müştəri təsdiqinə icazə verməlidir.
Həmin yolu oflayn təkrar etmək üçün -CAfile göstəricisini sistem anbarına deyil, yerləşdirəcəyiniz dəqiq paketə yönəldin. Əks halda dəyişikliyi deyil, hostu yoxlayırsınız:
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
Bu əmr yalnız şlüzün HTTPS idarəetmə səhifəsi kimi adi TLS dinləyicisinə qarşı işləyir; OpenVPN-in idarəetmə kanalı TLS-dən əvvəl gəlir, ona görə s_client tunel əl sıxışmasını yoxlaya bilməz.
Həmin xətaların arxasındakı yolqurma qaydaları RFC 5280 bölmə 6-da verilib. Onlar başqa cür təsadüfi görünən nasazlıqları izah edir: heç kimin xatırlamadığı vaxtı keçmiş aralıq sertifikat, açar istifadəsi imzanı qadağan edən sertifikat və ya yoxladığınız hostu istisna edən ad məhdudiyyəti.
Köhnə tunel niyə işləməyə davam edir
TLS və OpenVPN hər ikisi əl sıxışması bitdikdən sonra qurulmuş sessiyanı canlı saxlayır. Heç nə qonşu sertifikatını paket-paket yenidən yoxlamır, ona görə dəyişiklikdən əvvəl qoşulmuş müştəri yenidən danışıqlar aparana, yenidən qoşulana və ya tunel düşənə qədər trafiki ötürməyə davam edir. Bu boşluq CA dəyişməsinin bir saat yaxşı görünüb ən pis anda pozulmasının səbəbidir: noutbuk yuxudan oyanır, NAT uyğunlaşdırmasının vaxtı bitir, şlüz yenidən başlayır.
Sessiyanın bərpası illüziyanı daha da uzadır. TLS sessiya bileti müştəriyə sertifikatları yenidən göndərmədən qayıtmağa imkan verir və bərpa yol yoxlamasını keçir, çünki ilk əl sıxışması artıq bunu edib. Ona görə dürüst sınaq təzə prosesdə tam əl sıxışmasıdır. Tuneli yenidən qoşmaq əvəzinə müştərini yenidən başladın və sınaq profili üzərində biletləri söndürməyi düşünün ki, bərpa yolu qırıq zənciri gizlədə bilməsin.
Statik açar qatını bundan ayrı saxlayın. tls-auth idarəetmə kanalına HMAC əlavə edir, tls-crypt onu şifrələyir və təsdiqləyir, heç biri sertifikat materialı daşımır, ona görə hər birinin rotasiyası öz nasazlıq rejimi olan ayrı dəyişiklikdir. İkisini qarışdıran quraşdırmalar statik açarı sağlam, sertifikatı köhnəlmiş və xəta mesajı ikisini də qeyd etməyən müştəri ilə nəticələnir.
Subyekt adını təkrar istifadə tələsi
Heç nə axında dəyişməsin deyə sələfin fərqləndirici adını təkrar istifadə etmək cəlbedicidir. Bu, verən sətrini interfeysdə sabit saxlayır və sizə lazım olan yeganə siqnalı məhv edir. Eyni subyektli, fərqli açarlı iki sertifikatı adla ayırmaq mümkün deyil, ona görə hər iki ankoru saxlayan paket yoxlayıcıya iki namizəd və seçim qaydası olmadan verir.
Sonra yolqurma yanlışını seçə, düzgün ankor mövcud ikən «yerli verən sertifikatı alına bilmədi» bildirə və ya namizəd sırası fərqləndiyi üçün eyni paketi saxlayan bir hostda uğur qazanıb digərində kəsə bilər. Ad mütləq təkrar istifadə olunacaqsa, keçid dövründə hər iki ankoru ayrı fayllarda saxlayın və onları açıq şəkildə yükləyin, yalnız hər qonşu yeni verəni təqdim etdikdən sonra birləşdirin. Əks halda əvəzləməyə fərqli ümumi ad verin, nəsil və ya tarix şəkilçisi kifayətdir, belə ki jurnallar və xəta sətirləri uğursuz qonşunun hansı orqan altında verildiyini desin.
Şəbəkəni yerə salmayan dəyişmə
Planlı əvəzləmə üçün bir addımda keçmək əvəzinə məhdud pəncərə ərzində hər iki ankoru qəbul edin. Yeni CA-nı və aralıq sertifikatlarını verin, yeni ankoru hər yoxlayıcının paketinə köhnənin yanına qoyun və yalnız bundan sonra qonşu sertifikatlarını ondan verməyə başlayın. Köhnə kimlikli qonşular köhnə ankora qarşı yoxlanır; yenilər yeni ankora qarşı işləyir.
Bu sıra ilə edildikdə hər addım geri qaytarıla bilər. Qaçdığınız nasazlıq eyni vaxtlı keçiddir: paket yeniləməsini qaçırmış müştəri köhnə ankoru artıq təqaüdə çıxarmış şlüzə rast gəlir, əl sıxışması ölür və heç bir jurnal hansı tərəfin köhnəldiyini demir.
Təqaüdü əks istiqamətdə aparın. Qalmalı olan hər kimliyi yenidən verin, hər birinin yeni zənciri təqdim etdiyini təsdiqləyin, sonra köhnə ankoru paketlərdən çıxarın. Köhnə CA-nın qapalı açarını xidmətdən çıxarın, çünki hələ imzalaya bilən verən dəyişmənin bitmədiyini göstərir. Sertifikat və verilmə qeydlərini audit üçün saxlayın. İtirilmiş verən eyni etimada bərpa olunur; sızma yeni kimliklər tələb edir və köhnə ankora qayıdış yoxdur.
Fayl siyahısını deyil, nəticəni yoxlayın
Gözlənilən qovluqdakı etimad faylı az şey sübut edir. Tətbiq başqa yolu, başqa formatı və ya yeniləmənin dəyişdirdiyi paket içindəki nüsxəni oxuya bilər. Faylın mövcudluğunu deyil, hər iki tərəfdə davranışı yoxlayın.
Yeni kimliklə təzə bağlantının uğurlu olduğunu təsdiqləyin, sonra təqaüdə çıxmış CA tərəfindən verilən kimliyin rədd edildiyini təsdiqləyin. İnsanların atladığı sınaq ikincisidir və köhnə orqanın artıq giriş vermədiyini göstərən yeganə sınaqdır. Quraşdırma CRL və ya OCSP-yə güvənirsə, yeni sertifikatlardakı paylama nöqtələrinin həll olunduğunu və cavab verənin sorğu göndərən qonşulardan əlçatan olduğunu yoxlayın.
Heç vaxt qoşulmamış müştəri ilə bitirin: profil vəziyyətini silin, qoşulun və razılaşdırılmış zənciri oxuyun. Keşlənmiş sessiyanı bərpa edən qonşu heç nə yoxlamadığı halda miqrasiyanın işlədiyini sevinclə bildirəcək.