VPN-ja juaj u përgjigjet lidhjeve në orën 3 të mëngjesit ndërsa makina që nënshkruan certifikatat e saj rri e fikur në një sirtar. Një klient që vërteton certifikatën e serverit nuk kontakton kurrë CA-në tuaj, prandaj CA nuk ka nevojë të jetë e arritshme për asnjë lidhje. Pjesa që kërkon planifikim është dita kur një certifikatë duhet lëshuar, rinovuar ose revokuar ndërsa çelësi rrënjor mbetet i mbyllur.

Çfarë vërteton vërtet një lidhje

Kur klienti OpenVPN lidhet, ai përshkon zinxhirin e nënshkrimeve nga certifikata gjethe e serverit lart deri në një certifikatë CA të cilës i beson tashmë, kontrollon dritaren e vlefshmërisë dhe, nëse profili e thotë, konsulton një listë revokimi. Nuk e kërkon kurrë CA-në tuaj rrënjësore. Serveri bën pasqyrën për certifikatat e klientëve. Në momentin e lidhjes janë të pranishme vetëm gjetja, e ndërmjetmja dhe paketa e besimit që shpërndatë më parë.

Ajo që dështon vërtet është një nga tri gjëra: çelësi i nënshkrimit nuk është i disponueshëm në lëshim, një listë revokimi është vjetruar, ose paketa e besimit e klientit është më e vjetër se zinxhiri që paraqet serveri. E para është problem procesi; dy të tjerat janë probleme shpërndarjeje. Asnjëra nuk kërkon që çelësi rrënjor të jetë në linjë, dhe një shërbim VPN i menaxhuar që kërkon një certifikatë private për vërtetimin e tunelit thjesht zhvendos autoritetin e nënshkrimit te ofruesi. Azure pikë-në-sajt funksionon në të kundërt: ngarkoni një certifikatë rrënjësore dhe certifikatat e nënshkruara nën të konsiderohen të besueshme, prandaj pyesni kush nënshkruan, kush vërteton dhe si tërhiqet një certifikatë më herët.

Ndërtoni rrënjën në një host që nuk merr kurrë adresë

Një rrënjë jashtë linje përdoret rrallë: për të nënshkruar certifikatën e CA-së së ndërmjetme dhe më vonë për ta rinovuar ose revokuar. Gjithçka tjetër ndodh një nivel më poshtë. Bëni punën e rrënjës në një makinë që mbahet jashtë rrjetit, nëse është e mundur nga një sistem live, dhe shënoni kush ishte në dhomë. Komandat supozojnë OpenSSL 1.1.1 ose më të ri, sepse -addext nuk është në ndërtimet e vjetra.

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"

Krijoni të ndërmjetmen në hostin e nënshkrimit dhe çoni vetëm kërkesën e saj në makinën jashtë linje. Rrënja e nënshkruan atë kërkesë me gjatësi shtegu zero, kështu që CA e ndërmjetme mund të nënshkruajë certifikata pikëpërfundimi por nuk mund të krijojë një CA tjetër nën vete. Ai një zgjerim i vetëm pengon një host nënshkrimi të komprometuar të krijojë një autoritet të barabartë me rrënjën. Përdorni ECDSA vetëm nëse çdo klient ekzekuton OpenVPN 2.4 ose më të ri; përndryshe krijoni çelësa RSA dhe mbajeni rrjedhën të njëjtë.

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 përmban basicConstraints=critical,CA:TRUE,pathlen:0, keyUsage=critical,keyCertSign,cRLSign dhe authorityKeyIdentifier=keyid:always. Kthejeni çelësin rrënjor në kasafortën e tij përpara se hosti i nënshkrimit të lidhet përsëri. Nëse rrënja duhet të mund të revokojë të ndërmjetmen, nënshkruajeni me openssl ca -config root.cnf -extensions intermediate_ca kundrejt një index.txt të nivelit rrënjor në vend të openssl x509 -req, që numri serial të regjistrohet; pastaj dërgoni listën rrënjore që rezulton brenda profilit të klientit, ku një crl-verify i bazuar në skedar e lexon në nisje. Dërgoni klientëve një paketë me të dy certifikatat CA; një gjethe e vetme nuk do të vërtetohet kundrejt rrënjës.

