Ką jūsų VPN klientas patikrina prieš pasitikėdamas sertifikatu
Praveskite sertifikato įspėjimą per keturis vartus, kuriuos tikrina jūsų klientas: CA pasitikėjimas, grandinės sudarymas, partnerio vardas ir paskirtis bei atšaukimo politika.
Jūsų VPN klientas praneša, kad sertifikato patikrinti nepavyko, ir dialogas tuo pasibaigia. Failas yra, serveris veikia, o tas pats profilis praėjusį mėnesį veikė kitame nešiojamajame kompiuteryje. Po tuo vienos eilutės įspėjimu klientas praleido partnerio sertifikatą pro ketverius vartus: jūsų sukonfigūruota sertifikatų valdžia laiduoja parašo kelią, tas kelias pasiekia valdžią, partnerio vardas yra tas, kurio prašėte, ir sertifikatas dabar tinkamas šiai paskirčiai. Raskite vartus, kurie užsidarė, ir taisymas paprastai yra vienas failas; praleiskite tą žingsnį ir visą popietę iš naujo importuosite paketus.
Perskaitykite dialogą prieš redaguodami profilį
Sertifikatų klaidų formuluotes pateikia žemiau esanti biblioteka, o ne jūsų įdiegtas VPN produktas, todėl tiksli eilutė yra pirmasis jūsų įrodymas. „Nepavyksta gauti vietinio išdavėjo sertifikato“ nurodo kelią arba pasitikėjimo inkarą. „Sertifikatas pasibaigė arba dar negalioja“ nurodo laiką. „Nepalaikoma sertifikato paskirtis“ nurodo išplėstinį rakto naudojimą. Vardo nesutapimas pasako, kokio vardo jis norėjo. Nė vieno iš keturių nepataiso kliento perdiegimas.
Prieš ką nors keisdami padidinkite žurnalo lygį. OpenVPN praneša apie patikrinimo nesėkmę aplink rankos paspaudimą, kai paleidžiate jį su --verb 4, o strongSwan savo tapatybės ir grandinės sprendimus rašo į charon žurnalą. Tada patvirtinkite, kurį sertifikatą tikrinate, nes žmonės įprastai testuoja failą diske, o profilis įterpia senesnę kopiją. Kai profilis įterpia PEM blokus, testuojamas būtent įterptas sertifikatas.
Sertifikatų valdžia pasirašo tapatybes, o ne leidimus
Valdžia turi vardą ir parašo raktą. Ji išduoda sertifikatus, kurie savo politika sieja viešą raktą su tuo vardu, pridėdama galiojimo langą ir naudojimo apribojimus. Jūsų klientui atpažinti išdavėją reikia tik valdžios sertifikato; parašo rakto jam niekada nereikia, o išsiuntus tą raktą klientams jie įgytų galimybę sukurti bet kokią tapatybę, kuria pasitiki diegimas.
Pasitikėjimas valdžia kiekvieną jos pasirašytą sertifikatą daro kandidatu, o ne tinkamu partneriu. To paties vidinio CA žiniatinklio serverio sertifikatas taip pat yra kandidatas. Todėl egzistuoja vardo ir paskirties vartai, ir todėl kompromituotas CA raktas svarbesnis už bet kurį atskirą serverį: jis pasiekia kiekvieną tapatybę, kurią valdžia kada nors išdavė. Išduokite kliento sertifikatus kiekvienam įrenginiui, kad pamestas nešiojamasis būtų vienas atšaukimas, o ne viso diegimo raktų pergeneravimas.
Atstatykite kelią, kurį klientas bando sudaryti
Kelias eina nuo partnerio sertifikato per nulį ar daugiau tarpinių sertifikatų iki šaknies jūsų pasitikėjimo saugykloje. Trūkstamas tarpinis sertifikatas yra dažniausia grandinės klaida, o iš kliento pusės ji atrodo lygiai taip pat kaip nepasitikėtina šaknis. Pirmiausia perskaitykite lapą, tada leiskite OpenSSL sudaryti kelią iš medžiagos, kurią ketinate siųsti.
openssl x509 -in server.crt -noout -subject -issuer -dates
openssl verify -CAfile root.crt -untrusted intermediate.crt server.crt
openssl verify -show_chain -CAfile root.crt -untrusted intermediate.crt server.crt
Išėjimo būsena nulis reiškia, kad kelias sudarytas iš tų failų; nesėkmė įvardija sertifikatą, kurio pasiekti nepavyko. Jei openssl verify pavyksta, o klientas vis dar atmeta, skirtumas yra tame, ką serveris iš tikrųjų siunčia, arba tame, kurį pasitikėjimo failą įkelia profilis. OpenVPN tarpiniai sertifikatai gali keliauti su serverio sertifikato failu arba būti pateikti atskirai su --extra-certs, o paketas su dviem šaknimis po tuo pačiu subjekto vardu nusiųs vieną jūsų klientą neteisinga šaka.
Vardas ir paskirtis yra atskiri vartai
Grandinės sudarymas niekada neklausia, ar vardas jūsų. OpenVPN jį tikrina tik tada, kai profilis nustato --verify-x509-name, o senas įprotis sutapatinti vien bendrą vardą lūžta sertifikatuose, kurių tapatybės gyvena subjectAltName. IKEv2 diegimai lygina sukonfigūruotą tapatybę su SAN įrašais arba su skiriamuoju vardu, priklausomai nuo kliento, o pakaitos simbolio ar %any reikšmė tyliai išjungia palyginimą, kurį manėte turį.
Toliau ateina laikas ir paskirtis. Nešiojamasis, kurio laikrodis kelias valandas skuba, atmeta dar negaliojantį sertifikatą, o pasibaigęs tarpinis sertifikatas sugadina kelią, nors lapas galioja. Paskirties klaidos kyla iš sertifikato be serverAuth išplėstiniame rakto naudojime arba su keyUsage, kuris neleidžia rankos paspaudimo parašo, ką OpenSSL praneša kaip nepalaikomą sertifikato paskirtį. Išduokite iš naujo pagal tinkamą šabloną; niekas tame pranešime nėra priežastis išjungti patikrinimą.
Atšaukimas veikia tik jei kas nors jį sukonfigūravo
CRL ar OCSP atsakymas nėra tikrinami automatiškai. OpenVPN serveryje kliento sertifikatai lyginami su sąrašu tik tada, kai --crl-verify nurodo į jį. Serverio sertifikato patikrinimas kliento pusėje priklauso nuo įgyvendinimo ir dažnai jo nėra. strongSwan reikia jo atšaukimo papildinio ir politikos, prieš žiūrint į CRL partneriui.
Tai paaiškina bilietą, kurį galiausiai gausite: atšauktas kliento sertifikatas vis dar prisijungia, ir visi daro išvadą, kad atšaukimas sugedęs. Niekas netikrino. Paskelbkite ir atnaujinkite CRL arba laikykite kliento sertifikatus pakankamai trumpalaikius, kad pasenęs atšaukimas reikštų nedaug laiko, ir išbandykite atšaukimo kelią su laboratoriniu sertifikatu, prieš prireikus jo incidento metu.
Taisymo tvarka, kuri palieka patikrinimą įjungtą
Rikiuokite pagal simptomą prieš liesdami failus, nes kiekviena lentelės eilutė siunčia jus į skirtingą objektą.
| Client says | Most likely gate | First check |
|---|---|---|
| unable to get local issuer certificate | trust anchor or missing intermediate | your own openssl verify against the files the profile loads |
| expired or not yet valid | validity window | leaf and intermediate dates against the device clock |
| unsupported certificate purpose | extended key usage | serverAuth present, keyUsage allows the handshake |
| name mismatch | peer identity | subjectAltName entries versus the profile name |
Peržiūrėkite sąrašą vienu kartu: patvirtinkite failą, kurį įkelia profilis, patys sudarykite kelią, patikrinkite, ar serveris siunčia tarpinį sertifikatą, palyginkite laikrodį, perskaitykite SAN, perskaitykite EKU, tada prisijunkite iš naujo ir stebėkite, kaip ta pati žurnalo eilutė išnyksta. Jei įrenginiui visai negalima duoti CA, prisegimas yra sąžininga alternatyva, nes OpenVPN 2.6 priima --peer-fingerprint ir susiaurina pasitikėjimą iki vieno rakto, o ne pašalina patikrinimą. RFC 5280 yra nuoroda, ką reiškia kiekvienas iš tų laukų.