HTTPS فقط رمزنگاری نیست؛ کلاینت باید هویت سرور را هم بررسی کند. امشب یک مرجع صدور گواهی کوچک می‌سازیم تا آزمایش‌ها بدون خاموش کردن بررسی اعتماد انجام شوند.

این جلسه بخشی از دورهٔ آپاچی در ۵۰ شب است. قرارداد نام‌ها، مسیرها و روش اعمال تغییر را در راهنمای دوره بخوان.

محیط: OpenSSL روی کلاینت .20؛ این ماشین محل CA است، نه وب‌سرور. ساعت هر دو ماشین درست باشد.

ساخت مرجع و گواهی سرور#

CA یا Certificate Authority گواهی سرویس را امضا می‌کند. فایل کلید CA باید فقط در ماشین صادرکننده بماند:

mkdir -p ~/apache-lab/pki
cd ~/apache-lab/pki
umask 077
openssl req -x509 -newkey rsa:3072 -sha256 -days 365 \
  -keyout ca.key -out ca.crt -subj '/CN=Apache Lab Root' \
  -addext 'basicConstraints=critical,CA:TRUE' \
  -addext 'keyUsage=critical,keyCertSign,cRLSign'
openssl req -new -newkey rsa:3072 -noenc -keyout www.key \
  -out www.csr -subj '/CN=www.example.test'

فرمان اول برای کلید CA گذرواژه می‌خواهد. www.key برای شروع خودکار سرویس بدون گذرواژه ساخته می‌شود؛ حفاظت آن به مجوز فایل وابسته است. در کار واقعی، کلید و درخواست CSR را روی سرور مقصد بساز و فقط CSR را برای امضا منتقل کن.

فایل www.ext را با این محتوا بساز:

basicConstraints=critical,CA:FALSE
keyUsage=critical,digitalSignature,keyEncipherment
extendedKeyUsage=serverAuth
subjectAltName=DNS:www.example.test,DNS:app.example.test,DNS:wp.example.test,DNS:admin.example.test
openssl x509 -req -in www.csr -CA ca.crt -CAkey ca.key \
  -CAcreateserial -days 30 -sha256 -extfile www.ext -out www.crt
openssl verify -CAfile ca.crt -purpose sslserver www.crt
openssl x509 -in www.crt -noout -dates -ext subjectAltName

SAN یا Subject Alternative Name نام‌های معتبر گواهی را مشخص می‌کند. موفقیت verify زنجیره و کاربرد را می‌سنجد؛ بررسی نام را در درخواست TLS هم انجام می‌دهیم. این نمونهٔ آموزشی دفتر صدور و سازوکار ابطال یک CA عملیاتی را ندارد.

تحویل محدود#

فقط www.key، www.crt و ca.crt را با SSH و حساب واقعی خودت به ~/apache-lab/pki روی وب‌سرور منتقل کن. کلید ca.key منتقل نمی‌شود. فایل عمومی ca.crt را در همین مسیر روی کلاینت .21 و edge .40 نیز بگذار تا آزمون منفی بعدی به‌جای خطای اعتماد، واقعاً policy دسترسی را بسنجد. برای دو VM آزمایشگاهی می‌توان از همین گواهی استفاده کرد؛ در محیط کاری برای هر سرور کلید مستقل بساز.

تمرین: یک نام حذف‌شده از SAN را در درخواست شب بعد امتحان کن؛ باید بررسی نام شکست بخورد. برای بازگشت، Snapshot و مجموعهٔ پیشین گواهی را حفظ کن؛ ریشهٔ CA را بی‌دلیل در اعتماد سراسری سیستم نصب نکن.

منبع: openssl req ، افزونه‌های X.509 .