VPN kök CA-nı oflayn saxlayın və yenə də sertifikat verin
Kök açarı şəbəkədən kənarda saxlayın, son sertifikatları ara CA ilə imzalayın, ləğv siyahısını vaxtında yayımlayın və ilk müştəri qoşulmazdan əvvəl zənciri sınaqdan keçirin.
VPN-iniz gecə saat 3-də bağlantılara cavab verir, halbuki sertifikatlarını imzalayan maşın çekmecədə söndürülmüş vəziyyətdə qalır. Server sertifikatını yoxlayan müştəri heç vaxt sizin CA ilə əlaqə saxlamır, ona görə də CA heç bir bağlantı üçün əlçatan olmalı deyil. Planlaşdırma tələb edən hissə sertifikatın verilməli, yenilənməli və ya ləğv edilməli olduğu gündür və kök açarı kilidli qalır.
Bağlantı əslində nəyi yoxlayır
OpenVPN müştərisi qoşulduqda serverin son sertifikatından artıq etibar etdiyi CA sertifikatına qədər imza zəncirini gəzir, etibarlılıq pəncərəsini yoxlayır və profil belə deyirsə, ləğv siyahısına baxır. O, heç vaxt sizin kök CA-nı axtarmır. Server müştəri sertifikatları üçün əks əməliyyatı edir. Qoşulma anında yalnız son sertifikat, ara sertifikat və əvvəllər payladığınız etibar paketi mövcuddur.
Əslində uğursuz olan üç şeydən biridir: imzalama açarı sertifikat verilərkən mövcud deyil, ləğv siyahısı köhnəlib, ya da müştəri etibar paketi serverin təqdim etdiyi zəncirdən daha köhnədir. Birincisi proses problemidir; digər ikisi paylama problemidir. Heç biri kök açarın onlayn olmasını tələb etmir və tunel autentifikasiyası üçün şəxsi sertifikat tələb edən idarə olunan VPN xidməti yalnız imzalama səlahiyyətini provayderə köçürür. Azure nöqtədən sayta əks istiqamətdə işləyir: kök sertifikat yükləyirsiniz və onun altında imzalanmış sertifikatlara etibar edilir, ona görə də soruşun kim imzalayır, kim yoxlayır və sertifikat necə vaxtından əvvəl geri götürülür.
Kökü heç vaxt ünvan almayan hostda qurun
Oflayn kök nadir hallarda istifadə olunur: ara CA sertifikatını imzalamaq, sonra isə onu yeniləmək və ya ləğv etmək üçün. Qalan hər şey bir səviyyə aşağıda baş verir. Kök işini şəbəkədən kənarda saxlanılan maşında, mümkünsə canlı sistemdən görün və otaqda kimin olduğunu qeyd edin. Əmrlər OpenSSL 1.1.1 və ya daha yenisini nəzərdə tutur, çünki -addext köhnə buraxılışlarda mövcud deyil.
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"
Ara sertifikatı imzalama hostunda yaradın və yalnız onun sorğusunu oflayn maşına aparın. Kök həmin sorğunu sıfır yol uzunluğu ilə imzalayır, beləliklə ara CA son nöqtə sertifikatlarını imzalaya bilər, lakin onun altında başqa CA yarada bilməz. Bu bir genişləndirmə kompromisə uğramış imzalama hostunun kökə bərabər səlahiyyət yaratmasının qarşısını alır. ECDSA-dan yalnız hər müştəri OpenVPN 2.4 və ya daha yenisini işlədərsə istifadə edin; əks halda RSA açarları yaradın və axını eyni saxlayın.
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 və authorityKeyIdentifier=keyid:always ehtiva edir. İmzalama hostu yenidən qoşulmazdan əvvəl kök açarı seyfinə qaytarın. Əgər kök ara sertifikatı ləğv edə bilməlidirsə, onu openssl x509 -req əvəzinə kök səviyyəli index.txt qarşısında openssl ca -config root.cnf -extensions intermediate_ca ilə imzalayın ki, seriya nömrəsi qeydə alınsın; sonra yaranan kök siyahısını müştəri profilinin içində göndərin, burada fayl əsaslı crl-verify onu işə başlayarkən oxuyur. Müştərilərə hər iki CA sertifikatını ehtiva edən paket göndərin; tək son sertifikat kökə qarşı yoxlanmayacaq.
Son sertifikatları ara CA-dan verin, verilənlər bazası ilə
openssl x509 -req ilə imzalamaq ləğv etməyə ehtiyac yaranana qədər işləyir, çünki heç nə seriya nömrəsini qeyd etmir. İlk sertifikatdan openssl ca istifadə edin ki, seriya nömrəsi, bitmə tarixi və ləğv vəziyyəti bir verilənlər bazasında yaşasın. Verilənlər bazası fayllarını bir dəfə yaradın, sonra konfiqurasiyanı onlara yönəldin:
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çar istifadəsi sətri ECDSA açarını nəzərdə tutur; RSA üçün keyEncipherment əlavə edin. Hər müştəriyə öz ümumi adını verin, çünki OpenVPN bağlantını həmin sahə ilə tanıyır və CN=vpn-client paylaşan iki noutbuk jurnallarda, client-config-dir qaydalarında və ya hər hansı istifadəçi əsaslı push-da bir-birindən ayırd edilə bilməz, siz isə ləğv qərarını müdafiə oluna bilən edən atribusiyanı itirirsiniz. Son sertifikatı belə verin və yoxlayın:
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
İmzalama açarını VPN hostuna köçürmək əvəzinə siyasət sərhədi arxasında saxlayın: sorğunu autentifikasiya edən, ümumi adı icazə siyahısı ilə yoxlayan və yalnız sertifikatı qaytaran kiçik xidmət. Hər seriya nömrəsini qeyd edin; jurnal sertifikatla onu istəyən şəxs arasındakı yeganə əlaqədir.
Kökü oyatmadan ləğvi yayımlayın
Müştəri sertifikatları ara CA tərəfindən ləğv edilir, heç vaxt kök tərəfindən deyil. Kök siyahısı yalnız ara CA yandırıldıqda əhəmiyyət kəsb edir. Serveri crl-verify ilə ara siyahıya yönəldin. Fayl əsaslı CRL xidmətin başlanğıcında yüklənir, ona görə də hər yenidən yaradılmadan sonra yenidən yükləyin; kataloq forması qoşulma anında vəziyyəti oxuyur və hər seriya üçün bir fayl tələb edir.
Eyni verilənlər bazasından iki əmrlə ləğv edin və yenidən yaradın:
openssl ca -config intermediate.cnf -revoke /etc/vpn-ca/intermediate/newcerts/1001.pem
openssl ca -config intermediate.cnf -gencrl -out /etc/openvpn/crl.pem
Sonra saatı izləyin. CRL növbəti yenilənmə sahəsi daşıyır və o tarix keçdikdən sonra yoxlayan qarşı tərəf siyahını ignore etmək əvəzinə rədd edir. default_crl_days = 30 ilə aylıq yenidən yaratmaq ehtiyat buraxır; illik yenidən yaratmaq buraxmır. Daha qısa son sertifikat ömürləri daha etibarlı nəzarətdir, çünki ləğv yalnız siyahıya baxılan yerdə tətbiq olunur.
Zənciri sınaqdan keçirin, sonra mərasimi yazın
Dizayna etibar etməzdən əvvəl dörd uğursuzluğu təkrar yaradın. Zənciri openssl verify -CAfile ca-bundle.crt -untrusted intermediate.crt server.crt ilə yoxlayın. Vaxtı keçmiş müştəri sertifikatı ilə qoşulun və serverin onu rədd etdiyini təsdiqləyin. Sınaq müştərisini ləğv edin, yenidən yükləyin və siyahının qüvvəyə mindiyini təsdiqləyin. Host saatını bir gün irəli çəkin, çünki səhv saat başqa yerdə etibarlı görünən sertifikatlar verə və rədd edə bilər.
Oflayn kök yalnız sənədlər varsa nəzarətdir: mərasim üçün iki adlı şəxs, imzalanan hər seriyanın qeydi, maşından ayrı saxlanılan şifrələnmiş ehtiyat nüsxə və təcrid olunmuş hostda bərpa sınağı. Eyni mərasimdə ehtiyat ara sertifikat imzalayın ki, ölü imzalama hostu sizi gecə yarısı kökü açmağa məcbur etməsin.
Bitmiş hesab etməzdən əvvəl beş şeyi təsdiqləyin: kök açar şəbəkəyə qoşulmuş hostda deyil, ara açar yalnız imzalama hostunda yaşayır, müştəri paketi hər iki CA sertifikatını daşıyır, CRL-in gələcəkdə növbəti yenilənməsi var və hər kəs zəncirdəki hər bitmə tarixi üçün təqvim qeydinə sahibdir. Biri yoxdursa, oflayn görünən quraşdırma sadəcə sənədləşdirilməmişdir.