మీ 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ని సృష్టించలేదు. ఆ ఒక పొడిగింపు రాజీపడిన సంతకం హోస్ట్ రూట్కు సమానమైన అధికారాన్ని సృష్టించకుండా నిరోధిస్తుంది. ప్రతి క్లయింట్ OpenVPN 2.4 లేదా కొత్తది నడిపితే మాత్రమే ECDSA ఉపయోగించండి; లేకపోతే 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 భవిష్యత్తు తదుపరి నవీకరణను కలిగి ఉంది, మరియు గొలుసులోని ప్రతి గడువుకు ఎవరికైనా క్యాలెండర్ ఎంట్రీ ఉంది. ఒకటి లేకపోతే, ఆఫ్లైన్గా కనిపించే సెటప్ కేవలం నమోదు చేయబడనిది.