خپل د VPN ریښه CA آفلاین وساتئ او بیا هم سندونه صادر کړئ
د ریښې کلید له شبکې بهر وساتئ، د منځګړي CA سره پاڼې سندونه لاسلیک کړئ، CRL په وخت خپور کړئ او لومړی پیرودونکی له نښلېدو مخکې زنځیر وازموئ۔
ستاسو VPN د شپې په 3 بجو اړیکو ته ځواب وایي، پداسې حال کې چې د هغې د سندونو لاسلیک کوونکی ماشین په کښتۍ کې بند پروت دی۔ هغه پیرودونکی چې د سرور سند تاییدوي هېڅکله ستاسو له CA سره اړیکه نه نیسي، نو CA اړ نه دی چې د کومې اړیکې لپاره د لاسرسي وړ وي۔ هغه برخه چې پلان ته اړتیا لري دا ده هغه ورځ چې سند باید صادر، نوی یا لغوه شي پداسې حال کې چې د ریښې کلید بند پاتې وي۔
یوه اړیکه په رښتیا څه تاییدوي
کله چې د OpenVPN پیرودونکی نښلېږي، له سرور د پاڼې سنده پورته هغه CA سند ته ځي چې دمخه پرې باور لري، د اعتبار موده ګوري او که پروفایل ووایي، د لغوه کولو لیست ته ګوري۔ هېڅکله ستاسو د ریښې CA نه لټوي۔ سرور د پیرودونکي سندونو لپاره د هغې عکس العمل کوي۔ د نښلېدو په وخت کې یوازې پاڼه، منځګړی او هغه باور بنډل چې دمخه مو ویشلی و، موجود وي۔
په رښتیا د درېیو شیانو یو ناکامېږي: د لاسلیک کلید د صادرولو په وخت کې شتون نه لري، د لغوه کولو لیست زوړ شوی، یا د پیرودونکي باور بنډل له هغه زنځیر زوړ دی چې سرور یې وړاندې کوي۔ لومړی د بهیر ستونزه ده؛ نورې دوه د ویش ستونزې دي۔ هېڅ یوه یې هم نه غواړي چې د ریښې کلید آنلاین وي، او هغه مدیریت شوې VPN خدمت چې د تونل تصدیق لپاره خصوصي سند غواړي، یوازې د لاسلیک واکمني خدمت وړونکي ته لېږدوي۔ Azure له نقطې تر ځای برعکس کار کوي: تاسو د ریښې سند پورته کوئ او د هغې لاندې لاسلیک شوي سندونه باوري ګڼل کیږي، نو وپوښتئ څوک لاسلیک کوي، څوک تاییدوي او سند څنګه وختي بیرته اخیستل کیږي۔
ریښه په هغه کوربه جوړه کړئ چې هېڅکله پته نه اخلي
آفلاین ریښه لږ کارول کیږي: د منځګړي CA سند لاسلیک کولو لپاره، او وروسته د هغې د نوي کولو یا لغوه کولو لپاره۔ نور هر څه یوه کچه ښکته پیښیږي۔ د ریښې کار په هغه ماشین کې وکړئ چې له شبکې لرې ساتل کیږي، که ممکن وي له ژوندي سیستم څخه، او ولیکئ چې په خونه کې څوک و۔ امرونه OpenSSL 1.1.1 یا نوی فرض کوي، ځکه -addext په زړو جوړښتونو کې نشته۔
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"
منځګړی د لاسلیک کوربه باندې جوړ کړئ او یوازې د هغې غوښتنه آفلاین ماشین ته یوسئ۔ ریښه هغه غوښتنه د صفر لار اوږدوالي سره لاسلیک کوي، نو منځګړی CA کولی شي د پای نقطې سندونه لاسلیک کړي خو د ځان لاندې بل CA نه شي جوړولی۔ هغه یو غځېدنه د زیانمن شوي لاسلیک کوربه مخه نیسي چې د ریښې سره برابر واک جوړ کړي۔ ECDSA یوازې هغه وخت وکاروئ چې هر پیرودونکی OpenVPN 2.4 یا نوی چلوي؛ که نه، RSA کلیدونه جوړ کړئ او بهیر هماغسې وساتئ۔
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 او authorityKeyIdentifier=keyid:always لري۔ د لاسلیک کوربه له بیا نښلېدو مخکې د ریښې کلید خپل خزانې ته بیرته یوسئ۔ که ریښه باید منځګړی لغوه کړای شي، هغه د openssl x509 -req پر ځای د ریښې کچې index.txt په وړاندې د openssl ca -config root.cnf -extensions intermediate_ca سره لاسلیک کړئ، ترڅو سیریل شمېره ثبت شي؛ بیا پایله لرونکې ریښې لیست د پیرودونکي پروفایل دننه ولېږئ، چېرته چې د فایل پر بنسټ crl-verify هغه د پیل په وخت لولي۔ پیرودونکو ته د دواړو CA سندونو سره بنډل ولېږئ؛ یوازې پاڼه به د ریښې په وړاندې تایید نشي۔
پاڼې له منځګړي صادر کړئ، د ډیټابیس سره
د openssl x509 -req سره لاسلیک کول تر هغه کار کوي چې لغوه کول ورته اړتیا پیدا شي، ځکه هېڅ شی سیریل شمېره نه ثبتوي۔ له لومړي سند څخه openssl ca وکاروئ ترڅو سیریل شمېره، پای نیټه او لغوه کېدو حالت په یو ډیټابیس کې ژوند وکړي۔ د ډیټابیس فایلونه یو ځل جوړ کړئ، بیا ترتیب هغوی ته واړوئ:
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
د کلید کارونې کرښه ECDSA کلید فرض کوي؛ د RSA لپاره keyEncipherment اضافه کړئ۔ هر پیرودونکي ته خپل عام نوم ورکړئ، ځکه OpenVPN اړیکه د هغه ساحې له مخې پېژني، او دوه لپټاپونه چې CN=vpn-client شریکوي په لاګونو، په client-config-dir قواعدو یا په هر کارونکي ځانګړي پوش کې توپیر نه شي کېدای، او تاسو هغه نسبت له لاسه ورکوئ چې د لغوه کولو پریکړه د دفاع وړ ګرځوي۔ پاڼه داسې صادره او تایید کړئ:
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
د لاسلیک کلید د VPN کوربه ته کاپي کولو پر ځای د سیاست پولې شاته وساتئ: یو کوچنی خدمت چې غوښتنه تصدیق کوي، عام نوم د اجازه لیسټ په وړاندې ګوري او یوازې سند بیرته ورکوي۔ هره سیریل شمېره ثبت کړئ؛ لاګ یوازینی تړاو دی چې سند او هغه څوک چې غوښتنه یې کړې ده سره نښلوي۔
لغوه کول پرته له دې چې ریښه راویښه کړئ خپاره کړئ
د پیرودونکي سندونه منځګړی لغوه کوي، هېڅکله ریښه نه۔ د ریښې لیست یوازې هغه وخت مهم وي چې یو منځګړی سوځول شوی وي۔ سرور د crl-verify سره منځګړي لیست ته واړوئ۔ د فایل پر بنسټ CRL د خدمت په پیل کې لوډ کیږي، نو له هرې بیا جوړونې وروسته یې بیا لوډ کړئ؛ د لارښود بڼه د نښلېدو په وخت حالت لولي او د هر سیریل شمېرې لپاره یو فایل لګښت کوي۔
له هماغه ډیټابیس څخه په دوه امرونو لغوه او بیا جوړ کړئ:
openssl ca -config intermediate.cnf -revoke /etc/vpn-ca/intermediate/newcerts/1001.pem
openssl ca -config intermediate.cnf -gencrl -out /etc/openvpn/crl.pem
بیا ساعت ته پام وکړئ۔ CRL د راتلونکي تازه کولو ساحه لري، او کله چې هغه نېټه تېره شي، تاییدوونکی لوري لیست نه مني پرځای یې چې له پامه یې وغورځوي۔ د default_crl_days = 30 سره میاشتنی بیا جوړول ځای پرېږدي؛ کلنی نه۔ لنډ د پاڼې عمر ډېر باوري کنټرول دی، ځکه لغوه کول یوازې هغه ځای کې پلي کیږي چېرته چې لیست ګوري۔
زنځیر وازموئ، بیا مراسم ولیکئ
له دې مخکې چې ډیزاین باور وکړئ څلور ناکامۍ بیا تولید کړئ۔ زنځیر د openssl verify -CAfile ca-bundle.crt -untrusted intermediate.crt server.crt سره تایید کړئ۔ له پای ته رسېدلي پیرودونکي سند سره ونښلئ او تایید کړئ چې سرور یې نه مني۔ یو ازموینه پیرودونکی لغوه کړئ، بیا لوډ کړئ او تایید کړئ چې لیست نافذ کیږي۔ د کوربه ساعت یوه ورځ مخکې یوسئ، ځکه غلط ساعت کولی شي هغه سندونه صادر او رد کړي چې بل ځای کې سم ښکاري۔
آفلاین ریښه یوازې هغه وخت کنټرول دی چې کاغذونه موجود وي: د مراسم لپاره دوه نومول شوي کسان، د هر لاسلیک شوي سیریل شمېرې ریکارډ، له ماشین څخه جلا ساتل شوی کوډ شوی بیک اپ، او په جلا کوربه باندې د بیا رغولو ازموینه۔ په هماغه مراسم کې یو اضافي منځګړی لاسلیک کړئ ترڅو مړ لاسلیک کوربه تاسو د نیمې شپې په وخت د ریښې خلاصولو ته اړ نه کړي۔
مخکې له دې چې پای ته رسېدلی یې وبولئ، پنځه شیان تایید کړئ: د ریښې کلید په شبکه کې کوربه باندې نه دی، منځګړی کلید یوازې د لاسلیک کوربه باندې ژوند کوي، د پیرودونکي بنډل دواړه CA سندونه لري، CRL په راتلونکي کې راتلونکی تازه کول لري، او زنځیر کې د هرې پای نیټې لپاره څوک د کیلنڈر ثبت لري۔ که یو هم نه وي، آفلاین ښکاري ترتیب یوازې نا-مستند دی۔