توجه: از این آموزش میتوانید در سیستم های عامل debian و centos و freebsd استفاده کنید.
گاهی اوقات برای امنیت بیشتر وب سرور و کاربرانمان در سرویس های حساس نیاز داریم تا کاربران با استفاده از یک certificate به وب سرور ما لاگین کنند و احراز هویت شوند.
برای درک بهتر موضوع به تصویر زیر دقت کنید.
با توجه به تصور ما نیاز به قسمت های مختلف برای راه اندازی این سامانه داریم که در زیر به بیان آنها می پردازیم.
- راه اندازی Certificate Authority (برای امضا کردن certificate کاربران)
- صادرکردن certificate و key مربوط به کاربر
- تنظیم nginx برای استفاده از آن
- اضافه کردن certificate کاربر در مرورگر
با توجه به این موارد شروع به توضیح هر کدام از بخش ها بصورت جداگانه میکنیم .
- راه اندازی Certificate Authority (CA)
برای راه اندازی CA از ابزار پیشفرض لینوکس یعنی openssl استفاده میکنیم .
نکته: مسیر پیسفرض ذخیره certificate ها در لینوکس /etc/ssl می باشد ولی برای تمیزکاری و درک بهتر ما مسیر جداگانه ای برای این کار در سیستم ایجاد میکنیم.
ابتدا با استفاده از دستور زیر اقدام به ایجاد مسیر جداگانه برای ذخیره فایل های CA خود میکنیم .
mkdir –p /data/nowlearn.ir/CA
حالا یک کپی از تنظیمات مربوط به openssl را با تفاده از دستور زیر در مسیر ساخته شده بالا قرار میدهیم.
Cp /etc/ssl/openssl.cnf /data/nowlearn.ir/CA
حالا فایل openssl.cnf را با ویرایشگر محبوبان باز میکنیم و سکشن CA_default را مانند زیر ویرایش میکنیم .
[ CA_default ]
dir = ./demoCA # Where everything is kept
certs = $dir/certs # Where the issued certs are kept
crl_dir = $dir/crl # Where the issued crl are kept
database = $dir/index.txt # database index file.
#unique_subject = no # Set to ‘no’ to allow creation of
# several ctificates with same subject.
New_certs_dir = $dir/newcerts # default place for new certs.
Certificate = $dir/cacert.pem # The CA certificate
serial = $dir/serial # The current serial number
crlnumber = $dir/crlnumber # the current crl number
# must be commented out to leave a V1 CRL
crl = $dir/crl.pem # The current CRL
private_key = $dir/private/cakey.pem# The private key
RANDFILE = $dir/private/.rand # private random number file
x509_extensions = usr_cert # The extentions to add to the cert
# Comment out the following two lines for the “traditional”
# (and highly broken) format.
Name_opt = ca_default # Subject Name options
cert_opt = ca_default # Certificate field options
# Extension copying option: use with caution.
# copy_extensions = copy
# Extensions to add to a CRL. Note: Netscape communicator chokes on V2 CRLs
# so this is commented out by default to leave a V1 CRL.
# crlnumber must also be commented out to leave a V1 CRL.
# crl_extensions = crl_ext
default_days = ۳۶۵ # how long to certify for
default_crl_days= 30 # how long before next CRL
default_md = default # use public key default MD
preserve = no # keep passed DN ordering
# A few difference way of specifying how similar the request should look
# For type CA, the listed attributes must be the same, and the optional
# and supplied fields are just that J
policy = policy_match
توجه داشته باشید که دایرکتوری هایی که در ابتدای فایل تنظیمات است بصورت متغییر تعریف شده و در همان جایی هستند که فایل openssl.cnf را از آن میخوانیم و به آن آدرس دهی میکنیم. برای مثال اگر فایل openssl.cnf در مسیر /data/nowlearn.ir/CA باشد، مسیر دایرکتوری certs بصورت /data/nowlearn.ir/CA/certs میشود.
نکته: شما میتوانید از مسیرهای تنظیم شده در فایل فوق را تغییر دهید ولی توصیخ میشود که از اسم ها و مسیرهای پیشفرض فایل استفاده کنید.
حالا باید به استفاده از دستورات زیر دایرکتوریهای مورد نظرمان که در فایل کانفیک آمده است را بسازیم.
Cd /data/djouxtech/CA
mkdir certs crl newcerts private
توجه: Certificate Revocation List یا به اختصار crl با استفاده از متغییر زیر تعیین میشود.
Crl = $dir/crl.pem # The current CRL
ما در اینجا ۳ فایل مهم داریم.
Database = $dir/index.txt # database index file.
Serial = $dir/serial # The current serial number
crlnumber = $dir/crlnumber # the current crl number
که با استفاده از دستورات زیر اقدام به ایجاد این فایل ها در سیستم میکنیم .
touch index.txt
echo 01 > serial
echo 01 > crlnumbe
تا اینجای کار ما زیر ساخت های مورد نیازمان برای ساختن کلید خصوصی و عمومی CA را ایجاد کرده ایم.
حالا نوبت به ساختن کلید خصوصی و کلید عمومی CA میشود که با متغییرهای زیر در فایل تنظیمات openssl.cnf مشخص شده اند.
Certificate = $dir/cacert.pem # The CA certificate
private_key = $dir/private/cakey.pem # The private key
در مرحله اول باید کلید خصوصی CA را بسازیم. برای این منظور دستور زیر را وارد میکنیم .
openssl genrsa –des3 –out /data/nowlearn.ir/CA/private/cakey.pem 4096
توجه داشته باشید که برای کلید خصوصی CA یک کلمه عبور قوی انتخاب کنید و سپس با استفاده از دستور زیر دسترسی های آن را به صاحب فایل محدود کنید.
Chmod 400 /data/nowlearn.ir/CA/private/cakey.pem
در مرحله بعدی نوبت به ایجاد کلید عمومی CA با استفاده از کلید خصوصی که ساخته ایم میرسد.
برای این منوظر دستور زیر را اجرا میکنیم .
openssl req –new –x509 –key private/cakey.pem –out certs/cacert.pem –days 3650 –set_serial 0
نکته: از آنجایی که ما این CA را برای آموزش درست میکنیم عمر certificate آن را به اندازه ۱۰ سال یا ۳۶۵۰ تنظیم کرده ایم. اگر شما میخواهید از این آموزش جهت راه اندازی CA عملیاتی استفاده کنید از عددهای به مراتب پایین تر برای ساختن کلید عمومی CAتان استفاده کنید.
بعد از اینکه اجرا دستور بالا تمام شد، کار ساخت کلید عمومی CA به پایان رسیده است.
نکته: از آنجایی ما در حال راه اندازی CA هستیم باید تمام سرویتفیکیت هایی که با این CA امضا میشوند را در فایل crl که در تنظیمات آن را معرفی کردیم وارد کنیم. برای این منظور دستور زیر را اجرا میکنیم .
openssl ca –name CA_default –gencrl \
-keyfile /data/nowlearn.ir/CA/private/cakey.pem \
-cert /data/nowlearn.ir/CA/certs/cacert.pem \
-out /data/nowlearn.ir/CA/crl/ca.crl \
-config /data/nowlearn.ir/CA/openssl.cnf
نکته: با توجه به تنظیمات پیشفرض سیستم crl هر ۳۰ روز یک بار منقضی میشود. از آنجایی که سرتیفیکیت های امضا شده ما قالبا یک ساله هستند شما میتوانید با اضافه کردن سوییچ زیر در دستور بالا این زمان را تغییر دهید.
-crldays 360
نکته: برای تغییر زمان منقضی شدن crl شما میتوانید مقدار خط default_crl_days را در فایل تنظیمات openssl.cnf ویرایش کنید.
نکته: تنظیمات شما در تمام مراحل انجام کار باید یکی باشد.