VPN rẹ ń dáhùn àwọn ìsopọ̀ ní agogo 3 òru nígbà tí ẹ̀rọ tó ń fi ọwọ́ sí àwọn ẹ̀rí rẹ̀ wà ní àtièrúkù nínú àpótí. Oníbàárà tó ń ṣàyẹ̀wò ẹ̀rí olùsìn kì í bá CA rẹ sọ̀rọ̀ rárá, nítorí náà CA kò nílò kí ó wà ní àárọ̀ọ́kà fún ìsopọ̀ kankan. Apá tó nílò ètò ni ọjọ́ tí a gbọ́dọ̀ fún ẹ̀rí jáde, tún un ṣe, tàbí fagilé rẹ̀ nígbà tí kọ́kọ́rọ́ gbòǹgbò wà ní títìpa.

Kí ni ìsopọ̀ kan ń ṣàyẹ̀wò ní ti gidi

Nígbà tí oníbàárà OpenVPN bá sopọ̀, ó ń tẹ̀lé ẹ̀wọ̀n ìfọwọ́sí láti ẹ̀rí ewé olùsìn lọ sí ẹ̀rí CA tí ó ti gbà gbọ́, ó ń wo àkókò ìwúlò, àti pé bí profáìlì bá sọ bẹ́ẹ̀, ó ń wo àkọsílẹ̀ ìfagilé. Kì í wá CA gbòǹgbò rẹ rárá. Olùsìn ń ṣe bẹ́ẹ̀ fún àwọn ẹ̀rí oníbàárà bí ojú dígí. Ní àkókò ìsopọ̀, ẹ̀rí ewé, àárín àti àkójọ ìgbàgbọ́ tí o ti pín tẹ́lẹ̀ nìkan ló wà.

Ohun tó ń kùnà ní ti gidi jẹ́ ọ̀kan nínú mẹ́ta: kọ́kọ́rọ́ ìfọwọ́sí kò sí nígbà ìfúnni, àkọsílẹ̀ ìfagilé ti di àtijọ́, tàbí àkójọ ìgbàgbọ́ oníbàárà ti pẹ́ ju ẹ̀wọ̀n tí olùsìn gbé kalẹ̀. Èyí àkọ́kọ́ jẹ́ ìṣòro ìlànà; àwọn méjì yòókù jẹ́ ìṣòro pípín. Kò sí ọ̀kan nínú wọn tó béèrè pé kọ́kọ́rọ́ gbòǹgbò wà lórí ayélujára, àti pé iṣẹ́ VPN tí a ń ṣàkóso tó béèrè ẹ̀rí àdáni fún ìjẹ́rìí ọ̀nà kìkì ń gbé àṣẹ ìfọwọ́sí lọ sọ́dọ̀ olùpèsè. Azure ojú-ìmọ̀-sí ojú-ìmọ̀ ń ṣiṣẹ́ ní òdìkejì: o gbé ẹ̀rí gbòǹgbò sí orí, àwọn ẹ̀rí tí a fi ọwọ́ sí lábẹ́ rẹ̀ ni a kà sí olóòótọ́, nítorí náà béèrè ẹni tó ń fi ọwọ́ sí, ẹni tó ń ṣàyẹ̀wò àti bí a ṣe ń yọ ẹ̀rí kúrò kíákíá.

Kọ́ gbòǹgbò lórí ẹ̀rọ tí kò gbà àdírẹ́sì rárá

A kì í lo gbòǹgbò àìsí nẹ́tíwọ́kì púpọ̀: láti fi ọwọ́ sí ẹ̀rí CA àárín, àti nígbà tó yá láti tún un ṣe tàbí fagilé rẹ̀. Gbogbo ohun mìíràn ń ṣẹlẹ̀ ní ìpele kan ní ìsàlẹ̀. Ṣe iṣẹ́ gbòǹgbò lórí ẹ̀rọ tí a pa mọ́ kúrò lórí nẹ́tíwọ́kì, bí ó bá ṣeé ṣe láti ẹ̀rọ alààyè, kí o sì kọ ẹni tó wà nínú yàrá. Àwọn àṣẹ ń gbà pé OpenSSL 1.1.1 tàbí tuntun, nítorí -addext kò sí nínú àwọn ìkọ́ àtijọ́.

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"

