നിങ്ങളുടെ 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-ന് ഭാവിയിലെ അടുത്ത അപ്ഡേറ്റ് ഉണ്ട്, ചെയിനിലെ ഓരോ കാലഹരണത്തിനും ആർക്കെങ്കിലും കലണ്ടർ എൻട്രി ഉണ്ട്. ഒന്ന് കുറവാണെങ്കിൽ, ഓഫ്ലൈൻ ആയി തോന്നുന്ന ക്രമീകരണം രേഖപ്പെടുത്താത്തത് മാത്രമാണ്.