Ինչպես ստեղծել VPN հաճախորդի բանալի և CSR ներկայացնել ստորագրման
Պահեք մասնավոր բանալին հաճախորդի մոտ և ուղարկեք միայն հարցումը։ Ստուգեք CSR-ը, հաստատեք ինքնությունը, ստորագրեք հստակ ընդլայնումներով, ապա հաստատեք զույգը։
Վաղ թե ուշ VPN-ի օգտատերն առաջարկում է մասնավոր բանալին ուղարկել էլփոստով, որպեսզի ադմինիստրատորը վկայագիր ստեղծի, և հենց այդ առաջարկն է, որ պետք է մերժել։ Աշխատունակ ընթացքը բանալին պահում է հաճախորդի մոտ առաջին հրամանից՝ հաճախորդը ստեղծում է այն, ուղարկում է վկայագրի ստորագրման հարցում, թողարկողը ստուգում և լիազորում է այն, և ստորագրված վկայագիրը վերադառնում է՝ նստելու այն բանալու կողքին, որը ստեղծել է այն։ Ստորև բերված ստուգաթերթը յուրաքանչյուր քայլում փակված ձևով ձախողվում է, և դա է իմաստը, որովհետև հինգ քայլից երկուսը հենց այն քայլերն են, որոնք մարդիկ բաց են թողնում, երբ շտապում են։
Քայլ 1: ստեղծեք բանալին այնտեղ, որտեղ այն կապրի
Ստեղծեք այն մեքենայում, որը կպահի բանալին, և թողեք այն այնտեղ։ Ծրագրային բանալին գրվում է խիստ թույլտվություններով ֆայլի մեջ՝ սարքաշարով ապահովված կամ կառավարվող պահոցում գտնվող բանալին երբեք ֆայլ չի դառնում, և դրա գրանցման ուղին սովորաբար առանձին գործիք է, այլ ոչ OpenSSL հրաման։ Երկու դեպքում էլ ոչ ոքի պետք չէ տեսնել մասնավոր կեսը։
Ծրագրային ընթացքն այսպիսի տեսք ունի՝ բանալին և հարցումը ստեղծվում են մեկ նստաշրջանում:
umask 077
openssl genpkey -algorithm RSA -pkeyopt rsa_keygen_bits:3072 -out client.key
openssl req -new -key client.key -out client.csr -subj "/CN=alice-vpn/O=Example"umask տողն ավելի կարևոր է, քան թվում է։ Առանց դրա բանալին գրվում է բոլորի համար ընթեռնելի լռելյայն թույլատրող համակարգում, և ֆայլը հետո պատճենելը տարածում է դա։ Գոյություն ունեցող բանալու վերաօգտագործումը օրինական է, երբ այն արդեն պաշտպանված է և համապատասխանում է ձեր քաղաքականությանը՝ սարքերի համար նորը ստեղծելն ավելի հեշտ է հիմնավորել։
Քայլ 2: ինքնությունը դրեք հարցման մեջ, ոչ էլփոստում
Որոշեք, թե VPN-ն իրականում ինչն է վավերացնում, մինչև հարցումը ստեղծվելը, որովհետև այդ պատասխանը պատկանում է CSR-ի ներսում։ OpenVPN ավանդաբար հաճախորդի ինքնությունը կապում է վկայագրի ընդհանուր անվան հետ, և strongSwan-ի նման գործիքները ինքնության տողը համեմատում են սուբյեկտի կամ սուբյեկտի այլընտրանքային անվան հետ։ Էլփոստը, որն ասում է՝ իմ անունը alice է, ապացույց չէ, և հարցումը, որի սուբյեկտն ասում է նույնը, միայն մի փոքր ավելի լավն է։
Ավելացրեք սուբյեկտի այլընտրանքային անուն, երբ ձեր ստուգիչը մեկը ստուգում է, քանի որ ժամանակակից համեմատությունը հաճախ անտեսում է հին CN-ը:
openssl req -new -key client.key -out client.csr \
-subj "/CN=alice-vpn/O=Example" \
-addext "subjectAltName=DNS:alice-vpn"Պահեք CN-ը կարճ, կայուն և կապված հաշվին, այլ ոչ թե նոթբուքի մոդելին։ Օգտատիրոջ սարքի սերիական համարը պարունակող անունը աջակցության խնդիր է, որը սպասում է առաջին սարքաշարի փոխարինմանը։
Քայլ 3: ստուգեք հարցումը մինչև ստորագրելը
Թողարկողը ստուգում է երկու տարբեր բան, և դրանք իրար խառնելը դասական սխալն է։ Առաջին՝ որ հարցումը ներքուստ համահունչ է՝ ստորագրությունը ստուգվում է իր կրած հանրային բանալու դեմ։ Երկրորդ՝ որ դիմորդն իրավասու է այն բանին, ինչ հարցումը պահանջում է, և դրան ոչ մի գաղտնագրային ստուգում չի կարող պատասխանել։
Մեխանիկական մասը մեկ հրաման է, և այն պետք է տպի ստուգման արդյունքը սուբյեկտի հետ միասին:
openssl req -in client.csr -noout -verify -subject
openssl req -in client.csr -noout -pubkey | openssl pkey -pubin -noout -textՈւշադրություն դարձրեք, թե ինչ է դա ապացուցում։ Ստուգված հարցումը ցույց է տալիս միայն, որ ուղարկողը ներկայացման պահին ունեցել է համապատասխան մասնավոր բանալին՝ այն չի ապացուցում, որ ուղարկողը սուբյեկտում նշված անձն է, և չի լիազորում պահանջվող խմբի կամ երթուղու հասանելիությունը։ Գրանցման վերանայումը առանձին դարպաս է, և խմբի հարցումը, որը ոչ ոք չի հաստատել, պետք է մերժվի, այլ ոչ թե լուռ խմբագրվի։
Քայլ 4: լիազորեք, ապա ստորագրեք հստակ ընդլայնումներով
Ստորագրումը այն տեղն է, որտեղ CA-ն որոշում է քաղաքականությունը՝ հարցումը բառացի ընդունելու փոխարեն։ Վավերականությունը, բանալու օգտագործումը և դերի ընդլայնումը պատկանում են ընդլայնումների ֆայլին, այլ ոչ լռելյայն արժեքներին, որոնք վեց ամիս անց չեք հիշի։ VPN-ի վավերացման հաճախորդի վկայագրին որպես նպատակ պետք է հաճախորդի վավերացում։
cat > client.ext <<'EOF'
basicConstraints = CA:FALSE
keyUsage = digitalSignature
extendedKeyUsage = clientAuth
EOF
openssl x509 -req -in client.csr -CA ca.crt -CAkey ca.key \
-CAcreateserial -days 365 -extfile client.ext -out client.crtՕգտագործեք -CAserial-ը գոյություն ունեցող սերիական ֆայլի հետ, եթե մեկն արդեն օգտագործվում է, և պահեք CA-ի բանալին անցանց կամ ձեր քաղաքականության անվանած պաշտպանված պահոցում։ Վկայագրերի սերիական համարները պետք է եզակի լինեն յուրաքանչյուր թողարկողի համար, և սերիական ֆայլը զրոյից վերստեղծելը ռիսկի է ենթարկում բախումներ, որոնք երկիմաստ են դարձնում չեղարկումը։
Գրանցեք, թե ինչ է թողարկվել՝ սերիական համար, սուբյեկտ, պահանջված ինքնություն, հաստատող անձ և ժամկետ։ Այդ գրառումն է, որի վրա հետագայում հիմնվում է չեղարկման որոշումը, և այն հնարավոր չէ վերականգնել միայն վկայագրից, եթե գրանցման հետքը ապրում է միայն փոստարկղում։
Քայլ 5: տեղադրեք այն համապատասխան բանալու կողքին և ապացուցեք զույգը
Հաճախորդը ստանում է վկայագիրը և թողարկողի շղթան, երբեք բանալի։ Միանալուց առաջ հաստատեք, որ վկայագիրն իրոք զույգ է կազմում սկավառակի վրա արդեն եղած բանալու հետ, որովհետև անհամապատասխան զույգը շատ ավելի ուշ ստեղծում է շփոթեցնող ձեռքսեղմման ձախողում:
openssl x509 -in client.crt -noout -pubkey | openssl pkey -pubin -outform DER | openssl sha256
openssl pkey -in client.key -pubout -outform DER | openssl sha256Երկու մարսողությունները պետք է համընկնեն։ Այնուհետև միացեք և հաստատեք, որ սերվերի գրանցած ինքնությունը ձեր լիազորածն է, և ոչ թե պարզապես այն, որ թունելը բարձրացավ։ Եթե բանալին կորչի կամ սարքը փոխարինվի, պատասխանը չեղարկումն է՝ գումարած նոր հարցում նոր սարքից, իսկ ադմինիստրատորից այլ տեղից բանալի հետ ուղարկել խնդրելը չի վերականգնում բնօրինակը և լուռ կոտրում է այն մոդելը, որ հարցումը դարձնում էր անվտանգ։