Држите кључ за потписивање CA OpenVPN ван /etc/openvpn
Радни простор CA издаје идентитете; сервис само троши распоређени материјал. Дајте свакој улози сопствени налог, директоријум и резервну копију и проверите обе.
Два директоријума која у упутству изгледају слично обављају сасвим различите послове. Један чува сертификационо тело: његов приватни кључ, бројач серијских бројева и запис свега што је потписало. Други чува оно што је демону потребно да се покрене и опслужи клијенте. Држати оба на истом хосту под истим налогом згодно је за једно поподне и скупо за остатак живота распоређивања, јер демон тада ради поред јединог кључа који може да створи било који идентитет.
Шта садржи радни простор CA
Директоријум PKI је стање издаваоца, а не конфигурација. Садржи приватни кључ и сертификат CA, датотеку серијских бројева, индекс издатих сертификата и материјал сваког идентитета насталог из њих.
Потписивање захтева мења то стање, зато радни простор припада налогу под административном контролом на хосту где VPN сервис не ради. Свако ко може да прочита приватни кључ CA може да изда сертификат коме ће сервер веровати, па је заштита кључа цео модел поверења у једној датотеци. Његово копирање на друго место ради уштеде корака ствара другу ствар за заштиту и другу ствар за заборав. Сваки потпис такође увећава серијски број и додаје запис у индекс, зато је радни простор једна копија стања, а не фасцикла са датотекама.
Јавни сертификат CA је другачији. Намењен је расподели и управо њиме клијенти и сервери проверавају једни друге.
Шта демон чита при покретању
Сервер који ради троши мали скуп: сопствени сертификат, сопствени приватни кључ, сертификат CA за проверу партнера и материјал кључева који захтева изабрани режим. Чита те путање при покретању и поново при поновном учитавању.
Власништво треба оцењивати према јединици која се стварно покреће, а не према интерактивној root љусци. Објављено изоловање може да учини део датотечког система само за читање или невидљивим, чак и када ручни тест као root успе.
systemctl show -p User -p Group -p ReadOnlyPaths [email protected]
stat -c '%a %U:%G' /etc/openvpn/server/server.key
runuser -u openvpn -- test -r /etc/openvpn/server/server.key; echo $?Трећа линија је она коју људи прескачу. Она пита сопствени налог демона да ли може да прочита кључ, а то је једина верзија питања која је важна након спуштања привилегије. Излаз са нулом као root не говори вам ништа о томе шта се дешава после спуштања.
Две путање отказа вреди раздвојити пре измене било које дозволе. Неуспех потписа указује на директоријум PKI, дозволу претраге у његовим родитељским директоријумима и налог који извршава издаваоца. Неуспех покретања указује на јединицу, њен радни директоријум и путање наведене у конфигурацији сервера. Ако цело стабло учините читљивим за све, не исправља се ни једно ни друго, а граница од које оба зависе нестаје.
Зашто копирање кључа CA на сервер касније пропада
Копија обично почиње као корак за отклањање грешака: неко жели да обнови клијента на хосту VPN, па кључ CA заврши у /etc/openvpn и обнова успе. Тренутни посао успева, а граница нестаје.
Затим се сервер резервише и тело за потписивање улази у резервне копије. Снимак, пакет подршке или копија конфигурационог директоријума сада носе способност издавања поверљивих идентитета док је CA важећи. Ко држи ту копију може да створи сертификат за било које име које сервер прихвата, укључујући имена која никада нису издата. Једини запис о том издавању је онај који они одлуче да сачувају.
Опоравак из таквог стања није питање брисања датотеке. Морате да одлучите да ли је кључ био изложен, да заротирате CA ако јесте, и да поново расподелите поверење свим партнерима. Одвојен радни простор избегава цео тај разговор.
Налози, директоријуми, резервне копије
Дајте издаваоцу сопствени налог и кућни директоријум, држане изван хоста VPN где је то практично. Дајте демону други налог, са приступом за читање распоређеног материјала и без приступа за писање било чему што издаје сертификате. Распоређујте копирањем јавних сертификата напоље и никада не увлачите приватно стање издаваоца унутра. Правите резервне копије две улоге одвојено, јер се њихова осетљивост и приче о враћању разликују.
После опозива, ажурирајте датотеку CRL коју наводи конфигурација сервера, затим поново учитајте сервис да би нове везе је прочитале. Документација Easy-RSA покрива распоред радног простора и ток потписивања; правила власништва око њега остају одлука о вашем хосту. Потврдите шта је сервис учитао помоћу openssl crl -in /etc/openvpn/crl.pem -noout -lastupdate -nextupdate уместо да претпоставите да је поновно учитавање то ухватило.
Тест који доказује поделу
Проверите негативан случај, не само радни. Потпишите сертификат са налога издаваоца како је предвиђено, затим потврдите да исти налог не може да покрене сервис или прочита приватни кључ сервера. Затим потврдите да налог демона не може да прочита приватни кључ CA.
Те три провере трају неколико минута и преживљавају промене особља, јер су изјаве о дозволама, а не о навици. Запишите резултат са путањама и налозима које је обухватио, плус датум када сте их извршили. Иначе ће следећа особа која наследи ово распоређивање поново извести границу из упутства које је никада није имало. Датирани запис је и оно што следећи преглед чини стварима од неколико минута, а не од поподнева.