Jou VPN beantwoord verbindings om 3 vm. terwyl die masjien wat sy sertifikate onderteken, afgeskakel in ’n laai lê. ’n Kliënt wat die bediener se sertifikaat valideer, kontak nooit jou CA nie, so die CA hoef nie vir enige verbinding bereikbaar te wees nie. Die deel wat beplanning verg, is die dag wanneer ’n sertifikaat uitgereik, hernu of herroep moet word terwyl die wortelsleutel weggesluit bly.

Wat ’n verbinding werklik valideer

Wanneer die OpenVPN-kliënt verbind, volg dit die handtekeningketting van die bediener se bladsertifikaat op na ’n CA-sertifikaat wat dit reeds vertrou, kontroleer die geldigheidstydperk en raadpleeg, as die profiel dit sê, ’n herroepingslys. Dit soek nooit jou wortel-CA op nie. Die bediener doen die spieëlbeeld vir kliëntsertifikate. Op verbindingstyd is slegs die bladsertifikaat, die intermediêre sertifikaat en die vertrouensbundel wat jy vroeër versprei het, teenwoordig.

Wat werklik misluk, is een van drie dinge: die ondertekeningsleutel is nie by uitreiking beskikbaar nie, ’n herroepingslys het verouderd geraak, of die kliënt se vertrouensbundel is ouer as die ketting wat die bediener aanbied. Die eerste is ’n prosesprobleem; die ander twee is verspreidingsprobleme. Nie een van hulle vereis dat die wortelsleutel aanlyn is nie, en ’n bestuurde VPN-diens wat ’n private sertifikaat vir tonnelverifikasie eis, verskuif net die ondertekeningsgesag na die verskaffer. Azure punt-tot-punt werk andersom: jy laai ’n wortelsertifikaat op en sertifikate wat daaronder onderteken is, word vertrou, so vra wie onderteken, wie valideer en hoe ’n sertifikaat vroegtydig teruggetrek word.

Bou die wortel op ’n gasheer wat nooit ’n adres kry nie

’n Vanlyn wortel word selde gebruik: om die intermediêre CA-sertifikaat te onderteken, en later om dit te hernu of te herroep. Alles anders gebeur een vlak laer. Doen die wortelwerk op ’n masjien wat van die netwerk af gehou word, indien moontlik vanaf ’n lewendige stelsel, en teken aan wie in die vertrek was. Die opdragte veronderstel OpenSSL 1.1.1 of nuwer, want -addext is nie in ouer boue beskikbaar nie.

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"

Skep die intermediêre sertifikaat op die ondertekeningsgasheer en dra net sy versoek na die vanlyn masjien. Die wortel onderteken daardie versoek met ’n padlengte van nul, so die intermediêre sertifikaat mag eindpunt-sertifikate onderteken, maar mag nie nog ’n CA daaronder skep nie. Daardie een uitbreiding verhoed dat ’n gekompromitteerde ondertekeningsgasheer ’n wortelgelykwaardige gesag skep. Gebruik ECDSA net as elke kliënt OpenVPN 2.4 of nuwer gebruik; genereer andersins RSA-sleutels en hou die proses identies.

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 bevat basicConstraints=critical,CA:TRUE,pathlen:0, keyUsage=critical,keyCertSign,cRLSign en authorityKeyIdentifier=keyid:always. Sit die wortelsleutel terug in sy kluis voordat die ondertekeningsgasheer weer gekoppel word. As die wortel die intermediêre sertifikaat moet kan herroep, onderteken dit met openssl ca -config root.cnf -extensions intermediate_ca teen ’n wortelvlak-index.txt eerder as openssl x509 -req, sodat die reeksnommer aangeteken word; stuur dan die resulterende wortellys in die kliëntprofiel, waar ’n lêergebaseerde crl-verify dit by die opstart lees. Stuur kliënte ’n bundel met albei CA-sertifikate; ’n bladsertifikaat alleen sal nie teen die wortel valideer nie.

