შეტყობინება ამბობს, რომ OpenVPN ვერ ტვირთავს ჩაშენებულ სერტიფიკატს, თუმცა თქვენს თავში შენახული ფაილის სახელი საპირისპიროს ამბობს. უფრო მნიშვნელოვანია ის, რაც პარსერმა მიიღო, ვიდრე ის, რაც ფაილურ სისტემაშია, რადგან cert დირექტივა იღებს ორ სრულიად განსხვავებულ მნიშვნელობის ტიპს. ერთი არის ბილიკი, რომელსაც ის ხსნის; მეორე არის PEM ტექსტი, რომელიც კონფიგურაციის შიგნით მოვიდა. სანამ არ იცით, რომელი ფორმა მიიღო მოქმედმა კლიენტმა, ყოველი გასწორება ვარაუდია.

ორი შენახვის ფორმა, ერთი დირექტივა

cert, key და ca დირექტივები თითოეული იღებს ბილიკს ან ჩაშენებულ ბლოკს. როცა მნიშვნელობა ბილიკია, OpenVPN ხსნის ამ ფაილს და კითხულობს ობიექტს დისკიდან. როცა კონფიგურაცია შეიცავს cert ტეგებით შემოსაზღვრულ ბლოკს, იგივე დირექტივა სამაგიეროდ მოიხმარს ამ ტეგებს შორის არსებულ შიგთავსს და ცალკე ფაილი არ მონაწილეობს.

ორივე ფორმა საბოლოოდ ერთი და იმავე ტიპის ობიექტს წარმოქმნის, ამიტომ მოქმედ განლაგებას სხვა ცვლილების გარეშე შეუძლია მათ შორის გადასვლა. პროფილი, რომელიც ატარებს ჩაშენებულ კლიენტის სერტიფიკატსა და პირად გასაღებს, თვითკმარია და სხვა მანქანაზე მისი კოპირება მუშაობს სერტიფიკატების საქაღალდის კოპირების გარეშეც.

საპირისპირო არ არის მართალი. client.crt-ის დადება იმ პროფილის გვერდით, რომელიც საკუთარ მონაცემებს შიგნით ამატებს, არაფერს ცვლის, რადგან კონფიგურაციაში არაფერი მიუთითებს ამ ფაილზე. ეს არის ყველაზე გავრცელებული მიზეზი იმისა, რომ აშკარად არსებული ფაილი უგულებელყოფილად ჩანს.

როგორ იქცევა ჩაშენებული ბლოკი ობიექტად

ჩაშენებული შიგთავსი ამოღებულია კონფიგურაციიდან და ტექსტის სახით გადაეცემა PEM პარსერს. ეს პარსერი ელოდება ჩვეულებრივ საზღვრებს: BEGIN ხაზს, base64 დატვირთვას და შესაბამის END ხაზს. თუ ბლოკი ჩაიჭრა წარუმატებელი კოპირებით, ჩაიფუთა HTML-ში ჩამოტვირთვის გვერდის მიერ, ან გაიხსნა რედაქტორში, რომელმაც ტირეები ნორმალიზება მოახდინა, პარსერი ვარდება იმ შიგთავსზე, რომელიც თითქოს არსებობს.

<cert>
-----BEGIN CERTIFICATE-----
...
-----END CERTIFICATE-----
</cert>

ამიტომაც შეცდომაში შემყვანია შეცდომის ფორმულირება. სიტყვა ჩაშენებული აღწერს, სად შეხედა ჩამტვირთავმა და არა, რა იპოვა იქ. კონფიგურაციაში დასახელებული ფაილი და მასში ჩაშენებული ობიექტი შეიძლება ერთსა და იმავე საჩივარს იძლეოდეს, როცა ძირეული ბაიტები უხმარია.

შეამოწმეთ, რომელ ფორმას იყენებს ჩატვირთული პროფილი რეალურად და არა, რომელი ფაილი გახსნა შემთხვევით თქვენმა რედაქტორმა:

grep -nE '^(ca|cert|key) |^<(ca|cert|key)>' client.ovpn

როგორ იხსნება ბილიკის მინიშნება

ბილიკის მნიშვნელობა იხსნება კლიენტის სამუშაო საქაღალდის მიმართ და არა იმ საქაღალდის მიმართ, რომელიც კონფიგურაციას შეიცავს. systemd-ის ქვეშ ეს სამუშაო საქაღალდე არის ის, რასაც ერთეული ადგენს, ხოლო თქვენი ჭურვიდან ინტერაქტიული გაშვება სრულიად სხვა რამეს მემკვიდრეობით იღებს. ამიტომ ერთი და იგივე კონფიგურაციის ფაილმა შეიძლება იმუშაოს ხელით შემოწმებისას და ჩავარდეს როგორც სერვისი.

ფარდობითი ბილიკები იმავე გაურკვევლობას მემკვიდრეობით იღებენ. როცა ხედავთ შიშველ ფაილის სახელს, ჰკითხეთ, რა არის პროცესის მიმდინარე საქაღალდე წარმოებაში, იმის ნაცვლად, რომ ჩათვალოთ, რომ ის თქვენს ტერმინალს ემთხვევა.

ცალკე შენახული სერტიფიკატისთვის ოფლაინ ანალიზი ადასტურებს ობიექტს მანამ, სანამ მის ზემოთ რამეს გამართავთ:

openssl x509 -in client.crt -noout -subject -issuer -dates
openssl pkey -in client.key -noout -check

ეს ბრძანებები ამტკიცებს, რომ ფაილები იკითხება და სტრუქტურულად ვალიდურია. ისინი არ ამტკიცებენ, რომ პარტნიორი ენდობა გამომცემელს, რომ სერტიფიკატი ჯერ კიდევ მოქმედების ფანჯარაშია, ან რომ გასაღები მას ეკუთვნის.

რა შეიძლება გითხრას და რა არა პარსერის შეცდომამ

ანალიზის ჩავარდნა ალოკალიზებს პრობლემას ერთ შესასვლელსა და ერთ ეტაპზე. ის არ გითხრით, ორი შენახვის ფორმიდან რომელი გამოიყენა კლიენტმა და არც იმას, მიიღებოდა თუ არა ობიექტი. ეს ცალკე კითხვებია ცალკე მტკიცებულებებით.

როცა ანალიზი წარმატებით დასრულდება, შემდეგი ჩავარდნა უფრო გვიანდელ ეტაპს ეკუთვნის. ნდობის უარყოფას, დანიშნულების შეუთავსებლობას ან გასაღების შეუთავსებლობას აცნობებს პარტნიორი ან TLS ფენა და არა ჩამტვირთავი. იმავე ფაილის განმეორებით შეცვლა ამ შეცდომას არ გადაადგილებს.

გამოძიების დროს მგრძნობიარე ნახევარი საჯარო ანგარიშების გარეთ შეინახეთ. გააზიარეთ დირექტივების სახელები, შეცდომის ტექსტი და ბლოკის სტრუქტურა, გასაღების მასალისა და ნებისმიერი იდენტიფიცირებადი დატვირთვის მოშორებით. openvpn(8) სახელმძღვანელო აღწერს ფაილის დირექტივების ორივე ფორმას და მათ უკან არსებულ სამუშაო-საქაღალდის ქცევას.

დაკავშირებული სტატიები