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

წაიკითხე ხარვეზი, სანამ რომელიმე ნდობის პარამეტრს შეცვლი

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

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

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

აირჩიე გამომცემელზე ნდობასა და ერთი გასაღების დამაგრებას შორის

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

ApproachGood fitWhat breaks it
Trust the issuing CA with --cafileInternal PKI you can obtain over an already trusted channelCA rotation, or a client that still falls back to public roots
Pin one key with --servercertNo CA relationship, or exactly one key should ever be acceptedAny reissue that generates a new key pair

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

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

ჩასვი მნიშვნელობა იმ ბრძანებაში, რომელსაც ნამდვილად უშვებ

დამაგრება მიდის სერვერის სერტიფიკატის ოფციაში და მისი პრეფიქსი განსაზღვრავს კოდირებას: თექვსმეტობითი საჯარო გასაღების დაჯესთები sha1 ან sha256-ის ქვეშ, და base64 გასაღების დამაგრება pin-sha256-ის ქვეშ. მისი მიწოდება ასევე თიშავს სისტემურ ნდობას იმ გაშვებისთვის, ამიტომ დამაგრებული გასაღები მთელი გადაწყვეტილება ხდება.

sudo openconnect --protocol=gp vpn.example.com --user alice \
  --servercert pin-sha256:AbCdEf...   # single key pin
sudo openconnect vpn.example.com --cafile /etc/ssl/internal-ca.pem --no-system-trust

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

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

გაუმკლავდი გადართვას საკუთარი თავის გარეთ ჩაკეტვის გარეშე

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

დაწერე ცვლილების თარიღი დამაგრების გვერდით. გადასინჯვის თარიღის გარეშე დამაგრება მომავალი შეფერხებაა დამაბნეველი შეცდომის შეტყობინებით.

გამორიცხე კლიენტის ვერსია ნდობის რედაქტირებამდე

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

openconnect --version

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

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