دریافت گواهینامهی SSL رایگان و فعال سازی روی Nginx
سلام
برای ایجاد ارتباطی امن بین کلاینت ها و سرورتون، باید از SSL استفاده کنید. گاهی وقت ها مجبورید برای استفاده از خدماتی خاص، SSL رو برای اون دامین بخصوص فعال کنید، بعنوان مثال برای ارتباط با درگاه های بانکی خاص یا ساخت روبات تلگرام.
برای اینکار باید گواهینامهی SSL (یا SSL Certificate) رو از سایت های معتبری که این خدمات رو ارائه میدن تهیه کنید، که بدون هزینه هم نخواهد بود.
در این بین سایت هایی هستند که این خدمات رو بصورت رایگان ارائه میدن، یکی از این سایت ها StartSSL هست که این مجوز رو بصورت رایگان به شما میده (گمان میکنم برای سال اول رایگان هست)
البته توجه داشته باشید که دامنه ی ir رو پشتیبانی نمیکنن و برای این دامین SSL رایگان ارائه نمیدن.
در این پست قصد دارم مراحل تهیه ی SSL و فعال سازی برای اون دامین رو روی یک سرور لینوکسی و تحت وب سرور Nginx اموزش بدم.
در این آموزش قصد داریم تنها برای یک دامین (دامین اصلی، و نه دامین و همه ی زیر دامنه ها) مجوز SSL دریافت کنیم و وب سرور NginX رو تنظیم کنیم تا برای این دامین خاص SSL رو فعال کنه.
دامین رو example.com در نظر میگیریم. سرور هم یک سرور لینوکسی خواهد بود (در این مثال Ubuntu اما تفاوتی در توزیع های مختلف وجود نداره)
عملیاتی که قراره انجام بدیم (سرفصل ها):
- تولید کلید خصوصی بر روی سرور
- Verify کردن دامین در سایت StartSSL
- استفاده از CSR منطبق با کلید تولید شده برای تولید مجوز معتبر برای دامین
- کانفیگ کردن NginX برای فعال سازی SSL بر روی دامین
- Decrypt کردن Key بر روی سرور، که باعث می شود با هر بار ریبوت سرور یا NginX نیازی به وارد کردن پسورد کلید نباشد
- منابع
نکته: دستوراتی که اجرا می کنیم نیاز به دسترسی root
دارن، فرض ما بر این هست که با یوزر روت وارد شدید، اگر غیر این هست قبل از دستورات sudo
رو اضافه کنید.
نکته: در این آموزش از دامین فرضی www.example.com
استفاده شده، در تمام مراحل دامین خودتون رو جایگزین این دامین کنید
تولید کلید خصوصی بر روی سرور
با SSH به سرور لاگین کنید، می تونید کلید رو در هر مکان امنی در سرور نگهداری کنید، برای این آموزش مسیر /etc/cert/
رو انتخاب کردم.
وارد این مسیر میشیم:
برای تولید کلید از ابزار openssl
استفاده می کنیم.
توجه کنید که بهتره که نام دامین رو همراه با www ابتدا وارد کنید (چه در این کد و چه در سایت StartSSL)، با اینکار مجوزی که تولید میشه هم با www و هم بدون www ابتدا معتبر هست
در این مرحله، اطلاعاتی ازتون گرفته میشه که در مجوز لحاظ میشه
بعنوان مثال:
State or Province Name (full name) [Some-State]:Tehran
Locality Name (eg, city) []:Tehran
Organization Name (eg, company) [Internet Widgits Pty Ltd]:My Company
Organizational Unit Name (eg, section) []:
Common Name (e.g. server FQDN or YOUR name) []:www.example.com
Email Address []:you@gmail.com
مهمترین بخشی که باید بهش توجه کنید، Common Name هست که باید همون آدرسی باشه که می خواید براش مجوز دریافت کنید.
پسوردی که تو این مرحله ازتون خواسته میشه رو به یاد داشته باشید، در مراحل بعد بهش نیاز داریم
بعد از اینکه اطلاعات لازم رو وارد کردید، دو فایل .key
و .csr
تولید میشه.
فایل .key
همون کلید خصوصی هست که باید ازش حفاظت بشه.
فایل .csr
حاوی اطلاعاتی هست که در مرحله ی تولید مجوز در سایت (شرکتی که ازش مجوز مییرید) وارد می کنیم و بر اساس این اطلاعات مجوز برامون ساخته میشه.
Verify کردن دامین در سایت StartSSL
تو سایت StartSSL ثبت نام و لاگین کنید. یادتون باشه که تو این سایت پسوردی برای اکانت تعریف نمی کنید، هربار که قصد وارد شدن دارید ایمیلتون رو وارد می کنید و یه ایمیل حاوی یه کلید یکبارمصرف براتون فرستاده میشه که با اون لاگین می کنید.
وقتی لاگین کردین، وارد بخش Validation Wizard بشید:
گزینه ی Domain Validation رو انتخاب کنید و Continue رو بزنید
دامین رو وارد کنید
تو این صفحه، دامین رو چک می کنه و تعدادی ایمیل رو میاره، اگه تو تنظیمات دامین هنگام ثبت ایمیلی رو وارد کرده باشید، اون رو هم تو لیست میاره.
هدف اینه که یکی از ایمیل ها رو انتخاب کنید (ایمیلی که بهش دسترسی دارید)، StartSSL یک ایمیل حاوی کد رو برای اون ایمیل می فرسته و پس از دریافت تو کادر پایین واردش می کنید.
اینجوری تایید می کنه که صاحب دامین هستین
اگه همه چی خوب پیش بره، با همچین صفحه ای روبرو میشین (مسلماً چون من به دامین example.com دسترسی ندارم، از یه دامین دیگه واسه این مرحله استفاده کردم تا تایید بشه)
این یعنی دامین شما تایید شده و میتونید براش مجوز درخواست کنید. روی To "Order SSL Certificate"
کلیک کنید.
استفاده از CSR منطبق با کلید تولید شده برای تولید مجوز معتبر برای دامین
حالا وارد بخش درخواست مجوز شدیم:
گزینه ی اول که Web Server SSL/TLS Certificate هست رو انتخاب کنید و بعد Continue
تو این صفحه باید آدرس دامین (مسلماً دامینی که تاییدش کرده باشید) و کد CSR رو وارد کنید.
پس از وارد کردن دامین و تاییدش، نوبت وارد کردن CSR هست تا مجوز معتبری که رو سرورتون کار کنه تولید بشه
بر می گردیم به سرور و کد زیر رو برای نمایش محتویات فایل csr
وارد می کنیم:
محتویات فایل که تو Terminal نمایش داده شده رو کپی و تو کادر مربوطه وارد می کنیم:
همه چیز درست هست، پس submit رو میزنیم:
خب، مجوز رو دریافت کردین. دانلودش کنید
کانفیگ کردن NginX برای فعال سازی SSL بر روی دامین
فایلی که دانلود کردین، حاوی چند فایل زیپ هست که برای وب سرورهای متفاوت فایل ها رو آماده کرده، برای NginX یک فایل crt
هست که ازش استفاده می کنیم:
فایل رو به سرور منتقل کنید و در محل امنی نگهداریش کنید
خب، فرض بر این هست که قبلاً Nginx رو کانفیگ کردید و سایتتون رو به Nginx معرفی کردید
معمولاً لیست سایت ها در مسیر /etc/nginx/conf.d/
ذخیره میشن، ممکنه برای شما مسیرش متفاوت باشه که البته اهمیتی نداره، ما فقط میخوایم اطلاعات SSL رو بلاک Server مربوط به دامین موردنظرمون اضافه کنیم
با این فرض فایل مربوط به دامین رو باز می کنیم (من از vi استفاده می کنم، شما از هر ادیتور متنی که باهاش راحتید استفاده کنید):
محتویاتش چیزی شبیه به این هست:
listen *:80;
server_name www.example.com example.com;
access_log /var/log/nginx/example.access.log;
error_log /var/log/nginx/example.error.log;
root /srv/example;
index index.html index.htm index.php;
.
.
.
}
به بلاک سرور کدهای زیر رو اضافه می کنیم:
ssl_certificate /etc/ssl/1_www.example.com_bundle.crt;
ssl_certificate_key /etc/ssl/www.example.com.key;
www.example.com.key
کلید خصوصی هست که در مرحلهی اول تولید کردیم
1_www.example.com_bundle.crt
فایل Certificate هست که از StartSSL دریافت کردیم
نتیجهی نهایی چیزی شبیه به این خواهد بود:
listen *:80;
listen *:443 ssl;
ssl_certificate /etc/ssl/1_www.example.com_bundle.crt;
ssl_certificate_key /etc/ssl/www.example.com.key;
server_name www.example.com example.com;
access_log /var/log/nginx/example.access.log;
error_log /var/log/nginx/example.error.log;
root /srv/example;
index index.html index.htm index.php;
.
.
.
}
توجه داشته باشید که در این مثال سایت هم با http و هم با https در دسترس خواهد بود، اگه قصد دارین فقط با https در دسترس باشه خط اول در بلاک سرور که listen *:80;
هست رو حذف کنید.
حالا Nginx رو رستارت کنید تا تنظیمات جدید فعال بشه. با اینکار پس از راه اندازی Nginx ازتون میخاد که پسورد key که در مرحلهی اول رو ساختید رو وارد کنید تا بتونه از کلید خصوصی استفاده کنه. تا این کلید رو وارد نکنید، Nginx راه اندازی نمیشه.
الان سایتتون رو با https باز کنید. همه چی به خوبی انجام شد و الان سایت شما مجوز معتبر SSL رو داره.
Decrypt کردن Key بر روی سرور
در مرحلهی قبل گفتیم که با هربار رستارت Nginx ازتون پسورد key رو میخاد، شاید این مورد کمی دردسر ساز باشه، ممکنه در شرایطی Nginx یا سرور رستارت بشه و تا این کد رو وارد نکنید Nginx اجرا نخواهد شد و هیچکدوم از سایت ها در دسترس نخواهند بود.
درصورت تمایل می تونید با دیکریپت کردن کلید خصوصی، نیاز به پسورد رو حذف کنید، تصمیم در این مورد با خودتون.
برای اینکار از کد زیر استفاده می کنیم (اگه تو دایرکتوری حاوی کلید نیستید، مسیر کامل رو بنویسید):
پسورد کلید رو ازتون میپرسه و در نهایت فایلی تحت عنوان www.example.com.dec.key
براتون تولید می کنه.
خیلی مهمه که دسترسی به این فایل محدود بشه، پس با یوزر root مجوز این فایل رو به 400 تغییر میدیم
این فایل رو جایگزین فایل www.example.com.key
در بلاک سرور Nginx میکنیم
با این تغییر محتویات فایل /etc/nginx/conf.d/www.example.com
چیزی شبیه به این خواهد بود:
listen *:80;
listen *:443 ssl;
ssl_certificate /etc/ssl/1_www.example.com_bundle.crt;
ssl_certificate_key /etc/ssl/www.example.com.dec.key;
server_name www.example.com example.com;
access_log /var/log/nginx/example.access.log;
error_log /var/log/nginx/example.error.log;
root /srv/example;
index index.html index.htm index.php;
.
.
.
}
امیدوارم این پست براتون مفید واقع شده باشه.
بد نیست منابعی که در ادامه معرفی میشن رو مطالعه کنید، اطلاعات کاملتری بهتون میدن و برای کانفیگ وب سرورهای دیگه میتونید ازشون بهره ببرید