Два сертификата OpenVPN, едно име за CCD: какво се обърка
Серийният номер е уникален само в рамките на своя издател, докато OpenVPN избира файла CCD по име. Резервирайте това ефективно име при записването и контролирайте подновяването.
Два клиентски сертификата с различни серийни номера, различни ключове и дори различни пълни субекти все още могат да водят до един файл с политика, защото сървърът не гледа нито едно от тези неща. Той прочита име от сертификата и отваря съответния клиентски конфигурационен файл. Ако двата сертификата носят едно и също име, вторият наследява политиката на първия в момента, в който се свърже.
Сблъсъкът се създава при записването и се открива само при свързване, обикновено когато устройство получи адрес или набор от маршрути, които принадлежат на друга машина. Предотвратяването му означава да се договори кое поле съпоставя сървърът и след това да се резервира тази стойност, преди нещо да бъде подписано.
Инструментите ви за сертификати няма да ви предупредят, защото уникалността в X.509 и уникалността на име на политика на OpenVPN са различни изисквания, налагани от различни системи.
Сървърът търси име, а не отпечатък
При обичайното съпоставяне по сертификат сървърът взема общото име от представения сертификат и търси файл с това име в директорията си за клиентски конфигурации. Този файл може да закрепи статичен адрес, да изпрати маршрути или да приложи маркери на защитна стена за всеки клиент. Търсенето е съвпадение на низ с име на файл, така че регистърът, интервалите и пунктуацията имат значение.
Някои внедрявания умишлено разменят съпоставянето, така че удостоверено потребителско име да замести общото име, и тогава именно потребителското име трябва да е уникално. Във всеки случай стойността, която избира политиката, е стойността, която резервирате. Решете коя е тя, преди да издадете каквото и да е; догадка след сблъсък струва повече от въпрос.
Където два органа се събират на едно име
Организация, която приема сертификати от повече от един издаващ орган, поддържа два независими процеса на записване, пишещи в едно именно пространство. Собствените правила за уникалност на всеки орган действат в него самия, така че и двата могат законно да издадат за едно и също общо име, без никой да забележи нещо нередно.
Серийните номера не помагат. X.509 изисква серийният номер да е уникален в обхвата на своя издател, което е свойство на отчетността на този орган, а не глобална идентичност на устройството. Проверката на субект също е различен тест от проверката на общо име: два сертификата могат да споделят CN, но да се различават в организационната единица и следователно да носят различни субекти. Всяко едно от тези свойства може да е налице, докато сървърът все още съпоставя двата сертификата на едно име на файл.
Документацията на OpenSSL CA описва настройката unique_subject, която управлява мнението на собствената ѝ база данни, и честната отправна точка е да прочетете вашата издаваща конфигурация, вместо да предполагате, че се прилага определено подразбиране на EasyRSA или OpenSSL.
Резервирайте ефективното име преди подписване
Поддържайте регистър, който съпоставя устройство с одобрения му запис и оттам с точно име на файл с политика, така че име да се разпределя веднъж и да остава разпределено. Резервацията трябва да е атомарна, което на практика означава ограничение в база данни или заключване около стъпката „разпредели, после подпиши“, а не електронна таблица, редактирана от двама души.
След това направете проверката част от издаването: отказвайте подпис, когато заявеното име вече съществува, и включвайте в тази проверка всеки орган, на който сървърът се доверява, защото име, резервирано от другия орган, е също толкова заето. Отхвърлена заявка с ясна причина е по-евтина от тикет за устройство, което продължава да получава статичния адрес на някой друг.
Подновяването умишлено използва име повторно
Повторното издаване за съществуващо устройство трябва да даде нов сериен номер под същото име на политика и това е законно повторно използване, а не сблъсък. Това, което трябва да се реши предварително, е припокриването: дали старият и новият сертификат могат да бъдат валидни едновременно, и как старите идентификационни данни се извеждат от употреба.
Не прибягвайте до duplicate-cn, за да решите това. Тази сървърна опция управлява едновременни връзки, представящи едно и също име; тя не заключва записването и включването ѝ не прави един споделен статичен адрес безопасен за две машини наведнъж. Отзоваването обикновено идентифицира сертификат по издател и сериен номер, така че извеждането от употреба на старите идентификационни данни не е задължително да обезсили замяната им, стига сървърът да получава и налага правилните данни за отзоваване.
Потвърдете съпоставянето с инструментите на машината
Преди да дадете на устройство новите му идентификационни данни, прочетете името от сертификата така, както сървърът ще го направи, и след това го сравнете с файла с политика, който очаквате да бъде избран.
openssl x509 -in device42.crt -noout -subject -nameopt sep_multiline
ls -l /etc/openvpn/ccd/device42
grep -n "duplicate-cn" /etc/openvpn/server.conf
Първата команда отпечатва полетата на субекта поотделно, което прави отклонена организационна единица или удвоен интервал видими веднага. Втората потвърждава, че файл с политика съществува точно под това име, а третата показва дали сървърът е конфигуриран да разрешава няколко сесии на едно име. Изпълнете и трите върху нов сертификат, преди да напусне стъпката на записване, докато грешката все още струва подпис, а не инцидент. Запазете изхода с тикета, за да може следващият човек да види какво име всъщност е получил сървърът.
Завършете с реална връзка и сравнете зададения адрес и изпратените маршрути с файла с политика, а не с това, което сте възнамерявали да напишете. Ако две устройства съобщават един и същ статичен адрес, регистърът има сблъсък, който никаква проверка на сертификати няма да разкрие.