A VPN-je hajnali 3-kor válaszol a kapcsolatokra, miközben a tanúsítványait aláíró gép kikapcsolva fekszik egy fiókban. A kiszolgáló tanúsítványát ellenőrző ügyfél soha nem lép kapcsolatba a CA-jával, ezért a CA-nak nem kell elérhetőnek lennie egyetlen kapcsolat számára sem. A tervezést igénylő rész: a nap, amikor egy tanúsítványt ki kell adni, meg kell újítani vagy vissza kell vonni miközben a gyökérkulcs zárva marad.

Mit ellenőriz valójában egy kapcsolat

Amikor az OpenVPN-ügyfél csatlakozik, végigjárja az aláírásláncot a kiszolgáló levéltanúsítványától felfelé egy olyan CA-tanúsítványig, amelyben már bízik, ellenőrzi az érvényességi ablakot, és ha a profil így rendelkezik, megnézi a visszavonási listát. Soha nem keresi a gyökér-CA-ját. A kiszolgáló a tükörképet végzi el az ügyféltanúsítványoknál. A kapcsolódás pillanatában csak a levél, a köztes és a korábban kiosztott bizalmi csomag van jelen.

Valójában három dolog egyike hibázik: az aláírókulcs nem elérhető a kiadáskor, egy visszavonási lista elavult, vagy az ügyfél bizalmi csomagja régebbi, mint a kiszolgáló által bemutatott lánc. Az első folyamatprobléma; a másik kettő terjesztési probléma. Egyik sem igényli, hogy a gyökérkulcs online legyen, és a felügyelt VPN-szolgáltatás, amely privát tanúsítványt követel az alagút hitelesítéséhez, csak áthelyezi az aláírási jogosultságot a szolgáltatóhoz. Az Azure pont-telephely fordítva működik: feltölt egy gyökértanúsítványt, és az alatta aláírt tanúsítványokat megbízhatónak tekinti, ezért kérdezze meg, ki ír alá, ki ellenőriz és hogyan vonnak vissza egy tanúsítványt korábban.

Építse a gyökeret olyan gazdagépre, amely soha nem kap címet

Az offline gyökeret ritkán használják: a köztes CA-tanúsítvány aláírására, később pedig a megújítására vagy visszavonására. Minden más egy szinttel lejjebb történik. A gyökér munkáját a hálózattól távol tartott gépen végezze, lehetőleg élő rendszerből, és jegyezze fel, ki volt a szobában. A parancsok OpenSSL 1.1.1-et vagy újabbat feltételeznek, mert a -addext nem érhető el a régebbi buildekben.

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"

Hozza létre a köztes tanúsítványt az aláíró gazdagépen, és csak a kérelmét vigye át az offline gépre. A gyökér nulla úthosszal írja alá ezt a kérelmet, így a köztes CA aláírhat végponti tanúsítványokat, de nem hozhat létre másik CA-t alatta. Ez az egyetlen kiterjesztés megakadályozza, hogy egy feltört aláíró gazdagép gyökérrel egyenértékű jogosultságot hozzon létre. Az ECDSA-t csak akkor használja, ha minden ügyfél OpenVPN 2.4-et vagy újabbat futtat; ellenkező esetben generáljon RSA-kulcsokat, és tartsa ugyanazt a folyamatot.

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 a következőket tartalmazza: basicConstraints=critical,CA:TRUE,pathlen:0, keyUsage=critical,keyCertSign,cRLSign és authorityKeyIdentifier=keyid:always. Tegye vissza a gyökérkulcsot a széfjébe, mielőtt az aláíró gazdagépet újra csatlakoztatja. Ha a gyökérnek vissza kell tudnia vonni a köztes tanúsítványt, írja alá a openssl x509 -req helyett gyökérszintű index.txt ellenében a openssl ca -config root.cnf -extensions intermediate_ca paranccsal, hogy a sorozatszám rögzítésre kerüljön; majd küldje el a kapott gyökérlistát az ügyfélprofilban, ahol egy fájlalapú crl-verify indításkor beolvassa. Küldjön az ügyfeleknek mindkét CA-tanúsítványt tartalmazó csomagot; egy levél önmagában nem fog ellenőrződni a gyökérrel szemben.

Adjon ki leveleket a köztes CA-ból, adatbázissal

