თვითნაწერი VPN სერტიფიკატი: რას ნიშნავს და რას ენდობა
თვითნაწერი VPN სერტიფიკატი კვლავ შიფრავს ტრაფიკს. იცვლება ის, თუ ვის უთხარით, რომ ენდოს მას, რომელი საცავი იღებს ამ ნდობას და რომელი შემოწმებები რჩება.
აქ ყველაზე დიდ ზიანს ორი რწმენა აყენებს: რომ თვითნაწერი VPN სერტიფიკატი ნიშნავს, თითქოს გვირაბი არ არის დაშიფრული, და რომ VPN კლიენტის მოთხოვნილი ნებისმიერი რამის ინსტალაცია მხოლოდ VPN-ზე მოქმედებს. არც ერთი არ უძლებს რეალურ განლაგებასთან შეხებას. თვითნაწერი სერტიფიკატი აღწერს ხელმოწერის ურთიერთობას და არა უსაფრთხოების განაჩენს, და თქვენ მიერ დამატებული ნდობის ფარგლები დამოკიდებულია იმაზე, რომელ საცავში მოხვდება. მინახავს, როგორ შემოიტანა დახმარების სამსახურმა პროვაიდერის ფესვი Windows-ის მანქანაში ერთი გაფრთხილების ჩასახშობად და შემდეგ მთელი შუადღე ხსნიდა, რატომ შეწყვიტა ბრაუზერმა უკავშირო პორტალზე ჩივილი. ამ კითხვის ორი ნახევარი ერთად უნდა იყოს, ამიტომ ერთად განიხილეთ.
სერტიფიკატი ნდობის საცავი არ არის
ფაილი, რომელსაც სერვერი წარმოადგენს, ატარებს საჯარო გასაღებს, სუბიექტის სახელს, გამომცემლის სახელს, მოქმედების თარიღებსა და გაფართოებებს. თვითნაწერი ნიშნავს, რომ სუბიექტი და გამომცემელი ერთი და იგივე ერთეულია და ხელმოწერა მოწმდება თავად სერტიფიკატის გასაღებით. ამ განმარტებაში არაფერი ამბობს, რომ კავშირი სუსტია, და არაფერი ამბობს, რომ კლიენტი მას მიიღებს.
მიღება სხვა ადგილიდან მოდის: CA ფაილი, რომლისკენაც კლიენტს მიუთითებთ, თითის ანაბეჭდი, რომელსაც ხელით ადარებთ, ან ფესვი, რომელიც უკვე ზის საცავში, რომელსაც კლიენტი კითხულობს. განლაგება შეიძლება სრულიად ჯანმრთელი იყოს, თუმცა მისი სერტიფიკატი ყველა საჯარო ტესტს ჩააგდებდა. openssl verify სისტემის შეკვრის წინააღმდეგ შეატყობინებს უცნობ გამომცემელს და ეს შეტყობინება სწორია და არა ხარვეზი.
OpenVPN-ის ca პარამეტრი აპლიკაციით შემოფარგლული ნდობის ყველაზე ნათელი შემთხვევაა. ეს ფაილი ასახელებს იმ ღუზებს, რომლებსაც კლიენტი მიიღებს, და შეიძლება შეიცავდეს ერთ კერძო CA-ს ან მცირე განლაგებაში სერვერის საკუთარ თვითნაწერ სერტიფიკატს. ვერსია 2.6 ასევე იღებს --peer-fingerprint-ს SHA-256 თითის ანაბეჭდის დასამაგრებლად CA ფაილის გავრცელების ნაცვლად. WireGuard კიდევ უფრო შორს დგას: მას საერთოდ არ აქვს სერტიფიკატები, მხოლოდ სტატიკური საჯარო გასაღები თითოეული თანამოზიდვისთვის, ამიტომ თვითნაწერის კითხვა მასზე არ ვრცელდება.
სად აყენებთ ნდობას, განსაზღვრავს, ვინ დაიმკვიდრებს მას
იგივე სერტიფიკატი სამ ადგილას დადეთ და მიიღებთ სამ განსხვავებულ აფეთქების რადიუსს. მხოლოდ VPN კლიენტის მიერ წაკითხული შეკვრა მოქმედებს ამ კლიენტზე. ოპერაციული სისტემის საცავში არსებული ფესვი მოქმედებს ყველა პროგრამაზე, რომელიც ამ საცავს კითხულობს. ბრაუზერს, რომელსაც საკუთარი ნდობის მონაცემთა ბაზა აქვს, შეუძლია ორივე უგულებელყოს, და ამიტომ გაფრთხილება შეიძლება გადაურჩეს იმპორტს, რომელიც მუშაობდა.
Debian-ზე ან Ubuntu-ზე /usr/local/share/ca-certificates/-ში ფაილის ჩაგდება და update-ca-certificates-ის გაშვება ცვლის სისტემურ შეკვრას. Windows-ზე certutil -addstore -f Root წერს მანქანის საცავში და საჭიროებს ამაღლებულ მითითებას, ხოლო -user-ის დამატება სამაგიეროდ მიმდინარე მომხმარებლის საცავს მიმართავს; ორივე ურთიერთშემცვლელი არ არის. Firefox ინახავს საკუთარ NSS ბაზას, ამიტომ OS დონეზე იმპორტი იქ შეიძლება არასოდეს გამოჩნდეს.
ფარგლებს მნიშვნელობა აქვს იმის გამო, რისი გაკეთებაც ხელისუფლებას შეუძლია. გამომცემ CA-ს შეუძლია ხელი მოაწეროს სახელებს, რომლებთანაც არავითარი კავშირი არ აქვს, ამიტომ ყველაფერი, რაც ამ საცავს ენდობა, მიიღებს ამ ხელმოწერებს. ერთი დამაგრებული ფურცელი ამას ვერ შეძლებს; ის ზუსტად ერთი თანამოზიდვის იდენტობას ამოწმებს. თუ მიზანი ერთი VPN-ის დაკავშირებაა, აპლიკაციით შემოფარგლული CA ან დამაგრებული ფურცელი აღწევს ამას, ხოლო მთელი მანქანის ფესვი ბევრად უფრო დიდი დათმობაა, ვიდრე სიმპტომი მოითხოვს.
თქვენ კვლავ შიფრავთ საჯარო CA-ს გარეშე
TLS ხელის ჩამორთმევა იღებს სესიის გასაღებებს, მიუხედავად იმისა, ჯაჭვდება თუ არა თანამოზიდვის სერტიფიკატი იმასთან, რასაც უკვე ენდობით. თვითნაწერი არ ნიშნავს ღია ტექსტს და არ ნიშნავს, რომ ტრაფიკი ფრენის დროს იკითხება. ეს ნიშნავს, რომ კლიენტს წინასწარ არ აქვს მიზეზი ირწმუნოს, რომ გასაღები იმ სერვერს ეკუთვნის, რომელიც მან მოითხოვა.
სწორედ ამ ნაპრალში ცხოვრობს ნამდვილი შეტევები. ნებისმიერი სერტიფიკატის მისაღებად კონფიგურირებული კლიენტი, იქნება ეს გამორთული შემოწმების პარამეტრით თუ ერთხელ დაჭერილი და დავიწყებული „მაინც ენდე“ ღილაკით, სიხარულით დაშიფრავს იმას, ვინც პასუხობს. ჩარევა ხდება ავთენტიფიკაციის საფეხურზე, სანამ აპლიკაციის მონაცემები მოძრაობას დაიწყებს. იდენტობის შემოწმების გარეშე დაშიფვრა პასიურ დამკვირვებელს გარეთ ტოვებს და ცოტა სხვას აკეთებს.
გამომცემლისადმი ნდობა სახელის შემოწმებას არ გამოტოვებს
ჯაჭვის ვალიდაცია, სახელის დამთხვევა და სერტიფიკატის დანიშნულება ცალკეული გადაწყვეტილებებია. ჯაჭვი შეიძლება ვალიდური იყოს, სანამ სახელი არასწორია, და სახელი შეიძლება დაემთხვეს, სანამ სერტიფიკატი სხვა როლისთვის გაიცა. RFC 5280 განსაზღვრავს იმ ველებს, რომლებიც ამ შეზღუდვებს ატარებს, და რამდენად მკაცრად ახორციელებს კლიენტი მათ, თითოეული აპლიკაციის საქმეა.
OpenVPN ხილვადს ხდის გაყოფას. verify-x509-name ამაგრებს მოსალოდნელ სუბიექტს name, name-prefix ან subject დამთხვევით. remote-cert-tls server მოითხოვს, რომ თანამოზიდვის სერტიფიკატი სერვერის სერტიფიკატად იყოს გამოსაყენებელი, რაც უარყოფს მხოლოდ კლიენტის სერტიფიკატს მაშინაც, როცა გამომცემელი სანდოა. არც ერთი პარამეტრი არ იცვლება CA ფაილის გაგზავნით.
შეამოწმეთ სერტიფიკატი, სანამ რაიმეს გადაწყვეტთ:
openssl x509 -in server.crt -noout -subject -issuer -dates -ext subjectAltNameაჩვენებს, ვინ გამოსცა ის, რომელი სახელებისთვის და როდემდე.openssl verify -CAfile ca.crt server.crtამოწმებს, ნამდვილად ამოწმებს თუ არა თქვენ მიერ გასაგზავნი ჯაჭვი ფურცელს.openssl s_client -connect vpn.example.net:443 -servername vpn.example.net -CAfile ca.crt -verify_return_errorმუშაობს TLS-ის ბოლო წერტილებისთვის, როგორიცაა ვებ პორტალი; OpenVPN-ის ოქმი 1194-ზე ჩვეულებრივი TLS ნაკადი არ არის, ამიტომ ეს ტესტი იქ არ ვრცელდება.
ვადაგასული თარიღის, თქვენ მიერ დასაკავშირებელი სახელისთვის subjectAltName-ის გარეშე, ან serverAuth გამოყენების გარეშე სერტიფიკატი ვერ გაივლის, რამდენად ფრთხილადაც არ უნდა იყოს ღუზა დაყენებული.
ხუთი შემოწმება, სანამ ერთს მიიღებთ
შეადარეთ თითის ანაბეჭდი არხზე, რომელიც არ არის ის კავშირი, რომლის შეკეთებასაც ცდილობთ: კონსოლი, უკვე არსებული ინსტალატორი, ხელმოწერილი კონფიგურაციის ფაილი. openssl x509 -in server.crt -noout -fingerprint -sha256 სერვერზე და იგივე მნიშვნელობა კლიენტის ჟურნალში საკმარისია იმის საცნობად, რომ ერთ ობიექტს უყურებთ.
შემდეგ გადაწყვიტეთ, რას აყენებთ: ერთ ფურცელს თუ ხელისუფლებას, რომელსაც მეტის მოჭრა შეუძლია. შემდეგ გადაწყვიტეთ, სად მიდის ის, და დაასახელეთ აპლიკაციები, რომლებიც ამ საცავს კითხულობენ. ჩაწერეთ მოცილების გზა, სანამ ჯერ კიდევ გახსოვთ, რადგან ენდე-და-გააგრძელე ასე გადაიქცევა დროებითი იმპორტი მუდმივად.
ბოლოს, დაგეგმეთ ცვლილება. დამაგრებული სერტიფიკატი ან თითის ანაბეჭდი უნდა განახლდეს იმავე სანდო არხით, როცა სერტიფიკატი ბრუნავს, და კერძო CA-ს აქვს საკუთარი გაცემისა და გაუქმების სასიცოცხლო ციკლი. თუ კერძო გასაღები გაჟონავს, იმავე სერტიფიკატის ასლის ხელახლა ნდობა არაფერს არ ასწორებს; იდენტობა უნდა შეიცვალოს.
თუ გაფრთხილება ხუთივე შემოწმებას გადაურჩა, სასარგებლო კითხვა არ არის, რომელი ღილაკი აჩუმებს მას, არამედ ის, თუ რომელ საცავს კითხულობს კლიენტი სინამდვილეში და საიდან მოვიდა ის ფესვი. უპასუხეთ ამას და იმპორტი, რომელსაც აპირებთ, გადაწყვეტილებად იქცევა და არა რეფლექსად.