Таны 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 сертификат бүхий багц илгээ; зөвхөн навч үндсийн эсрэг баталгаажихгүй.

Навчнуудыг завсрын 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 дүрэмд эсвэл хэрэглэгч тус бүрийн push-д ялгагдахгүй, мөн та цуцлалтын шийдвэрийг хамгаалах боломжтой болгодог хуваарилалтыг алдана. Навчийг ингэж гаргаж, шалга:

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 хост руу хуулахын оронд бодлогын хил хязгаарын ард байлга: хүсэлтийг баталгаажуулж, нийтлэг нэрийг зөвшөөрөгдсөн жагсаалттай харьцуулж, зөвхөн сертификатыг буцаадаг жижиг үйлчилгээ. Серийн дугаар бүрийг бүртгэ; ллог бол сертификат ба түүнийг хүссэн хүний хоорондын цорын ганц холбоос.

Үндсийг сэрээхгүйгээр цуцлалтыг нийтэл

Клиент сертификатуудыг завсрын CA цуцалдаг, хэзээ ч үндэс биш. Үндсэн жагсаалт зөвхөн завсрын CA шатсан үед чухал. Серверийг 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-д гарын үсэг зур, ингэснээр үхсэн гарын үсгийн хост шөнө дунд үндсийг онгойлгохыг шаардахгүй.

Үүнийг дууссан гэж нэрлэхийн өмнө таван зүйлийг батал: үндсэн түлхүүр сүлжээнд холбогдсон хост дээр байхгүй, завсрын түлхүүр зөвхөн гарын үсгийн хост дээр амьдардаг, клиентийн багц хоёр CA сертификатыг агуулдаг, CRL-д ирээдүйн дараагийн шинэчлэлт байгаа, гинжин дэх дуусах хугацаа бүрт хэн нэгэн календрын бичлэгтэй. Нэг нь дутуу бол офлайн мэт харагдах тохиргоо зүгээр л баримтжуулаагүй юм.

Холбоотой нийтлэлүүд