A openssl x509 -req-gyel való aláírás addig működik, amíg visszavonásra nincs szükség, mert semmi nem rögzíti a sorozatszámot. Használja a openssl ca-t az első tanúsítványtól kezdve, hogy a sorozatszám, a lejárat és a visszavonási állapot egyetlen adatbázisban éljen. Hozza létre egyszer az adatbázisfájlokat, majd irányítsa rájuk a konfigurációt:

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

A kulcshasználati sor ECDSA-kulcsot feltételez; RSA-hoz adja hozzá a keyEncipherment-t. Adjon minden ügyfélnek saját közös nevet, mert OpenVPN e mező alapján azonosítja a kapcsolatot, és két laptop, amely CN=vpn-client-t oszt meg, nem különböztethető meg a naplókban, a client-config-dir szabályaiban vagy bármilyen felhasználónkénti push-ban, és elveszíti azt a hozzárendelést, amely a visszavonási döntést védhetővé teszi. Adjon ki és ellenőrizzen egy levelet így:

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

Tartsa az aláírókulcsot egy szabályzati határ mögött, ahelyett hogy a VPN-gazdagépre másolná: egy kis szolgáltatás, amely hitelesíti a kérelmet, ellenőrzi a közös nevet egy engedélyezési lista ellenében, és csak a tanúsítványt adja vissza. Naplózzon minden sorozatszámot; a napló az egyetlen kapcsolat egy tanúsítvány és az azt kérő személy között.

Tegye közzé a visszavonást a gyökér felébresztése nélkül

Az ügyféltanúsítványokat a köztes CA vonja vissza, soha nem a gyökér. A gyökérlista csak akkor számít, amikor egy köztes CA elégett. Irányítsa a kiszolgálót a köztes listára a crl-verify-gyel. A fájlalapú CRL a szolgáltatás indulásakor töltődik be, ezért minden újragenerálás után töltse be újra; a könyvtárforma kapcsolódáskor olvassa az állapotot, és sorozatszámonként egy fájlba kerül.

Vonja vissza és generálja újra két paranccsal ugyanabból az adatbázisból:

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

Aztán figyelje az órát. A CRL hordozza a következő frissítés mezőjét, és amikor az a dátum elmúlik, az ellenőrző fél elutasítja a listát ahelyett, hogy figyelmen kívül hagyná. A havi újragenerálás a default_crl_days = 30-gyel tartalékot hagy; az éves nem. A rövidebb levél-élettartamok a megbízhatóbb ellenőrzés, mert a visszavonás csak ott érvényes, ahol a listát megnézik.

Tesztelje a láncot, majd írja le a szertartást

Négy hibát reprodukáljon, mielőtt megbízik a tervben. Ellenőrizze a láncot a openssl verify -CAfile ca-bundle.crt -untrusted intermediate.crt server.crt-gyel. Csatlakozzon lejárt ügyféltanúsítvánnyal, és erősítse meg, hogy a kiszolgáló elutasítja. Vonjon vissza egy tesztügyfelet, töltse újra, és erősítse meg, hogy a lista hatályba lép. Tolja előre egy gazdagép óráját egy nappal, mert a rossz óra olyan tanúsítványokat adhat ki és utasíthat el, amelyek máshol érvényesnek látszanak.

Az offline gyökér csak akkor kontroll, ha létezik a papírmunka: két megnevezett személy a szertartáshoz, minden aláírt sorozatszám nyilvántartása, a géptől elkülönítve tárolt titkosított biztonsági mentés, és egy visszaállítási teszt izolált gazdagépen. Ugyanazon szertartás alatt írjon alá egy tartalék köztes tanúsítványt, hogy egy halott aláíró gazdagép ne kényszerítse éjfélkor a gyökér feloldására.

Mielőtt késznek nevezné, erősítsen meg öt dolgot: a gyökérkulcs nincs hálózatba kötött gazdagépen, a köztes kulcs csak az aláíró gazdagépen él, az ügyfélcsomag mindkét CA-tanúsítványt hordozza, a CRL-nek van jövőbeli következő frissítése, és valakinek van naptárbejegyzése a lánc minden lejáratához. Ha egy hiányzik, a offline-nak látszó beállítás csak dokumentálatlan.

Kapcsolódó cikkek