Kekalkan CA akar VPN anda di luar talian dan tetap keluarkan sijil
Simpan kunci akar di luar rangkaian, tandatangani sijil daun dengan CA perantaraan, terbitkan CRL tepat pada masanya dan uji rantai sebelum klien pertama bersambung.
VPN anda menjawab sambungan pada pukul 3 pagi sementara mesin yang menandatangani sijilnya berdiri mati di dalam laci. Klien yang mengesahkan sijil pelayan tidak pernah menghubungi CA anda, jadi CA tidak perlu boleh dicapai untuk sebarang sambungan. Bahagian yang memerlukan perancangan ialah hari apabila sijil mesti dikeluarkan, diperbaharui atau dibatalkan sementara kunci akar kekal berkunci.
Apa yang sebenarnya disahkan oleh sambungan
Apabila klien OpenVPN bersambung, ia menyusuri rantai tandatangan dari sijil daun pelayan ke atas hingga sijil CA yang sudah dipercayainya, memeriksa tetingkap kesahihan dan, jika profil menyatakannya, merujuk senarai pembatalan. Ia tidak pernah mencari CA akar anda. Pelayan melakukan tindakan cermin untuk sijil klien. Pada masa sambungan hanya daun, perantaraan dan berkas kepercayaan yang anda agihkan lebih awal hadir.
Apa yang sebenarnya gagal ialah salah satu daripada tiga perkara: kunci tandatangan tidak tersedia semasa pengeluaran, senarai pembatalan telah lapuk, atau berkas kepercayaan klien lebih lama daripada rantai yang dikemukakan pelayan. Yang pertama masalah proses; dua yang lain masalah pengagihan. Tiada satu pun memerlukan kunci akar berada dalam talian, dan perkhidmatan VPN terurus yang menuntut sijil peribadi untuk pengesahan terowong hanya memindahkan kuasa tandatangan kepada pembekal. Azure titik-ke-tapak berfungsi secara songsang: anda memuat naik sijil akar dan sijil yang ditandatangani di bawahnya dipercayai, jadi tanya siapa yang menandatangani, siapa yang mengesahkan dan bagaimana sijil ditarik balik lebih awal.
Bina akar pada hos yang tidak pernah mendapat alamat
Akar luar talian jarang digunakan: untuk menandatangani sijil CA perantaraan dan kemudian untuk memperbaharui atau membatalkannya. Semua yang lain berlaku satu tahap lebih rendah. Lakukan kerja akar pada mesin yang dijauhkan daripada rangkaian, jika mungkin daripada sistem hidup, dan catat siapa yang berada di dalam bilik. Perintah menganggap OpenSSL 1.1.1 atau lebih baharu, kerana -addext tiada dalam binaan lama.
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"
Cipta perantaraan pada hos tandatangan dan bawa hanya permintaannya ke mesin luar talian. Akar menandatangani permintaan itu dengan panjang laluan sifar, jadi CA perantaraan boleh menandatangani sijil titik akhir tetapi tidak boleh mencipta CA lain di bawahnya. Sambungan tunggal itu menghalang hos tandatangan yang terjejas daripada mencipta kuasa setara akar. Gunakan ECDSA hanya jika setiap klien menjalankan OpenVPN 2.4 atau lebih baharu; jika tidak, jana kunci RSA dan kekalkan aliran yang sama.
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 mengandungi basicConstraints=critical,CA:TRUE,pathlen:0, keyUsage=critical,keyCertSign,cRLSign dan authorityKeyIdentifier=keyid:always. Kembalikan kunci akar ke petinya sebelum hos tandatangan disambungkan semula. Jika akar mesti boleh membatalkan perantaraan, tandatangani dengan openssl ca -config root.cnf -extensions intermediate_ca terhadap index.txt peringkat akar dan bukannya openssl x509 -req, supaya nombor siri direkodkan; kemudian hantar senarai akar yang terhasil di dalam profil klien, di mana crl-verify berasaskan fail membacanya semasa permulaan. Hantar berkas dengan kedua-dua sijil CA kepada klien; daun sahaja tidak akan disahkan terhadap akar.
Keluarkan daun dari perantaraan, dengan pangkalan data
Menandatangani dengan openssl x509 -req berfungsi sehingga anda perlu membatalkan, kerana tiada apa yang merekodkan nombor siri. Gunakan openssl ca dari sijil pertama supaya nombor siri, tamat tempoh dan status pembatalan hidup dalam satu pangkalan data. Cipta fail pangkalan data sekali, kemudian halakan konfigurasi kepadanya:
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
Baris penggunaan kunci menganggap kunci ECDSA; tambah keyEncipherment untuk RSA. Berikan setiap klien nama umumnya sendiri, kerana OpenVPN mengenal pasti sambungan melalui medan itu, dan dua komputer riba yang berkongsi CN=vpn-client tidak dapat dibezakan dalam log, dalam peraturan client-config-dir atau dalam mana-mana tolakan setiap pengguna, dan anda kehilangan atribusi yang menjadikan keputusan pembatalan boleh dipertahankan. Keluarkan dan sahkan daun seperti ini:
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
Simpan kunci tandatangan di sebalik sempadan dasar dan bukannya menyalinnya ke hos VPN: perkhidmatan kecil yang mengesahkan permintaan, memeriksa nama umum terhadap senarai dibenarkan dan memulangkan hanya sijil. Rekodkan setiap nombor siri; log adalah satu-satunya pautan antara sijil dan orang yang memintanya.
Terbitkan pembatalan tanpa membangunkan akar
Sijil klien dibatalkan oleh perantaraan, tidak pernah oleh akar. Senarai akar penting hanya apabila perantaraan dibakar. Halakan pelayan ke senarai perantaraan dengan crl-verify. CRL berasaskan fail dimuatkan pada permulaan perkhidmatan, jadi muat semula selepas setiap penjanaan semula; bentuk direktori membaca keadaan pada masa sambungan dan memakan satu fail bagi setiap nombor siri.
Batalkan dan jana semula dengan dua perintah daripada pangkalan data yang sama:
openssl ca -config intermediate.cnf -revoke /etc/vpn-ca/intermediate/newcerts/1001.pem
openssl ca -config intermediate.cnf -gencrl -out /etc/openvpn/crl.pem
Kemudian perhatikan jam. CRL membawa medan kemas kini seterusnya, dan apabila tarikh itu berlalu, rakan yang mengesahkan menolak senarai itu dan bukannya mengabaikannya. Penjanaan semula bulanan dengan default_crl_days = 30 memberi ruang; tahunan tidak. Jangka hayat daun yang lebih pendek ialah kawalan yang lebih dipercayai, kerana pembatalan hanya terpakai di tempat senarai dirujuk.
Uji rantai, kemudian tuliskan upacara itu
Hasilkan semula empat kegagalan sebelum mempercayai reka bentuk. Sahkan rantai dengan openssl verify -CAfile ca-bundle.crt -untrusted intermediate.crt server.crt. Sambung dengan sijil klien yang tamat tempoh dan pastikan pelayan menolaknya. Batalkan klien ujian, muat semula dan pastikan senarai berkuat kuasa. Gerakkan jam hos satu hari ke hadapan, kerana jam yang salah boleh mengeluarkan dan menolak sijil yang kelihatan sah di tempat lain.
Akar luar talian hanya kawalan jika dokumen ada: dua orang bernama untuk upacara, rekod setiap nombor siri yang ditandatangani, sandaran disulitkan yang disimpan berasingan daripada mesin, dan ujian pemulihan pada hos terpencil. Tandatangani perantaraan ganti semasa upacara yang sama supaya hos tandatangan yang mati tidak memaksa anda membuka akar pada tengah malam.
Sebelum memanggilnya siap, sahkan lima perkara: kunci akar bukan pada hos berangkaian, kunci perantaraan hanya hidup pada hos tandatangan, berkas klien membawa kedua-dua sijil CA, CRL mempunyai kemas kini seterusnya pada masa hadapan, dan seseorang memiliki entri kalendar untuk setiap tamat tempoh dalam rantai. Jika satu tiada, persediaan yang kelihatan luar talian hanyalah tidak didokumenkan.