To OpenVPN-sertifikater, ett CCD-navn: hva som gikk galt
Et serienummer er unikt bare hos sin egen utsteder, mens OpenVPN velger CCD-filen ut fra navn. Reserver det effektive navnet allerede ved påmelding, og styr fornyelsen.
Selv om to klientsertifikater har forskjellige serienumre, forskjellige nøkler og endog forskjellige fulle subjekter, kan de likevel ende opp i samme policyfil, fordi serveren ikke ser på noe av dette. Serveren leser et navn fra sertifikatet og åpner den tilhørende klientkonfigurasjonsfilen. Dersom begge sertifikatene har samme navn, overtar det andre det førstes policy idet det kobler til.
Kollisjonen oppstår under påmeldingen og oppdages først når enheten kobler til, oftest ved at en enhet mottar en adresse eller et sett med ruter som tilhører en annen maskin. For å unngå dette må man bli enige om hvilket felt serveren mapper, og deretter reservere denne verdien før noe signeres.
Verktøyene for sertifikater vil ikke varsle deg, siden unikhet innenfor X.509 og unikhet for et OpenVPN-policynavn er to forskjellige krav som håndheves av forskjellige systemer.
Serveren slår opp et navn, ikke et fingeravtrykk
Ved den vanlige sertifikatbaserte mappingen henter serveren common name fra sertifikatet som presenteres, og leter etter en fil med dette navnet i klientkonfigurasjonskatalogen. Filen kan feste en statisk adresse, pushe ruter eller bruke brannmurmerker per klient. Oppslaget er en ren strengsammenligning mot et filnavn, slik at både store og små bokstaver, mellomrom og tegnsetting teller.
Enkelte utrullinger bytter bevisst om mappingen, slik at et autentisert brukernavn tar over for common name, og da er det brukernavnet som må være unikt. Uansett er den verdien som velger policy, den samme verdien som du reserverer. Fastslå hvilken det er før du utsteder noe; å gjette etter en kollisjon er dyrere enn å spørre.
Der to myndigheter møtes på samme navn
En organisasjon som godtar sertifikater fra flere enn én utstedende myndighet, kjører to uavhengige påmeldingsprosesser som skriver til ett navnerom. Hver myndighets egne unikhetsregler gjelder innenfor myndigheten, så begge kan utstede lovlig for samme common name uten at noen av dem oppdager noe galt.
Serienumre er ikke til hjelp. X.509 krever at et serienummer er unikt innenfor utstederens område, og dette er en egenskap ved den myndighetens regnskap, ikke en global identitet for enheten. En subjektkontroll er dessuten en annen test enn en common name-kontroll: to sertifikater kan dele en CN og likevel avvike i organisasjonsenhet, og dermed bære forskjellige subjekter. Alle disse egenskapene kan holde samtidig som serveren fortsatt mapper begge sertifikatene til ett filnavn.
Dokumentasjonen for OpenSSL CA omhandler innstillingen unique_subject som styrer dens egen databases oppfatning, og det ærlige utgangspunktet er å lese utstedelseskonfigurasjonen din framfor å anta at en bestemt EasyRSA- eller OpenSSL-standard gjelder.
Reserver det effektive navnet før signering
Før et register som mapper en enhet til dens godkjente post, og derfra til et eksakt policyfilnavn, slik at et navn tildeles én gang og blir værende tildelt. Reservasjonen må være atomisk, og i praksis betyr det en databaserestriksjon eller en lås rundt trinnet tildel-og-deretter-signer, ikke et regneark som to personer redigerer.
Deretter gjør du kontrollen til en del av utstedelsen: nekt å signere når det etterspurte navnet allerede finnes, og ta med alle myndigheter serveren har tillit til i denne kontrollen, fordi et navn som er reservert av den andre myndigheten, er like opptatt. En avvist forespørsel med tydelig begrunnelse er billigere enn en sak om en enhet som stadig mottar en annens statiske adresse.
Fornyelsen gjenbruker et navn med vilje
Ny utstedelse for en eksisterende enhet bør gi et nytt serienummer under samme policynavn, og dette er lovlig gjenbruk, ikke en kollisjon. Det som må avgjøres på forhånd, er overlappingen: hvorvidt gammelt og nytt sertifikat kan være gyldige samtidig, og hvordan den gamle påloggingsinformasjonen avvikles.
Ikke ty til duplicate-cn for å løse dette. Det serveralternativet styrer samtidige tilkoblinger som presenterer samme navn; det låser ikke påmeldingen, og aktivering gjør ikke én delt statisk adresse trygg for to maskiner samtidig. Tilbakekalling identifiserer normalt et sertifikat ved utsteder og serienummer, så avviklingen av den gamle påloggingsinformasjonen trenger ikke ugyldiggjøre erstatningen, så lenge serveren mottar og håndhever korrekte tilbakekallingsdata.
Bekreft mappingen med verktøyene på maskinen
Før du overleverer en enhet dens nye påloggingsinformasjon, leser du navnet ut av sertifikatet på samme måte som serveren vil gjøre, og sammenligner det deretter med policyfilen du forventer skal bli valgt.
openssl x509 -in device42.crt -noout -subject -nameopt sep_multiline
ls -l /etc/openvpn/ccd/device42
grep -n "duplicate-cn" /etc/openvpn/server.conf
Den første kommandoen skriver ut subjektfeltene hver for seg, noe som gjør en bortkommen organisasjonsenhet eller et dobbelt mellomrom umiddelbart synlig. Den andre bekrefter at det finnes en policyfil under nøyaktig dette navnet, og den tredje viser om serveren er konfigurert til å tillate flere sesjoner på ett navn. Kjør alle tre på et ferskt sertifikat før det forlater påmeldingstrinnet, mens en feil fortsatt koster en signatur og ikke en hendelse. Ta vare på utdataene sammen med saken, slik at neste person kan se hvilket navn serveren faktisk fikk.
Avslutt med en virkelig tilkobling og sammenlign den tildelte adressen og de pushede rutene med policyfilen, ikke med det du hadde tenkt å skrive. Dersom to enheter rapporterer samme statiske adresse, har registeret en kollisjon som ingen sertifikatinspeksjon noen gang vil avsløre.