OpenVPN sertifikatı və açarı necə həll edir: daxili PEM yoxsa fayl yolu
Eyni direktiv ya fayl yolu, ya da daxil edilmiş PEM obyekti daşıyır. Sertifikatları hər hansı yerə köçürməzdən əvvəl yüklənmiş profilin hansını istifadə etdiyini oxuyun.
Mesaj deyir ki, OpenVPN daxili sertifikatı yükləyə bilmir, halbuki yaddaşınızda saxlanılan fayl adı başqa şey deyir. Parsere çatan şey fayl sistemində olanlardan daha vacibdir, çünki cert direktivi tamamilə fərqli iki növ dəyər qəbul edir. Biri onun açdığı yoldur; digəri isə konfiqurasiyanın içində gələn PEM mətnidir. İşləyən müştəriyə hansı formanın verildiyini bilməyincə hər düzəliş bir təxmin olur.
İki saxlama forması, bir direktiv
cert, key və ca direktivlərinin hər biri ya yol, ya da daxili blok qəbul edir. Dəyər yol olduqda OpenVPN həmin faylı açır və obyekti diskdən oxuyur. Konfiqurasiyada cert teqləri ilə əhatələnmiş blok olduqda isə eyni direktiv həmin teqlərin arasındakı məzmunu istifadə edir və ayrıca fayl iştirak etmir.
Hər iki forma sonda eyni növ obyekt yaradır, buna görə də işləyən bir quraşdırma başqa heç bir dəyişiklik etmədən onların arasında keçə bilər. Daxili müştəri sertifikatı və şəxsi açarı daşıyan profil özünü təmin edir və onu başqa maşına köçürmək sertifikat qovluğunu da köçürmədən işləyir.
Bunun əksi doğru deyil. client.crt faylını öz məlumatını daxil edən profilin yanına atmaq heç nəyi dəyişmir, çünki konfiqurasiyada heç nə həmin fayla istinad etmir. Açıq şəkildə mövcud olan faylın görməzdən gəlindiyi görünməsinin ən çox rast gəlinən səbəbi budur.
Daxili blok necə obyektə çevrilir
Daxili məzmun konfiqurasiyadan çıxarılır və mətn kimi PEM parserinə verilir. Bu parser adi sərhədləri gözləyir: BEGIN sətri, base64 yükü və uyğun END sətri. Blok uğursuz kopya nəticəsində kəsilmişsə, endirmə səhifəsi tərəfindən HTML ilə əhatələnmişsə və ya tireləri normallaşdıran redaktorda açılmışsa, parser mövcud görünən məzmunda uğursuz olur.
<cert>
-----BEGIN CERTIFICATE-----
...
-----END CERTIFICATE-----
</cert>
Səhv mətninin çaşdırıcı olmasının səbəbi də budur. daxili sözü yükləyicinin hara baxdığını təsvir edir, orada nə tapdığını yox. Konfiqurasiyada adı çəkilən fayl və onun içindəki daxili obyekt, əsas baytlar yararsız olduqda eyni şikayəti yarada bilər.
Yüklənmiş profilin hansı formanı həqiqətən istifadə etdiyini yoxlayın, redaktorunuzun təsadüfən hansı faylı açdığını yox:
grep -nE '^(ca|cert|key) |^<(ca|cert|key)>' client.ovpn
Yol istinadı necə həll olunur
Yol dəyəri konfiqurasiyanı ehtiva edən qovluğa deyil, müştərinin iş qovluğuna nisbətən açılır. systemd altında həmin iş qovluğu vahidin təyin etdiyi şeydir və shellinizdən interaktiv işə salma tamamilə başqa bir şeyi miras alır. Buna görə də eyni konfiqurasiya faylı əl ilə sınaqdan keçirdikdə işləyə, xidmət kimi isə uğursuz ola bilər.
Nisbi yollar eyni qeyri-müəyyənliyi miras alır. Çılpaq fayl adı gördükdə, prosesin istehsalatda cari qovluğunun nə olduğunu soruşun, terminalınızla uyğun gəldiyini fərz etmək əvəzinə.
Ayrıca saxlanılan sertifikat üçün oflayn təhlil, onun üstündə heç nəyi sazlamadan əvvəl obyekti təsdiqləyir:
openssl x509 -in client.crt -noout -subject -issuer -dates
openssl pkey -in client.key -noout -check
Bu əmrlər faylların oxunaqlı və struktur baxımından etibarlı olduğunu sübut edir. Onlar həmin tərəfdaşın buraxan şəxsə güvəndiyini, sertifikatın hələ də etibarlılıq pəncərəsi içində olduğunu və ya açarın ona aid olduğunu sübut etmir.
Parser xətası nə deyə bilər və nə deyə bilməz
Təhlil uğursuzluğu problemi bir girişə və bir mərhələyə yerləşdirir. O, müştərinin iki saxlama formasından hansını istifadə etdiyini demir və obyektin qəbul edilib-edilməyəcəyini də demir. Bunlar ayrı sübutlarla ayrı suallardır.
Təhlil uğurlu olduqdan sonra növbəti uğursuzluq daha sonrakı mərhələyə aiddir. Etimad rəddi, məqsəd uyğunsuzluğu və ya açar uyğunsuzluğu yükləyici tərəfindən deyil, tərəfdaş və ya TLS qatı tərəfindən bildirilir. Eyni faylı dəfələrlə dəyişdirmək o xətanı yerindən tərpətməyəcək.
Araşdırma apararkən həssas yarısını ictimai hesabatlardan kənarda saxlayın. Direktiv adlarını, xəta mətnini və blokun strukturunu paylaşın, açar materialı və hər hansı identifikasiyaedici yükü çıxarın. openvpn(8) təlimatı fayl direktivlərinin hər iki formasını və arxasındakı iş qovluğu davranışını sənədləşdirir.