برای تمرین HTTPS نباید بررسی اعتماد را خاموش کنیم. امشب یک CA محلی، یعنی مرجع صدور گواهی، می‌سازیم و گواهی با نام‌های واقعی lab صادر می‌کنیم.

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

محیط: OpenSSL 3 روی کلاینت .20؛ ساعت درست. کلید CA فقط روی این ماشین می‌ماند.

صدور محدود برای آزمایشگاه#

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

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

فایل web.ext:

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

SAN نام‌های معتبر گواهی را تعیین می‌کند. CN به‌تنهایی جای بررسی SAN را نمی‌گیرد. این CA کوچک دفتر صدور و ابطال عملیاتی ندارد.

انتقال و آزمون#

با SSH، فقط web.key، web.crt و ca.crt را به ~/nginx-lab/pki وب‌سرور بفرست. فایل عمومی ca.crt را در همین مسیر روی .21 و edge نیز قرار بده؛ خطای اعتماد نباید با رد دسترسی اشتباه شود. کلید CA منتقل نمی‌شود.

بازگشت و تمرین: گواهی قبلی را نگه دار و یک نام خارج از SAN را در شب بعد امتحان کن؛ باید بررسی نام شکست بخورد. ریشهٔ CA را بی‌دلیل در trust store سراسری نصب نکن.

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