Ṣẹ̀dá àárín lórí ẹ̀rọ ìfọwọ́sí kí o sì gbé ìbéèrè rẹ̀ nìkan lọ sí ẹ̀rọ àìsí nẹ́tíwọ́kì. Gbòǹgbò ń fi ọwọ́ sí ìbéèrè yẹn pẹ̀lú ìlà ìrìnkèrìn òdo, nítorí náà CA àárín lè fi ọwọ́ sí àwọn ẹ̀rí ìparí ṣùgbọ́n kò lè ṣẹ̀dá CA mìíràn lábẹ́ ara rẹ̀. Ìmúgbòòrò kan ṣoṣo yẹn ń dá ẹ̀rọ ìfọwọ́sí tí a ti ṣẹ́gun lọ́nà láti ṣẹ̀dá àṣẹ tó dọ́gba gbòǹgbò. Lo ECDSA nìkan bí oníbàárà kọ̀ọ̀kan bá ń ṣiṣẹ́ OpenVPN 2.4 tàbí tuntun; bí bẹ́ẹ̀ kọ́, ṣẹ̀dá àwọn kọ́kọ́rọ́ RSA kí o sì pa ìṣàn náà mọ́.

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 ní basicConstraints=critical,CA:TRUE,pathlen:0, keyUsage=critical,keyCertSign,cRLSign àti authorityKeyIdentifier=keyid:always nínú. Da kọ́kọ́rọ́ gbòǹgbò padà sí àpótí rẹ̀ kí ẹ̀rọ ìfọwọ́sí tó tún sopọ̀. Bí gbòǹgbò yóò bá lè fagilé àárín, fi openssl ca -config root.cnf -extensions intermediate_ca fi ọwọ́ sí i lòdì sí index.txt ìpele gbòǹgbò dípò openssl x509 -req, kí a lè kọ nọ́mbà ṣíríà; lẹ́yìn náà fi àkójọ gbòǹgbò tó jáde rẹ̀ sínú profáìlì oníbàárà, níbi tí crl-verify tó dá lórí fáìlì ti ń kà á ní ìbẹ̀rẹ̀. Fi àkójọ pẹ̀lú àwọn ẹ̀rí CA méjèèjì ránṣẹ́ sí àwọn oníbàárà; ewé nìkan kò ní ṣàyẹ̀wò lòdì sí gbòǹgbò.

Fún àwọn ewé jáde láti CA àárín, pẹ̀lú dátàbésì

Ìfọwọ́sí pẹ̀lú openssl x509 -req ń ṣiṣẹ́ títí tí ìwọ yóò fi nílò ìfagilé, nítorí kò sí ohun tó ń kọ nọ́mbà ṣíríà. Lo openssl ca láti ẹ̀rí àkọ́kọ́ kí nọ́mbà ṣíríà, àkókò ìparí àti ipò ìfagilé lè gbé nínú dátàbésì kan. Ṣẹ̀dá àwọn fáìlì dátàbésì lẹ́ẹ̀kan, lẹ́yìn náà darí ìṣètò sí wọn:

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

Ìlà lílo kọ́kọ́rọ́ ń gbà pé kọ́kọ́rọ́ ECDSA; fi keyEncipherment kún fún RSA. Fún oníbàárà kọ̀ọ̀kan ní orúkọ gbogbogbò tirẹ̀, nítorí OpenVPN ń dá ìsopọ̀ mọ̀ nípasẹ̀ pápá yẹn, àti pé kọ̀mpútà gbéwọ́nrán méjì tí wọ́n ń pín CN=vpn-client kò lè yàtọ̀ nínú àwọn àkọsílẹ̀, nínú àwọn ìlànà client-config-dir tàbí nínú ìtẹ̀ mílẹ́lẹ́fọ̀nù fún olùlò kankan, àti pé ìwọ yóò pàdánù ìfàsí tí ń jẹ́ kí ìpinnu ìfagilé lè dáàbò bo. Fún ewé jáde kí o sì ṣàyẹ̀wò rẹ̀ báyìí:

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

Pa kọ́kọ́rọ́ ìfọwọ́sí mọ́ lẹ́yìn ààlà ìlànà dípò kíkó rẹ̀ sórí ẹ̀rọ VPN: iṣẹ́ kékeré tó ń ṣàyẹ̀wò ìbéèrè, tó ń wo orúkọ gbogbogbò lòdì sí àkójọ àwọn tí a gbà, tó sì ń da ẹ̀rí nìkan padà. Kọ gbogbo nọ́mbà ṣíríà; àkọsílẹ̀ ni ìsopọ̀ kan ṣoṣo láàrin ẹ̀rí àti ẹni tó béèrè fún un.

Tẹ ìfagilé jáde láìjẹ́ kí gbòǹgbò jí