Lëshoni gjethe nga e ndërmjetmja, me një bazë të dhënash

Nënshkrimi me openssl x509 -req funksionon derisa t'ju duhet revokim, sepse asgjë nuk regjistron numrin serial. Përdorni openssl ca që nga certifikata e parë, që numri serial, skadimi dhe gjendja e revokimit të jetojnë në një bazë të dhënash. Krijoni skedarët e bazës së të dhënave një herë dhe më pas drejtojeni konfigurimin drejt tyre:

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

Rreshti i përdorimit të çelësit supozon një çelës ECDSA; shtoni keyEncipherment për RSA. Jepini çdo klienti emrin e vet të përbashkët, sepse OpenVPN e identifikon lidhjen nga ai fushë, dhe dy laptopë që ndajnë CN=vpn-client nuk mund të dallohen në regjistra, në rregullat e client-config-dir ose në asnjë shtytje për përdorues, dhe humbni atribuimin që e bën një vendim revokimi të mbrojtshëm. Lëshoni dhe vërtetoni një gjethe kështu:

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

Mbajeni çelësin e nënshkrimit pas një kufiri politike në vend që ta kopjoni në hostin VPN: një shërbim i vogël që vërteton kërkesën, kontrollon emrin e përbashkët kundrejt një liste të lejuar dhe kthen vetëm certifikatën. Regjistroni çdo numër serial; regjistri është lidhja e vetme midis një certifikate dhe personit që e kërkoi.

Publikoni revokimin pa zgjuar rrënjën

Certifikatat e klientëve revokohen nga e ndërmjetmja, kurrë nga rrënja. Lista rrënjore ka rëndësi vetëm kur një e ndërmjetme digjet. Drejtojeni serverin te lista e ndërmjetme me crl-verify. Një CRL i bazuar në skedar ngarkohet në nisjen e shërbimit, prandaj ringarkojeni pas çdo rigjenerimi; forma e drejtorisë lexon gjendjen në momentin e lidhjes dhe kushton një skedar për numër serial.

Revokoni dhe rigjeneroni me dy komanda nga e njëjta bazë të dhënash:

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

Më pas vëzhgoni orën. Një CRL mban një fushë të përditësimit të ardhshëm, dhe kur ajo datë kalon, pala që vërteton e refuzon listën në vend që ta injorojë. Rigjenerimi mujor me default_crl_days = 30 lë hapësirë; ai vjetor jo. Jetëgjatësi më të shkurtra të gjetheve janë kontrolli më i besueshëm, sepse revokimi vlen vetëm aty ku konsultohet lista.

Testoni zinxhirin, pastaj shkruani ceremoninë

Riprodhoni katër dështime përpara se t'i besoni dizajnit. Vërtetoni zinxhirin me openssl verify -CAfile ca-bundle.crt -untrusted intermediate.crt server.crt. Lidhuni me një certifikatë klienti të skaduar dhe konfirmoni që serveri e refuzon. Revokoni një klient testi, ringarkoni dhe konfirmoni që lista hyn në fuqi. Avancioni orën e një hosti një ditë, sepse një orë e gabuar mund të lëshojë dhe të refuzojë certifikata që duken të vlefshme diku tjetër.

Një rrënjë jashtë linje është kontroll vetëm nëse ekziston dokumentacioni: dy persona të emëruar për ceremoninë, një regjistër i çdo numri serial të nënshkruar, një kopje rezervë e kriptuar e ruajtur veçmas nga makina dhe një test restaurimi në një host të izoluar. Nënshkruani një të ndërmjetme rezervë gjatë të njëjtës ceremoni, që një host nënshkrimi i vdekur të mos ju detyrojë ta hapni rrënjën në mesnatë.

Përpara se ta quani të përfunduar, konfirmoni pesë gjëra: çelësi rrënjor nuk është në një host të rrjetëzuar, çelësi i ndërmjetëm jeton vetëm në hostin e nënshkrimit, paketa e klientit mbart të dy certifikatat CA, CRL ka një përditësim të ardhshëm dhe dikush zotëron një hyrje kalendari për çdo skadim në zinxhir. Nëse mungon njëra, konfigurimi që duket jashtë linje është thjesht i padokumentuar.

Artikuj të ngjashëm