Сіздің VPN түнгі сағат 3-те қосылымдарға жауап береді, ал оның сертификаттарына қол қоятын машина жәшікте өшірулі жатыр. Сервер сертификатын тексеретін клиент сіздің CA-мен ешқашан байланыспайды, сондықтан CA ешбір қосылым үшін қолжетімді болуы міндетті емес. Жоспарлауды қажет ететін нәрсе — сертификатты беру, жаңарту немесе кері қайтару қажет болатын күн — түбірлік кілт құлыпта қалған кезде.

Қосылым шын мәнінде нені тексереді

OpenVPN клиенті қосылғанда, ол сервердің жапырақ сертификатынан бастап өзі әлдеқашан сенетін CA сертификатына дейінгі қолтаңба тізбегімен жүреді, жарамдылық терезесін тексереді және профиль солай десе, кері қайтару тізіміне жүгінеді. Ол сіздің түбірлік CA-ды ешқашан іздемейді. Сервер клиент сертификаттары үшін айна кескінін жасайды. Қосылу сәтінде тек жапырақ, аралық және бұрын таратқан сенім бумасы болады.

Шын мәнінде үш нәрсенің біреуі сәтсіздікке ұшырайды: қол қою кілті беру кезінде қолжетімсіз, кері қайтару тізімі ескірген, немесе клиенттің сенім бумасы сервер ұсынған тізбектен ескірек. Біріншісі — процесс мәселесі; қалған екеуі тарату мәселелері. Олардың ешқайсысы түбірлік кілттің онлайн болуын талап етпейді, ал туннель аутентификациясы үшін жеке сертификат талап ететін басқарылатын VPN қызметі қол қою өкілеттігін провайдерге ғана ауыстырады. Azure нүкте-сайтқа керісінше жұмыс істейді: сіз түбірлік сертификатты жүктейсіз және оның астында қол қойылған сертификаттар сенімді деп саналады, сондықтан кім қол қояды, кім тексереді және сертификат мерзімінен бұрын қалай кері қайтарылады деп сұраңыз.

Түбірді ешқашан мекенжай алмайтын хостта құрыңыз

Офлайн түбір сирек қолданылады: аралық CA сертификатына қол қою үшін, кейінірек оны жаңарту немесе кері қайтару үшін. Қалғанның бәрі бір деңгей төменде болады. Түбір жұмысын желіден тыс ұсталатын машинада, мүмкін болса тірі жүйеден орындаңыз және бөлмеде кім болғанын жазыңыз. Командалар OpenSSL 1.1.1 немесе одан жаңасын болжайды, өйткені -addext ескі құрылымдарда жоқ.

openssl genpkey -algorithm EC -pkeyopt ec_paramgen_curve:P-256 -out root.key
openssl req -x509 -new -key root.key -sha256 -days 7300 \
  -subj "/CN=Example VPN Root CA" -out root.crt \
  -addext "basicConstraints=critical,CA:TRUE" \
  -addext "keyUsage=critical,keyCertSign,cRLSign"

Аралықты қол қою хостінде жасаңыз және оның сұранысын ғана офлайн машинаға апарыңыз. Түбір бұл сұранысқа нөлдік жол ұзындығымен қол қояды, сондықтан аралық CA соңғы нүкте сертификаттарына қол қоя алады, бірақ өз астында тағы бір CA жасай алмайды. Сол бір кеңейту бұзылған қол қою хостінің түбірге тең өкілеттік жасауына жол бермейді. ECDSA-ны әр клиент OpenVPN 2.4 немесе одан жаңасын іске қосқанда ғана пайдаланыңыз; әйтпесе RSA кілттерін жасап, ағынды сол күйінде ұстаңыз.

openssl genpkey -algorithm EC -pkeyopt ec_paramgen_curve:P-256 -out intermediate.key
openssl req -new -key intermediate.key -subj "/CN=Example VPN Intermediate CA" -out intermediate.csr
openssl x509 -req -in intermediate.csr -CA root.crt -CAkey root.key \
  -CAcreateserial -days 3650 -sha256 -extfile intermediate.ext -out intermediate.crt

intermediate.ext ішінде basicConstraints=critical,CA:TRUE,pathlen:0, keyUsage=critical,keyCertSign,cRLSign және authorityKeyIdentifier=keyid:always бар. Қол қою хостін қайта қоспас бұрын түбірлік кілтті сейфіне қайтарыңыз. Егер түбір аралықты кері қайтара алуы керек болса, оған openssl x509 -req орнына түбірлік деңгейдегі index.txt-ге қарсы openssl ca -config root.cnf -extensions intermediate_ca арқылы қол қойыңыз, сериялық нөмір жазылуы үшін; содан кейін алынған түбірлік тізімді клиент профилінің ішінде жіберіңіз, онда файлға негізделген crl-verify оны іске қосылу кезінде оқиды. Клиенттерге екі CA сертификаты бар буманы жіберіңіз; жалғыз жапырақ түбірге қарсы тексерілмейді.

Жапырақтарды аралықтан шығарыңыз, дерекқормен

openssl x509 -req-мен қол қою кері қайтару қажет болғанша жұмыс істейді, өйткені ештеңе сериялық нөмірді жазбайды. Бірінші сертификаттан бастап openssl ca пайдаланыңыз, сериялық нөмір, мерзім және кері қайтару күйі бір дерекқорда тұруы үшін. Дерекқор файлдарын бір рет жасап, содан кейін конфигурацияны соларға бағыттаңыз:

mkdir -p /etc/vpn-ca/intermediate/newcerts
touch /etc/vpn-ca/intermediate/index.txt
echo 1000 > /etc/vpn-ca/intermediate/serial
echo 1000 > /etc/vpn-ca/intermediate/crlnumber
[ ca ]
default_ca = CA_default
[ CA_default ]
dir = /etc/vpn-ca/intermediate
database = $dir/index.txt
new_certs_dir = $dir/newcerts
serial = $dir/serial
crlnumber = $dir/crlnumber
certificate = $dir/intermediate.crt
private_key = $dir/intermediate.key
default_md = sha256
default_days = 365
default_crl_days = 30
unique_subject = no
policy = policy_any
[ policy_any ]
commonName = supplied
[ server_cert ]
basicConstraints = CA:FALSE
keyUsage = critical, digitalSignature
extendedKeyUsage = serverAuth
subjectAltName = @server_names
[ client_cert ]
basicConstraints = CA:FALSE
keyUsage = critical, digitalSignature
extendedKeyUsage = clientAuth
[ server_names ]
DNS.1 = vpn.example.com

Кілтті пайдалану жолы ECDSA кілтін болжайды; RSA үшін keyEncipherment қосыңыз. Әр клиентке өзінің жалпы атын беріңіз, өйткені OpenVPN қосылымды сол өріспен таниды, ал CN=vpn-client бөлісетін екі ноутбук журналдарда, client-config-dir ережелерінде немесе пайдаланушыға арналған кез келген push-та ажыратылмайды, және сіз кері қайтару шешімін қорғауға болатын ететін тиесілілікті жоғалтасыз. Жапырақты осылай беріңіз және тексеріңіз:

openssl req -new -key alice.key -subj "/CN=alice-laptop" -out alice.csr
openssl ca -config intermediate.cnf -extensions client_cert -in alice.csr -out alice.crt -batch
openssl verify -CAfile ca-bundle.crt -untrusted intermediate.crt alice.crt

Қол қою кілтін VPN хостіне көшірудің орнына саясат шекарасының артында ұстаңыз: сұранысты аутентификациялайтын, жалпы атауды рұқсат етілгендер тізіміне қарсы тексеретін және тек сертификатты қайтаратын шағын қызмет. Әр сериялық нөмірді жазыңыз; журнал — сертификат пен оны сұраған адам арасындағы жалғыз байланыс.

Түбірді оятпай кері қайтаруды жариялаңыз

Клиент сертификаттарын аралық кері қайтарады, ешқашан түбір емес. Түбірлік тізім аралық өртенгенде ғана маңызды. Серверді crl-verify арқылы аралық тізімге бағыттаңыз. Файлға негізделген CRL қызмет басталғанда жүктеледі, сондықтан әр регенерациядан кейін қайта жүктеңіз; каталог пішімі қосылу кезінде күйді оқиды және әр сериялық нөмірге бір файл жұмсайды.

Сол дерекқордан екі командамен кері қайтарыңыз және қайта жасаңыз:

openssl ca -config intermediate.cnf -revoke /etc/vpn-ca/intermediate/newcerts/1001.pem
openssl ca -config intermediate.cnf -gencrl -out /etc/openvpn/crl.pem

Содан кейін сағатты бақылаңыз. CRL келесі жаңарту өрісін алып жүреді, және сол күн өткенде тексеретін тарап тізімді елемеудің орнына қабылдамайды. default_crl_days = 30-мен ай сайын қайта жасау қор қалдырады; жыл сайынғы қалдырмайды. Жапырақтардың қысқарақ ғұмыры сенімдірек бақылау, өйткені кері қайтару тек тізім қаралатын жерде ғана қолданылады.

Тізбекті тексеріңіз, содан кейін рәсімді жазып қойыңыз

Дизайнға сенбес бұрын төрт сәтсіздікті қайталаңыз. Тізбекті openssl verify -CAfile ca-bundle.crt -untrusted intermediate.crt server.crt арқылы тексеріңіз. Мерзімі өткен клиент сертификатымен қосылып, сервер оны қабылдамайтынын растаңыз. Сынақ клиентін кері қайтарыңыз, қайта жүктеңіз және тізім күшіне енетінін растаңыз. Хост сағатын бір күн алға жылжытыңыз, өйткені қате сағат басқа жерде жарамды көрінетін сертификаттарды беріп, қабылдамауы мүмкін.

Офлайн түбір қағаздар болған жағдайда ғана бақылау болып табылады: рәсім үшін екі аталған адам, әр қол қойылған сериялық нөмірдің жазбасы, машинадан бөлек сақталатын шифрланған сақтық көшірме және оқшауланған хостта қалпына келтіру сынағы. Сол рәсім кезінде қосалқы аралыққа қол қойыңыз, өлі қол қою хості сізді түн ортасында түбірді ашуға мәжбүрлемесі үшін.

Оны аяқталды деп атамас бұрын бес нәрсені растаңыз: түбірлік кілт желіге қосылған хостта емес, аралық кілт тек қол қою хостінде тұрады, клиент бумасы екі CA сертификатын алып жүреді, CRL-де болашақтағы келесі жаңарту бар, және тізбектегі әр мерзім үшін біреудің күнтізбе жазбасы бар. Егер біреуі жетіспесе, офлайн көрінетін конфигурация жай ғана құжатталмаған.

Қатысты мақалалар