آپاچی؛ شب ۲۱: mTLS و گواهی کلاینت برای ورودی خصوصی
فهرست نوشته
در TLS معمولی فقط هویت سرور بررسی میشود. mTLS یا TLS متقابل گواهی کلاینت را هم بررسی میکند. امشب یک میزبان مدیریتی جدا میسازیم و اعتبار گواهی را از مجوز دسترسی تفکیک میکنیم.
این جلسه بخشی از دورهٔ آپاچی در ۵۰ شب است. قرارداد نامها، مسیرها و روش اعمال تغییر را در راهنمای دوره بخوان.
محیط: CA شب یازدهم روی .20؛ میزبان جدید admin.example.test روی وبسرور. CA و رمزهای آن خصوصی بمانند.
گواهی با کاربرد clientAuth#
در پوشهٔ PKI کلاینت:
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
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
گواهی و کلید کلاینت روی کلاینت میمانند. با الگوی کامل شب دوازدهم یک VirtualHost جدا برای admin.example.test بساز؛ نام در SAN گواهی سرور موجود است. داخل آن اضافه کن:
SSLCACertificateFile /etc/apache-lab/tls/ca.crt
SSLVerifyClient require
SSLVerifyDepth 1
<Location />
<RequireAll>
Require ip 192.168.56.20
Require expr "%{SSL_CLIENT_S_DN_CN} == 'labreader'"
</RequireAll>
</Location>
در این آزمایش صادرکننده نام یکتای labreader را تضمین میکند. محیط عملیاتی به CA اختصاصی کلاینت، نگاشت هویت قابل اتکا، چرخهٔ صدور و ابطال نیاز دارد؛ پذیرش هر گواهی از یک CA، نقش مدیر ایجاد نمیکند.
آزمون مثبت و منفی#
curl --cacert ca.crt --cert client.crt --key client.key \
--resolve admin.example.test:443:192.168.56.10 https://admin.example.test/
از همان پوشه اجرا کن. درخواست بدون --cert و --key باید پیش از دسترسی به محتوا شکست بخورد. گواهی سرور با کاربرد serverAuth را بهعنوان کلاینت امتحان کن؛ نباید پذیرفته شود. آزمون از IP دیگر نیز باید policy را نقض کند.
بازگشت: میزبان خصوصی را غیرفعال کن؛ سایت عمومی نباید mTLS را به ارث گرفته باشد. این CA کوچک CRL تولید نمیکند؛ قبل از ادعای ابطال عملیاتی، CA مناسب و تنظیمهای SSLCARevocationFile و SSLCARevocationCheck را همراه آزمون گواهی ابطالشده پیاده کن.
منبع: احراز هویت کلاینت TLS ، کنترل ابطال در mod_ssl .