انجیناکس؛ شب ۱۹: mTLS و گواهی کلاینت
فهرست نوشته
TLS معتبر هویت سرور را میسنجد؛ mTLS هویت کلاینت را هم وارد handshake میکند. امشب یک میزبان خصوصی با گواهی کلاینت و محدودیت IP میسازیم.
این جلسه بخشی از دورهٔ انجیناکس در ۵۰ شب است. قرارداد آزمایشگاه، مسیرها و روال اعمال تغییر در راهنمای دوره آمده است.
محیط: CA شب یازدهم، میزبان admin.nginx.test با پایهٔ کامل TLS شب دوازدهم؛ گواهی سرور این نام را دارد.
گواهی با کاربرد درست#
در پوشهٔ PKI کلاینت، CSR و کلید مستقل بساز:
umask 077
openssl req -new -newkey rsa:3072 -noenc -keyout client.key \
-out client.csr -subj '/CN=labreader'
فایل client.ext:
basicConstraints=critical,CA:FALSE
keyUsage=critical,digitalSignature
extendedKeyUsage=clientAuth
با همان CA و serial موجود شب یازدهم امضا کن:
openssl x509 -req -in client.csr -CA ca.crt -CAkey ca.key \
-CAserial ca.srl -days 7 -sha256 -extfile client.ext -out client.crt
openssl verify -CAfile ca.crt -purpose sslclient client.crt
کلید و گواهی کلاینت روی کلاینت میمانند؛ private key را در config Nginx نصب نکن.
در server خصوصی:
ssl_client_certificate /etc/nginx/tls/ca.crt;
ssl_verify_client on;
ssl_verify_depth 1;
allow 192.168.57.20;
deny all;
root و try_files سایت ثابت را نیز داشته باش. گواهی CA پذیرفتهشده اعتبار هویت میدهد، ولی خودکار نقش مدیر برنامه نمیسازد. نگاشت هویت به نقش را برنامه یا دروازهٔ احراز هویت باید اجرا کند؛ تنها یک CN عمومی جای authorization نیست.
curl --cacert ca.crt --cert client.crt --key client.key \
--resolve admin.nginx.test:443:192.168.57.10 https://admin.nginx.test/
از پوشهٔ PKI اجرا کن. بدون گواهی و با گواهی serverAuth باید دسترسی رد شود. برای سنجش IP از ماشین دیگر، credential معتبر لازم است تا علت شکست واقعاً شرط شبکه باشد.
بازگشت: میزبان خصوصی را غیرفعال؛ www عمومی نباید mTLS را به ارث گرفته باشد. برای ابطال عملیاتی CA دارای دفتر صدور و CRL تازه لازم است؛ ssl_crl بدون تولید و آزمون CRL واقعی، ابطال ایجاد نمیکند.
منبع: تأیید کلاینت در HTTP SSL .