Сиздин 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де келечектеги кийинки жаңыртуу бар, жана чынжырдагы ар бир мөөнөт үчүн бирөөнүн календардык жазуусу бар. Эгер бири жетишпесе, офлайн көрүнгөн конфигурация жөн гана документтелген эмес.

Тектеш макалалар