Hoidke VPN-i juur-CA võrguühenduseta ja väljastage ikkagi sertifikaate
Hoidke juurvõti võrgust eemal, allkirjastage lehtsertifikaadid vahe-CA-ga, avaldage CRL õigel ajal ja testige ahelat enne esimese kliendi ühendumist.
Teie VPN vastab ühendustele kell 3 öösel, samal ajal kui selle sertifikaate allkirjastav masin seisab sahtlis välja lülitatud. Serveri sertifikaati valideeriv klient ei võta kunagi teie CA-ga ühendust, seega ei pea CA olema ühegi ühenduse jaoks kättesaadav. Osa, mis vajab planeerimist, on päev, mil sertifikaat tuleb väljastada, uuendada või tühistada samal ajal kui juurvõti jääb luku taha.
Mida ühendus tegelikult valideerib
Kui OpenVPN-i klient ühendub, läbib see allkirjade ahela serveri lehtsertifikaadist ülespoole CA sertifikaadini, mida ta juba usaldab, kontrollib kehtivusakent ja konsulteerib profiili järgi tühistusnimekirjaga. Ta ei otsi kunagi teie juur-CA-d. Server teeb kliendisertifikaatide puhul peegelpildi. Ühenduse hetkel on olemas ainult lehtsertifikaat, vahesertifikaat ja varem levitatud usalduspakett.
Tegelikult ebaõnnestub üks kolmest: allkirjastamisvõti pole väljastamise hetkel saadaval, tühistusnimekiri on vananenud või on kliendi usalduspakett vanem kui serveri esitatav ahel. Esimene on protsessi probleem; ülejäänud kaks on levitamise probleemid. Ükski neist ei nõua juurvõtme võrgus olemist ning hallatud VPN-teenus, mis nõuab tunneli autentimiseks privaatsertifikaati, viib allkirjastamisvolituse lihtsalt teenusepakkujale. Azure punkt-koht ühendus töötab vastupidi: laadite üles juursertifikaadi ja selle all allkirjastatud sertifikaate usaldatakse, seega küsige, kes allkirjastab, kes valideerib ja kuidas sertifikaat ennetähtaegselt tagasi võetakse.
Ehitage juur hostile, mis ei saa kunagi aadressi
Võrguühenduseta juurt kasutatakse harva: vahe-CA sertifikaadi allkirjastamiseks ja hiljem selle uuendamiseks või tühistamiseks. Kõik muu toimub ühe taseme võrra allpool. Tehke juuretööd masinas, mida hoitakse võrgust eemal, võimaluse korral elavast süsteemist, ja kirjutage üles, kes ruumis oli. Käsud eeldavad OpenSSL 1.1.1 või uhemat, sest -addext pole vanemates build'ides saadaval.
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"
Looge vahesertifikaat allkirjastamishostil ja viige ainult selle taotlus võrguühenduseta masinasse. Juur allkirjastab selle taotluse tee pikkusega null, nii et vahe-CA võib allkirjastada lõppsõlme sertifikaate, kuid ei tohi selle all luua teist CA-d. See üks laiendus takistab kompromiteeritud allkirjastamishosti loomas juurega võrdväärset volitust. Kasutage ECDSA-d ainult siis, kui iga klient töötab OpenVPN 2.4 või uuemaga; vastasel juhul genereerige RSA võtmed ja hoidke voog samana.
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 sisaldab basicConstraints=critical,CA:TRUE,pathlen:0, keyUsage=critical,keyCertSign,cRLSign ja authorityKeyIdentifier=keyid:always. Pange juurvõti enne allkirjastamishosti uuesti ühendamist oma seifi tagasi. Kui juur peab saama vahesertifikaati tühistada, allkirjastage see juurtasandi index.txt vastu käsuga openssl ca -config root.cnf -extensions intermediate_ca, mitte käsuga openssl x509 -req, et seerianumber salvestuks; seejärel saatke saadud juurnimekiri kliendiprofiili sisse, kus failipõhine crl-verify loeb seda käivitamisel. Saatke klientidele pakett mõlema CA sertifikaadiga; üksi lehtsertifikaat ei valideeru juure vastu.
Väljastage lehti vahe-CA-st, andmebaasiga
Käsuga openssl x509 -req allkirjastamine töötab seni, kuni vajate tühistamist, sest miski ei salvesta seerianumbrit. Kasutage openssl ca alates esimesest sertifikaadist, et seerianumber, aegumine ja tühistusolek elaksid ühes andmebaasis. Looge andmebaasifailid üks kord ja suunake seejärel konfiguratsioon nende poole:
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
Võtmekasutuse rida eeldab ECDSA võtit; RSA jaoks lisage keyEncipherment. Andke igale kliendile oma üldnimi, sest OpenVPN tuvastab ühenduse selle välja järgi ning kahte sülearvutit, mis jagavad CN=vpn-client, ei saa logides, client-config-dir reeglites ega üheski kasutajapõhises push'is eristada, ja te kaotate omistuse, mis teeb tühistusotsuse kaitstavaks. Väljastage ja valideerige leht nii:
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
Hoidke allkirjastamisvõti poliitikapiiri taga, selle asemel et see VPN-hosti kopeerida: väike teenus, mis autendib taotluse, kontrollib üldnime lubatud loendi vastu ja tagastab ainult sertifikaadi. Logige iga seerianumber; logi on ainus side sertifikaadi ja selle küsinud isiku vahel.
Avaldage tühistamine juurt äratamata
Kliendisertifikaate tühistab vahe-CA, mitte kunagi juur. Juurnimekiri on oluline ainult siis, kui mõni vahe-CA on põletatud. Suunake server crl-verify abil vahenimekirja peale. Failipõhine CRL laaditakse teenuse käivitamisel, seega laadige see pärast igat uuestiloomist uuesti; kataloogivorm loeb olekut ühenduse hetkel ja maksab ühe faili seerianumbri kohta.
Tühistage ja looge uuesti kahe käsuga samast andmebaasist:
openssl ca -config intermediate.cnf -revoke /etc/vpn-ca/intermediate/newcerts/1001.pem
openssl ca -config intermediate.cnf -gencrl -out /etc/openvpn/crl.pem
Jälgige seejärel kella. CRL kannab järgmise uuendamise välja ja kui see kuupäev on möödunud, lükkab valideeriv osapool nimekirja tagasi, selle asemel et seda eirata. Igakuine uuestiloomine default_crl_days = 30-ga jätab varu; aastane mitte. Lühemad lehtede eluead on usaldusväärsem kontroll, sest tühistamine kehtib ainult seal, kus nimekirja vaadatakse.
Testige ahelat ja kirjutage siis tseremoonia üles
Taaslooge neli riket, enne kui disaini usaldate. Valideerige ahel openssl verify -CAfile ca-bundle.crt -untrusted intermediate.crt server.crt abil. Ühenduge aegunud kliendisertifikaadiga ja kinnitage, et server keeldub sellest. Tühistage testklient, laadige uuesti ja kinnitage, et nimekiri jõustub. Liigutage hosti kella ühe päeva võrra edasi, sest vale kell võib väljastada ja tagasi lükata sertifikaate, mis mujal kehtivana näivad.
Võrguühenduseta juur on kontroll ainult siis, kui paberimajandus on olemas: kaks nimetatud inimest tseremooniaks, iga allkirjastatud seerianumbri kirje, masinast eraldi hoitav krüpteeritud varukoopia ja taastetest isoleeritud hostil. Allkirjastage sama tseremoonia ajal varu-vahesertifikaat, et surnud allkirjastamishost ei sunniks teid juurt südaööl avama.
Enne kui nimetate selle valmis, kinnitage viis asja: juurvõti ei ole võrku ühendatud hostil, vahevõti elab ainult allkirjastamishostil, kliendipakett kannab mõlemat CA sertifikaati, CRL-il on tulevikus järgmine uuendamine ja kellelgi on ahela iga aegumise jaoks kalendrikirje. Kui üks puudub, on võrguühenduseta näiv seadistus lihtsalt dokumenteerimata.