შეადარეთ ორი OpenVPN პროფილი გასაღებების გაჟონვის გარეშე
ტექსტურ diff-ს შეუძლია ჩაშენებული გასაღებები ისე ადვილად გამოამჟღავნოს, როგორც შეცვლილი დირექტივა აჩვენოს. შეადარეთ როლის მიხედვით დაცულ ასლებზე, შემდეგ შექმენით ცალკე რედაქტირებული დიაგნოსტიკური ფაილი.
ორი პროფილი, ერთი უკავშირდება, მეორე — არა, და მიზეზის ნახვის სწრაფი გზა diff-ია. პრობლემა ისაა, რომ იგივე diff ბეჭდავს ჩაშენებულ პირად გასაღებს, სტატიკურ გასაღებს და ნებისმიერ სერტიფიკატთა ბლოკს, რომელსაც ფაილი ატარებს, და ადამიანები შედეგს ჩატში აკრავენ სანამ შეამჩნევენ. რის შედარებასაც აპირებთ, ამის გადაწყვეტა ბრძანების გაშვებამდე მოდის. შეადარეთ სტრუქტურა და როლები დაცულ ასლებზე, და ცალკე რედაქტირებული ფაილი შექმენით, როცა სხვამ უნდა ნახოს ის.
რას ატარებს სინამდვილეში .ovpn ფაილი
.ovpn ფაილი კონფიგურაციაა არასავალდებულო ჩაშენებული ბლოკებით. მას შეიძლება ჰქონდეს CA სერტიფიკატი, კლიენტის სერტიფიკატი, პირადი გასაღები, tls-auth ან tls-crypt გასაღები, და დირექტივები, რომლებიც გარე ფაილებზე მიუთითებენ ან სერტიფიკატებს ითხოვენ. ორი ფაილი შეიძლება თითქმის იდენტურად გამოიყურებოდეს და განსხვავდებოდეს მხოლოდ ბლოკის შიგნით, ან ერთი დირექტივით, რომელიც ტრანსპორტს მთლიანად ცვლის. ხაზების რაოდენობა ვერაფერს გეტყვით იმაზე, რომელი მოხდა.
განსხვავება გასაღების ბლოკის შიგნით რაიმეს საჯარო მტკიცებულება არ არის. ხელახლა გაცემული სერტიფიკატი და ახალი გასაღების მქონე სერტიფიკატი ერთი და იგივე ფორმის ცვლილებას იძლევა, ამიტომ ბლოკის შეუთავსებლობა გეუბნებათ, რომ მასალა განსხვავებულია, და არა რომელმა გადაწყვეტილებამ შექმნა ის. მოეპყარით მას, როგორც ველების შედარების სიგნალს, და არა როგორც დასკვნას.
შეადარეთ როლის მიხედვით, და არა ხაზის მიხედვით
მიჰყევით კავშირის საკუთარ რიგს: ჯერ ბოლო წერტილი და ტრანსპორტი, შემდეგ ნდობა და მოსალოდნელი იდენტობა, შემდეგ მომხმარებლის ავთენტიფიკაცია, შემდეგ მარშრუტები, DNS და სკრიპტის კაუჭები. ეს თანმიმდევრობა ემთხვევა იმას, რასაც კლიენტი აკეთებს, ამიტომ პირველი განსხვავება, რომელსაც შეხვდებით, პირველი რამ არის, რამაც კავშირი შეიძლება გატეხა. ანბანური შედარება კი დაკავშირებულ პარამეტრებს მთელ გამოსავალზე ფანტავს.
ველებზე ორიენტირებული გავლა ამ ელემენტებს ამ რიგით უყურებს. ყველაფერი, რასაც კლიენტი ინტერაქტიულად ითხოვს, ავთენტიფიკაციის რიგს ეკუთვნის, და არა ნდობის რიგებს.
remote,protoდა პორტი, ყოველი კავშირის ბლოკის ჩათვლით.caდაcert: გამომცემი, საგანი და ვადის გასვლის თარიღი.- საერთოდ არის თუ არა პირადი გასაღები, არასოდეს — რას შეიცავს.
tls-authანtls-cryptარსებობა და გასაღების მიმართულება.- ავთენტიფიკაციის დირექტივები, მათ შორის ნებისმიერი მითითება სერტიფიკატების ფაილზე.
- მარშრუტები, DNS პარამეტრები და სკრიპტის კაუჭები, რომლებიც კავშირისას მუშაობს.
როცა ფაილი რამდენიმე კავშირის ბლოკს შეიცავს, ყოველი პარამეტრი თავის ბოლო წერტილთან შეინახეთ. მხოლოდ პირველი remote ხაზის შედარებამ შეიძლება გამოტოვოს ალტერნატივა, რომელსაც კლიენტი ამ ქსელში რეალურად ირჩევს.
რატომ არის ჩვეულებრივი diff არასწორი ინსტრუმენტი
ჩვეულებრივი diff ტექსტისთვისაა აგებული, და არა საიდუმლოებებისთვის. ის სიამოვნებით დაბეჭდავს პირად გასაღებს ეკრანის ისტორიაში და არ გეტყვით, რომ დირექტივა, რომელსაც უყურებთ, ხარვეზს არ უკავშირდება. ველების ამოღება ერთდროულად უფრო უსაფრთხო და უფრო წაკითხვადია, რადგან სერტიფიკატის მასალა შეიძლება შევადაროთ მეტამონაცემებად და არა ბაიტებად.
openssl x509 -in ca.crt -noout -subject -issuer -enddate
openssl x509 -in client.crt -noout -subject -issuer -enddate
grep -E '^(remote|proto|port|tls-auth|tls-crypt|route|dhcp-option)' profile.ovpn
პირველი ორი ბრძანება ბეჭდავს იდენტობას და ვალიდობას გასაღების შეხების გარეშე, ამიტომ მათი გამოსავალი ჩასმისთვის უსაფრთხოა. grep ბეჭდავს დირექტივების სახელებსა და მნიშვნელობებს, მაგრამ არასოდეს ბლოკების სხეულებს, რაც მას სწორ პირველ გავლად აქცევს, როცა ტრანსპორტის ან მარშრუტიზაციის განსხვავებას ეჭვობთ. თუ თავად ბლოკი უნდა შევადაროთ, შეადარეთ მისი ჰეში და არა შიგთავსი.
შექმენით რედაქტირებული ასლი ტიკეტისთვის
მოხსენით ნამდვილი საიდუმლოებები და არასაჭირო იდენტიფიკატორები, შეინარჩუნეთ ველების სახელები და საკმარისი სტრუქტურა განსხვავების ასახსნელად. იგივე ფორმის ნიშანი მაინც ამჟღავნებს, სად არის მასალა და რა სიგრძის იყო, ამიტომ გადაწყვიტეთ, მისაღებია თუ არა ესეც. შეამოწმეთ თავად საბოლოო დანართი, ნაცვლად იმისა, რომ გაიხსენოთ გაშვებული ბრძანება. არ შეცვალოთ სამუშაო ორიგინალი მხოლოდ მაგალითის შესაქმნელად, რადგან რედაქტირებული პროფილი სავალდებულოდ გაშვებადი არ არის და არასოდეს უნდა იმპორტირდეს ხელახლა.
შეინახეთ ორიგინალები ცნობადი ფაილის სახელითა და ჰეშით, ნაცვლად იმისა, რომ დააკოპიროთ ისინი სამ მსგავს საქაღალდეში. ჰეშის სტრიქონი საკმარისია იმის დასამტკიცებლად, თუ რომელი ფაილი შემოწმდა, და არაფერი ღირს, თუ გაჟონავს. ცვლილების დახურვის შემდეგ შეკვეცეთ ასლები, რომ შემდეგმა ადამიანმა ერთი ავტორიტეტული ფაილი მიიღოს მემკვიდრეობით.
შეინახეთ შედარება ხარვეზთან მიბმული
შედარება თავის ფასს იმსახურებს, როცა პასუხობს კითხვას ერთი იმპორტის ან ერთი კავშირის ხარვეზის შესახებ. ჯერ დაასახელეთ წარუმატებელი ნაბიჯი, შემდეგ შეადარეთ მხოლოდ ის ველები, რომლებზეც ეს ნაბიჯია დამოკიდებული; კლიენტის ყველა სერტიფიკატის ერთ საქაღალდეში შეგროვება შემდეგ გაჟონვას უფრო სავარაუდოს, ხოლო შემდეგ დიაგნოზს უფრო ნელი ხდის. რაც უფრო ვიწროა კითხვა, მით უფრო მოკლეა იმ ველების სია, რომლებსაც შეუძლიათ მასზე პასუხის გაცემა.
თუ ახალი ფაილი ოპერატორისგან მოვიდა, ნდობის მასალის შეცვლამდე დაადასტურეთ მისი გავრცელების გზა. ცვლილების შემდეგ შეამოწმეთ იმპორტირებული ასლი, რომელიც კლიენტმა რეალურად აირჩია, და შეთანხმებული შედეგი, რადგან დირექტივა შეიძლება უგულებელყოს ან სხვაგვარად წაიკითხოს კლიენტის სხვა ვერსიამ. ფაილი დისკზე არ არის იმ კავშირის მტკიცებულება, რომელიც გაიმართა. დირექტივების სემანტიკა OpenVPN 2.6 სახელმძღვანელოში.