Reik bladsertifikate uit vanaf die intermediêre sertifikaat, met ’n databasis

Onderteken met openssl x509 -req werk tot jy moet herroep, want niks teken die reeksnommer aan nie. Gebruik openssl ca vanaf die eerste sertifikaat sodat reeksnommer, vervaldatum en herroepingstatus in een databasis woon. Skep die databasislêers een keer en wys dan die konfigurasie daarheen:

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

Die sleutelgebruik-lyn veronderstel ’n ECDSA-sleutel; voeg keyEncipherment by vir RSA. Gee elke kliënt sy eie algemene naam, want OpenVPN identifiseer ’n verbinding aan daardie veld, en twee skootrekenaars wat CN=vpn-client deel, kan nie in logboeke, in client-config-dir-reëls of in enige gebruiker-spesifieke stoot onderskei word nie, en jy verloor die toeskrywing wat ’n herroepingsbesluit verdedigbaar maak. Reik ’n bladsertifikaat so uit en verifieer dit:

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

Hou die ondertekeningsleutel agter ’n beleidsgrens eerder as om dit na die VPN-gasheer te kopieer: ’n klein diens wat die versoek verifieer, die algemene naam teen ’n toelatingslys kontroleer en net die sertifikaat terugstuur. Teken elke reeksnommer aan; die logboek is die enigste skakel tussen ’n sertifikaat en die persoon wat dit aangevra het.

Publiseer herroeping sonder om die wortel wakker te maak

Kliëntsertifikate word deur die intermediêre sertifikaat herroep, nooit deur die wortel nie. Die wortellys maak net saak wanneer ’n intermediêre sertifikaat verbrand is. Wys die bediener na die intermediêre lys met crl-verify. ’n Lêergebaseerde CRL word by diensbegin gelaai, so herlaai na elke hergenerering; die gidsvorm lees toestand by verbindingstyd en kos een lêer per reeksnommer.

Herroep en hergenereer met twee opdragte uit dieselfde databasis:

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

Let dan op die klok. ’n CRL dra ’n volgende-opdatering-veld, en sodra daardie datum verby is, verwerp ’n verifiërende eweknie die lys in plaas daarvan om dit te ignoreer. Maandeliks hergenereer met default_crl_days = 30 laat speling; jaarliks hergenereer nie. Korter bladsertifikaat-leeftye is die betroubaarste beheer, want herroeping geld net waar die lys geraadpleeg word.

Toets die ketting en skryf dan die seremonie neer

Reproduseer vier mislukkings voordat jy die ontwerp vertrou. Verifieer die ketting met openssl verify -CAfile ca-bundle.crt -untrusted intermediate.crt server.crt. Verbind met ’n vervalle kliëntsertifikaat en bevestig dat die bediener dit weier. Herroep ’n toetskliënt, herlaai en bevestig dat die lys in werking tree. Skuif ’n gasheer se klok ’n dag vorentoe, want ’n verkeerde klok kan sertifikate uitreik en verwerp wat elders geldig lyk.

’n Vanlyn wortel is net ’n beheer as die papierwerk bestaan: twee genoemde mense vir die seremonie, ’n rekord van elke reeksnommer wat onderteken is, ’n geïnkripteerde rugsteun wat apart van die masjien gestoor word, en ’n hersteltoets op ’n geïsoleerde gasheer. Onderteken ’n spaar-intermediêre sertifikaat tydens dieselfde seremonie sodat ’n dooie ondertekeningsgasheer jou nie om middernag dwing om die wortel oop te sluit nie.

Voordat jy dit klaar noem, bevestig vyf dinge: die wortelsleutel is nie op ’n genetwerkte gasheer nie, die intermediêre sleutel woon net op die ondertekeningsgasheer, die kliëntbundel dra albei CA-sertifikate, die CRL het ’n toekomstige volgende-opdatering, en iemand besit ’n kalenderinskrywing vir elke vervaldatum in die ketting. As een ontbreek, is die opstelling wat vanlyn lyk net ongedokumenteer.

Verwante artikels