CA àárín ni ó ń fagilé àwọn ẹ̀rí oníbàárà, kì í ṣe gbòǹgbò rárá. Àkójọ gbòǹgbò ṣe pàtàkì nìkan nígbà tí a bá sun CA àárín kan. Darí olùsìn sí àkójọ àárín pẹ̀lú crl-verify. CRL tó dá lórí fáìlì ni a ń gbé wọlé nígbà tí iṣẹ́ bẹ̀rẹ̀, nítorí náà tún un gbé wọlé lẹ́yìn ìṣẹ̀dá tuntun kọ̀ọ̀kan; irú àkójọ ìkójọpọ̀ ń ka ipò ní àkókò ìsopọ̀, ó sì ń ná fáìlì kan fún nọ́mbà ṣíríà kọ̀ọ̀kan.

Fagilé kí o sì ṣẹ̀dá tuntun pẹ̀lú àṣẹ méjì láti inú dátàbésì kan 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

Lẹ́yìn náà wo agogo. CRL ń gbé pápá ìmúdójúìwọ̀n tó kàn, àti nígbà tí ọjọ́ yẹn bá kọjá, ẹni tó ń ṣàyẹ̀wò yóò kọ̀ àkójọ náà dípò kí ó fojú fo. Ìṣẹ̀dá tuntun oṣooṣù pẹ̀lú default_crl_days = 30 ń fi ààyè sílẹ̀; ti ọdọọdún kò fi sílẹ̀. Ìgbésí ayé ewé kúkúrú ni ìṣàkóso tó gbẹ́kẹ̀lé jù, nítorí ìfagilé ń ṣiṣẹ́ nìkan níbi tí a ti ń wo àkójọ náà.

Dán ẹ̀wọ̀n náà wò, lẹ́yìn náà kọ ààtò náà sílẹ̀

Ṣe àfarawé àwọn ìkùnà mẹ́rin kí o tó gbẹ́kẹ̀lé àwòrán náà. Ṣàyẹ̀wò ẹ̀wọ̀n náà pẹ̀lú openssl verify -CAfile ca-bundle.crt -untrusted intermediate.crt server.crt. Sopọ̀ pẹ̀lú ẹ̀rí oníbàárà tó ti parí, kí o sì jẹ́rìí pé olùsìn kọ̀ ọ́. Fagilé oníbàárà ìdánwò kan, tún gbé wọlé kí o sì jẹ́rìí pé àkójọ náà wúlò. Gbé agogo ẹ̀rọ kan síwájú ọjọ́ kan, nítorí agogo tí kò tọ́ lè fún àwọn ẹ̀rí jáde tí ó sì kọ̀ wọ́n bí wọ́n ti lè dàbí ẹni tó wúlò níbòmíràn.

Gbòǹgbò àìsí nẹ́tíwọ́kì jẹ́ ìṣàkóso nìkan bí ìwé bá wà: ènìyàn méjì tí a dárúkọ fún ààtò náà, àkọsílẹ̀ gbogbo nọ́mbà ṣíríà tí a fi ọwọ́ sí, àdàkọ ààbò tí a fi ààmì ìkọ̀kọ̀ pamọ́ tí a gbé lọ́tọ̀ kúrò lórí ẹ̀rọ, àti ìdánwò ìmúpadà lórí ẹ̀rọ àdàkà. Fi ọwọ́ sí àárín àfisílẹ̀ nínú ààtò kan náà kí ẹ̀rọ ìfọwọ́sí tó ti kú má bàa fipá mú ọ láti ṣí gbòǹgbò ní ọ̀gànjọ́.

Kí o tó pè é ní parí, jẹ́rìí àwọn ohun márùn-ún: kọ́kọ́rọ́ gbòǹgbò kò sí lórí ẹ̀rọ tó so mọ́ nẹ́tíwọ́kì, kọ́kọ́rọ́ àárín ń gbé nìkan lórí ẹ̀rọ ìfọwọ́sí, àkójọ oníbàárà ń gbé àwọn ẹ̀rí CA méjèèjì, CRL ní ìmúdójúìwọ̀n tó kàn lọ́nà ọjọ́ iwájú, àti pé ẹnìkan ní àkọsílẹ̀ kàlẹ́ńdà fún gbogbo ìparí nínú ẹ̀wọ̀n náà. Bí ọ̀kan bá ṣẹ́ kù, ètò tó dàbí àìsí nẹ́tíwọ́kì kò jẹ́ ní kọ̀wé nìkan.

Àwọn àpilẹ̀kọ tó jọra