En CA kan signera två certifikat som får samma OpenVPN klientspecifika konfiguration, och inget i något av certifikaten varnar någon. Serienummer skiljer sig, nycklar skiljer sig, och de fullständiga subjekten skiljer sig också så snart en organisatorisk enhet ändras. Servern avgör policyn per klient genom ett enda namn, och det namnet är det enda som måste vara unikt.

Servern avgör ett namn, inte ett serienummer

Vid vanlig certifikatsökning tar servern common name från det presenterade certifikatet och letar efter en client-config-dir-post med det namnet. Serienumret ingår aldrig i sökningen. Två certifikat som skiljer sig i alla fält utom common name hamnar i samma fil, så den andra anslutningen ärver den första enhetens fasta adress och pushade rutter.

Så passerar en unikhetskontroll på CA-sidan medan VPN:et fortfarande kolliderar. De två kontrollerna svarar på olika frågor.

Bestäm vad det effektiva namnet ska vara innan du signerar något, och anteckna det bredvid enheten eller kontot som det hör till. Ett register med namn, ägare, syfte och certifikatfingeravtryck täcker de flesta utrullningar. Utan ett sådant är certifikatarkivet den enda dokumentationen av vilket namn som hör till vilken enhet, och det arkivet kan inte skilja ett auktoriserat utbyte från en andra enhet som gör anspråk på ett befintligt namn. Reservera namnet vid registreringen, under ett lås om två operatörer kan utfärda samtidigt.

Vilket namn mappningen faktiskt använder

Vanlig certifikatsökning använder common name. En server inställd för att mappa ett autentiserat användarnamn använder det värdet i stället, vilket gör certifikatets common name irrelevant för policyvalet. Läs den körande konfigurationen för att se vilken mappning som gäller.

Båda mappningarna kan finnas samtidigt, och då beror resultatet på i vilken ordning servern avgör dem. En användarnamnsmappning som faller tillbaka på common name accepterar tyst ett certifikat som registret aldrig godkände. Skriv det effektiva namnet bredvid kommandot som skapade det, så att nästa operatör inte behöver upptäcka ordningen igen. Att testa en anslutning per mappning är billigt och avgör frågan.

Vad mappningen än producerar är det värdet som ska reserveras. Att reservera common names i CA:n medan servern bygger på användarnamn reserverar fel sak.

Två CA:er kan godkänna samma namn

En VPN-tjänst kan lita på mer än en utfärdande myndighet, och varje myndighet har sin egen uppfattning om vilka namn som är tagna. Två oberoende CA:er kan båda godkänna samma common name för olika enheter, och servern accepterar båda certifikaten utan klagomål. Inventera varje myndighet i förtroendepaketet, inte bara den du vanligtvis utfärdar från. Felet visar sig första gången ett certifikat från den andra myndigheten används.

Samma resonemang gäller för en CA som kräver unikhet för hela subjektet i stället för unikhet för common name.

Två certifikat som delar ett common name men skiljer sig i organisatorisk enhet har olika subjekt, så CA:n rapporterar ingen konflikt medan servern ser ett enda namn. Kontrollera den inställning som ditt utfärdandeverktyg faktiskt använder i stället för att anta ett standardvärde. Den hantering av unique_subject i openssl ca-dokumentationen är den relevanta brytaren där, och omslag runt det verktyget exponerar den vanligtvis i stället för att ersätta den.

Förnyelse är en reserverad återanvändning, inte en kollision

En förnyelse som behåller namnet är en avsiktlig återanvändning, och registret bör säga det med klara ord. Anteckna det gamla och det nya fingeravtrycket under ett enda namn så att en granskare kan skilja ett utbyte från ett övertagande. Serverns duplicate-cn-alternativ är orelaterat: det styr samtidiga sessioner, inte registrering eller namnfreservationer. Bestäm hur länge båda uppgifterna får finnas och när den gamla slutar accepteras.

Innan du överlämnar utbytet, läs tillbaka vad certifikatet faktiskt innehåller. Subjektraden är det fält som servern kommer att mappa, vad filnamnet än antyder.

openssl x509 -in device42.crt -noout -subject -serial -issuer

Återkallelse identifierar normalt ett certifikat under dess utfärdare, så att pensionera ett serienummer påverkar inte ett korrekt utfärdat utbyte från samma myndighet. Just detta beteende behöver en ren förnyelse, och det är också därför återkallelse inte kan städa upp ett namn som delas av två enheter. Validera det effektiva policynamnet och den tilldelade adressen på en testanslutning innan användaren ser enheten. Pensionera sedan den gamla uppgiften med avsikt och anteckna att du gjorde det.

Relaterade artiklar